lyhzzz 1 år sedan
förälder
incheckning
a63a348e93

+ 72 - 0
src/main/java/com/fdkankan/ucenter/entity/IncrementAutoOrder.java

@@ -0,0 +1,72 @@
+package com.fdkankan.ucenter.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-11-09
+ */
+@Getter
+@Setter
+@TableName("t_increment_auto_order")
+public class IncrementAutoOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 自动订阅表
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 权益类型id
+     */
+    @TableField("increment_type_id")
+    private Integer incrementTypeId;
+
+    /**
+     * 会员id
+     */
+    @TableField("user_increment_id")
+    private Long userIncrementId;
+
+    /**
+     * paypal订阅id
+     */
+    @TableField("subscription_id")
+    private String subscriptionId;
+
+    @TableField("order_sn")
+    private String orderSn;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 2 - 0
src/main/java/com/fdkankan/ucenter/entity/IncrementOrder.java

@@ -132,4 +132,6 @@ public class IncrementOrder implements Serializable {
     @TableField("auto_pay")
     private Integer autoPay;
 
+    @TableField("auto_order_id")
+    private Integer autoOrderId;
 }

+ 1 - 1
src/main/java/com/fdkankan/ucenter/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir") ;
 
         generate(path,"ucenter", getTables(new String[]{
-                "t_case",
+                "t_increment_auto_order",
         }));
 
 //        generate(path,"goods", getTables(new String[]{

+ 18 - 0
src/main/java/com/fdkankan/ucenter/mapper/IIncrementAutoOrderMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.ucenter.mapper;
+
+import com.fdkankan.ucenter.entity.IncrementAutoOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-11-09
+ */
+@Mapper
+public interface IIncrementAutoOrderMapper extends BaseMapper<IncrementAutoOrder> {
+
+}

+ 10 - 23
src/main/java/com/fdkankan/ucenter/mq/consumer/AutoOrderConsumer.java

@@ -1,10 +1,7 @@
 package com.fdkankan.ucenter.mq.consumer;
 
 import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.ucenter.entity.IncrementOrder;
-import com.fdkankan.ucenter.entity.IncrementType;
-import com.fdkankan.ucenter.entity.User;
-import com.fdkankan.ucenter.entity.UserIncrement;
+import com.fdkankan.ucenter.entity.*;
 import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
 import com.fdkankan.ucenter.pay.paypal.sdk.AutoPaypalVo;
 import com.fdkankan.ucenter.pay.strategy.impl.DownloadOrderImpl;
@@ -38,7 +35,9 @@ public class AutoOrderConsumer {
     @Autowired
     IUserService userService;
     @Autowired
-    IncrementOrderImpl incrementOrder;
+    IncrementOrderImpl incrementOrderImpl;
+    @Autowired
+    IIncrementAutoOrderService autoOrderService;
 
 
     @RabbitListener(
@@ -56,10 +55,9 @@ public class AutoOrderConsumer {
             if(order == null){
                 return;
             }
-            Long  incrementId = null;
-            List<UserIncrement> increments = userIncrementService.getByAutoOrderSn(order.getOrderSn());
-            if( increments.size()>0){
-                incrementId = increments.get(0).getId();
+            IncrementAutoOrder incrementAutoOrder = autoOrderService.getBySubId(order.getSubscriptionId());
+            if(incrementAutoOrder == null){
+                return;
             }
 
             switch (order.getEventType()){
@@ -67,7 +65,7 @@ public class AutoOrderConsumer {
                     //Enum: "completed" "partially_refunded" "pending" "refunded" "denied"
                     switch (order.getState()){
                         case "completed" :      //扣款完成
-                            incrementOrder.handleOrder(order.getOrderSn(),order.getOrderSn(),order.getOrderSn(),2,incrementId);
+                            autoOrderService.paySuccess(incrementAutoOrder,order);
                             break;
                         case "partially_refunded" :
                             break;
@@ -76,23 +74,12 @@ public class AutoOrderConsumer {
                         case "refunded" :       //退还
                             break;
                         case "denied" :         //支付失败
-                            for (UserIncrement increment : increments) {
-                                User user = userService.getById(increment.getUserId());
-                                if(user != null){
-                                    mailTemplateService.sendPayErrorMail(user.getUserName(),increment.getMemberLevels());
-                                }
-                            }
+                            autoOrderService.payError(incrementAutoOrder,order);
                             break;
                     }
                     break;
                 case "BILLING.SUBSCRIPTION.CANCELLED" :     //取消订阅
-                    for (UserIncrement increment : increments) {
-                        userIncrementService.cancelSubscriptions(increment);
-                        User user = userService.getById(increment.getUserId());
-                        if(user != null){
-                            mailTemplateService.sendSubcriptionCancelledMail(user.getUserName(),increment.getMemberLevels());
-                        }
-                    }
+                    autoOrderService.subscriptionCancelled(incrementAutoOrder,order);
                     break;
                 default:
                     break;

+ 8 - 1
src/main/java/com/fdkankan/ucenter/mq/consumer/OrderDownConsumer.java

@@ -7,6 +7,7 @@ import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
 import com.fdkankan.ucenter.pay.strategy.impl.DownloadOrderImpl;
 import com.fdkankan.ucenter.pay.strategy.impl.EntityOrderImpl;
 import com.fdkankan.ucenter.pay.strategy.impl.IncrementOrderImpl;
+import com.fdkankan.ucenter.service.IIncrementAutoOrderService;
 import com.fdkankan.ucenter.service.IIncrementOrderService;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
@@ -37,6 +38,8 @@ public class OrderDownConsumer {
     DownloadOrderImpl downloadOrder;
     @Autowired
     EntityOrderImpl entityOrder;
+    @Autowired
+    IIncrementAutoOrderService autoOrderService;
 
 
     @RabbitListener(
@@ -51,7 +54,11 @@ public class OrderDownConsumer {
             channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
 
             PayOrderVo order = JSONObject.parseObject(msg, PayOrderVo.class);
-            if(order == null || order.getAutoPay() == 1){
+            if(order == null ){
+                return;
+            }
+            if(order.getAutoPay() != null && order.getAutoPay() == 1){
+                autoOrderService.subOrder(order);
                 return;
             }
             //更新订单状态

+ 8 - 0
src/main/java/com/fdkankan/ucenter/pay/paypal/sdk/AutoPaypalVo.java

@@ -14,4 +14,12 @@ public class AutoPaypalVo {
      * Enum: "completed" "partially_refunded" "pending" "refunded" "denied"
      */
     private String state;
+
+    private String amount;
+
+    private String tradeNo;
+
+    private String subscriptionId;
+
+    private String subscriptionOrderSn;
 }

+ 13 - 7
src/main/java/com/fdkankan/ucenter/pay/strategy/impl/IncrementOrderImpl.java

@@ -31,17 +31,23 @@ public class IncrementOrderImpl implements OrderStrategy {
     IIncrementTypeService incrementTypeService;
     @Autowired
     IAgentNewLogService agentNewLogService;
+    @Autowired
+    IIncrementAutoOrderService incrementAutoOrderService;
 
     @Override
     public void handleOrder(String orderSn, String tradeNo, String openId, int paymentTypeName, Long incrementId) throws Exception {
 
-        IncrementOrder responseIncrementOrder = incrementOrderService.getByOrderSn(orderSn);
+        IncrementOrder responseIncrementOrder = incrementOrderService.getByOrderSnNoPay(orderSn);
         if (responseIncrementOrder == null) {
             log.error("找不到订单:" + orderSn);
             throw new Exception("找不到订单,out_trade_no错误");
         }
-        if(incrementId != null){
-            responseIncrementOrder.setIncrementId(incrementId);
+        IncrementAutoOrder incrementAutoOrder = null;
+        if(responseIncrementOrder.getAutoOrderId() != null){
+            incrementAutoOrder = incrementAutoOrderService.getById(responseIncrementOrder.getAutoOrderId());
+            if(incrementAutoOrder != null && incrementAutoOrder.getUserIncrementId() !=null){
+                responseIncrementOrder.setIncrementId(incrementAutoOrder.getUserIncrementId());
+            }
         }
         // 更新增值权益订单
         boolean result = incrementOrderService.paySuccessIncrementOrder(orderSn, tradeNo, paymentTypeName);
@@ -71,8 +77,8 @@ public class IncrementOrderImpl implements OrderStrategy {
                     userIncrementEntity.setIsExpired(expired);
                     userIncrementEntity.setIncrementTypeId(responseIncrementOrder.getIncrementType());
                     userIncrementEntity.setMemberLevels(responseIncrementOrder.getMemberLevels());
-                    if(responseIncrementOrder.getAutoPay() == 1){
-                        userIncrementEntity.setSubscriptionOrder(responseIncrementOrder.getOrderSn());
+                    if(incrementAutoOrder!= null){
+                        userIncrementEntity.setSubscriptionOrder(incrementAutoOrder.getSubscriptionId());
                     }
                     userIncrementService.save(userIncrementEntity);
                 }
@@ -85,8 +91,8 @@ public class IncrementOrderImpl implements OrderStrategy {
             userIncrementEntity.setOrderSn(userIncrementEntity.getOrderSn() + "," + orderSn);
             userIncrementEntity.setUpdateTime(DateUserUtil.getDate(new Date()));
             userIncrementEntity.setIsExpired(expired);
-            if(responseIncrementOrder.getAutoPay() == 1){
-                userIncrementEntity.setSubscriptionOrder(responseIncrementOrder.getOrderSn());
+            if(incrementAutoOrder!= null){
+                userIncrementEntity.setSubscriptionOrder(incrementAutoOrder.getSubscriptionId());
             }
             userIncrementService.updateById(userIncrementEntity);
 

+ 29 - 0
src/main/java/com/fdkankan/ucenter/service/IIncrementAutoOrderService.java

@@ -0,0 +1,29 @@
+package com.fdkankan.ucenter.service;
+
+import com.fdkankan.ucenter.entity.IncrementAutoOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
+import com.fdkankan.ucenter.pay.paypal.sdk.AutoPaypalVo;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-11-09
+ */
+public interface IIncrementAutoOrderService extends IService<IncrementAutoOrder> {
+
+    void addOrder(Long userId, Integer incrementTypeId, Long incrementId, String orderSn);
+
+    void subOrder(PayOrderVo order);
+
+    IncrementAutoOrder getBySubId(String subscriptionId);
+
+    void paySuccess(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order) throws Exception;
+
+    void payError(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order);
+
+    void subscriptionCancelled(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order);
+}

+ 4 - 0
src/main/java/com/fdkankan/ucenter/service/IIncrementOrderService.java

@@ -1,10 +1,12 @@
 package com.fdkankan.ucenter.service;
 
 import com.fdkankan.ucenter.common.PageInfo;
+import com.fdkankan.ucenter.entity.IncrementAutoOrder;
 import com.fdkankan.ucenter.entity.IncrementOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.ucenter.entity.IncrementType;
 import com.fdkankan.ucenter.entity.User;
+import com.fdkankan.ucenter.pay.paypal.sdk.AutoPaypalVo;
 import com.fdkankan.ucenter.vo.request.DownNumParam;
 import com.fdkankan.ucenter.vo.request.IncrementOrderParam;
 import com.fdkankan.ucenter.vo.request.OrderParam;
@@ -36,4 +38,6 @@ public interface IIncrementOrderService extends IService<IncrementOrder> {
     boolean paySuccessIncrementOrder(String orderSn, String tradeNo, int paymentTypeName);
 
     IncrementOrder getByOrderSnNoPay(String orderSn);
+
+    void addNewOrderByOrder(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order);
 }

+ 96 - 0
src/main/java/com/fdkankan/ucenter/service/impl/IncrementAutoOrderServiceImpl.java

@@ -0,0 +1,96 @@
+package com.fdkankan.ucenter.service.impl;
+import java.util.Date;
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.ucenter.entity.IncrementAutoOrder;
+import com.fdkankan.ucenter.entity.User;
+import com.fdkankan.ucenter.entity.UserIncrement;
+import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
+import com.fdkankan.ucenter.mapper.IIncrementAutoOrderMapper;
+import com.fdkankan.ucenter.pay.paypal.sdk.AutoPaypalVo;
+import com.fdkankan.ucenter.pay.strategy.impl.IncrementOrderImpl;
+import com.fdkankan.ucenter.service.*;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-11-09
+ */
+@Service
+public class IncrementAutoOrderServiceImpl extends ServiceImpl<IIncrementAutoOrderMapper, IncrementAutoOrder> implements IIncrementAutoOrderService {
+
+    @Autowired
+    IUserIncrementService userIncrementService;
+    @Autowired
+    IIncrementOrderService incrementOrderService;
+    @Autowired
+    IncrementOrderImpl incrementOrder;
+    @Autowired
+    IMailTemplateService mailTemplateService;
+    @Autowired
+    IUserService userService;
+
+    @Override
+    public void addOrder(Long userId, Integer incrementTypeId, Long incrementId, String orderSn) {
+        IncrementAutoOrder autoOrder = new IncrementAutoOrder();
+        autoOrder.setUserId(userId);
+        autoOrder.setIncrementTypeId(incrementTypeId);
+        autoOrder.setUserIncrementId(incrementId);
+        autoOrder.setOrderSn(orderSn);
+        this.save(autoOrder);
+    }
+
+    @Override
+    public void subOrder(PayOrderVo order) {
+        LambdaUpdateWrapper<IncrementAutoOrder> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(IncrementAutoOrder::getOrderSn,order.getOrderSn());
+        wrapper.set(IncrementAutoOrder::getSubscriptionId,order.getTradeNo());
+        this.update(wrapper);
+    }
+
+    @Override
+    public IncrementAutoOrder getBySubId(String subscriptionId) {
+        LambdaUpdateWrapper<IncrementAutoOrder> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(IncrementAutoOrder::getSubscriptionId,subscriptionId);
+        return this.getOne(wrapper);
+    }
+
+    @Override
+    public void paySuccess(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order) throws Exception {
+        incrementOrderService.addNewOrderByOrder(incrementAutoOrder,order);
+
+        incrementOrder.handleOrder(order.getOrderSn(),order.getTradeNo(),order.getOrderSn(),2,null);
+
+    }
+
+    @Override
+    public void payError(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order) {
+        User user = userService.getById(incrementAutoOrder.getUserId());
+        if(user != null){
+            List<UserIncrement> userIncrements = userIncrementService.getByAutoOrderSn(order.getSubscriptionId());
+            if(userIncrements.size() >0){
+                mailTemplateService.sendPayErrorMail(user.getUserName(),userIncrements.get(0).getMemberLevels());
+            }
+        }
+    }
+
+    @Override
+    public void subscriptionCancelled(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order) {
+        List<UserIncrement> userIncrements = userIncrementService.getByAutoOrderSn(order.getSubscriptionId());
+        for (UserIncrement increment : userIncrements) {
+            userIncrementService.cancelSubscriptions(increment);
+            User user = userService.getById(increment.getUserId());
+            if(user != null){
+                mailTemplateService.sendSubcriptionCancelledMail(user.getUserName(),increment.getMemberLevels());
+            }
+        }
+    }
+}

+ 32 - 0
src/main/java/com/fdkankan/ucenter/service/impl/IncrementOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.ucenter.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.amazonaws.services.simpleworkflow.flow.annotations.NoWait;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -20,6 +21,7 @@ import com.fdkankan.ucenter.httpClient.param.PayGoods;
 import com.fdkankan.ucenter.httpClient.service.PayService;
 import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
 import com.fdkankan.ucenter.mapper.IIncrementOrderMapper;
+import com.fdkankan.ucenter.pay.paypal.sdk.AutoPaypalVo;
 import com.fdkankan.ucenter.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.ucenter.util.DateUserUtil;
@@ -63,6 +65,8 @@ public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper
     IGoodsSkuService goodsSkuService;
     @Autowired
     IIncrementTypeService incrementTypeService;
+    @Autowired
+    IIncrementAutoOrderService incrementAutoOrderService;
 
     @Override
     public PageInfo pageList(IncrementOrderParam param) {
@@ -198,6 +202,7 @@ public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper
         if(payOrderVo == null){
             throw new BusinessException(OrderConstant.FAILURE_CODE_8005,OrderConstant.FAILURE_MSG_8005);
         }
+
         incrementOrderEntity.setOrderSn(payOrderVo.getOrderSn());
         incrementOrderEntity.setAmount(total);
         incrementOrderEntity.setPayType(param.getPayType());
@@ -214,6 +219,10 @@ public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper
         incrementOrderEntity.setMonthQy(param.getMonthQy());
         incrementOrderEntity.setTimeZoneOff(param.getTimeZoneOff());
         incrementOrderEntity.setAutoPay(param.getAutoPay());
+        if(param.getAutoPay() != null && param.getAutoPay()==1){
+            incrementAutoOrderService.addOrder(user.getId(),incrementType.getId(),param.getIncrementId(),incrementOrderEntity.getOrderSn());
+            return incrementOrderEntity;
+        }
         this.save(incrementOrderEntity);
         return incrementOrderEntity;
     }
@@ -250,4 +259,27 @@ public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper
                 .eq(IncrementOrder::getOrderSn,orderSn);
         return this.update(updateWrapper);
     }
+
+    @Override
+    public void addNewOrderByOrder(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order) {
+        IncrementOrder incrementOrder = new IncrementOrder();
+        incrementOrder.setOrderSn(order.getOrderSn());
+        incrementOrder.setAmount(new BigDecimal(order.getAmount()));
+        incrementOrder.setPayType(2);
+        incrementOrder.setPayStatus(1);
+        incrementOrder.setUserId(incrementAutoOrder.getUserId());
+        incrementOrder.setCount(1);
+        incrementOrder.setNumber(order.getTradeNo());
+        incrementOrder.setAbroad(1);
+        incrementOrder.setStatus(incrementAutoOrder.getUserIncrementId() == null ? 1 : 2);
+        incrementOrder.setIncrementId(incrementAutoOrder.getUserIncrementId());
+        incrementOrder.setRecStatus("A");
+        incrementOrder.setCreateTime(DateUserUtil.getDate(new Date()));
+        incrementOrder.setUpdateTime(DateUserUtil.getDate(new Date()));
+        incrementOrder.setIncrementType(incrementAutoOrder.getIncrementTypeId());
+        incrementOrder.setMonthQy(1);
+        incrementOrder.setAutoPay(1);
+        incrementOrder.setAutoOrderId(incrementAutoOrder.getId());
+        this.save(incrementOrder);
+    }
 }

+ 5 - 0
src/main/resources/mapper/ucenter/IncrementAutoOrderMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.ucenter.mapper.IIncrementAutoOrderMapper">
+
+</mapper>