소스 검색

Merge branch 'autopay-0918' into test

lyhzzz 1 년 전
부모
커밋
147b409849

+ 20 - 1
README.md

@@ -1 +1,20 @@
-v1.0.0
+#**个人中心**
+
+###**国际服paypal-auto-pay** 
+~~~~
+1. /ucenter/user/order/incrementOrder  修改
+    添加参数 autoPay 0 不开启,1开启
+
+2.GET  /ucenter/user/increment/cancelSubscription/{incrementId} 取消订阅接口
+
+3./ucenter/user/increment/findIncrementList 添加返回
+    subscriptionOrder  自动订阅订单号,有则表示开启自动订阅,无则未开
+    
+3.数据库添加字段
+    
+    ALTER TABLE `4dkankan_v4`.`t_increment_order` 
+    ADD COLUMN `auto_pay` int NULL DEFAULT 0 COMMENT '是否开启自动订阅0否,1是' AFTER `time_zone_off`;
+
+    ALTER TABLE `4dkankan_v4`.`t_user_increment` 
+    ADD COLUMN `subscription_order` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '自动订阅订单号' AFTER `agent_id`;
+~~~~

+ 8 - 0
src/main/java/com/fdkankan/ucenter/controller/IncrementController.java

@@ -1,5 +1,7 @@
 package com.fdkankan.ucenter.controller;
 
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.DateUtil;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.ucenter.common.BaseController;
@@ -79,4 +81,10 @@ public class IncrementController extends BaseController {
         responseUserIncrement.setCreateStr(DateUserUtil.getDayTime(responseUserIncrement.getCreateTime()));
         return Result.success(userIncrementEntity);
     }
+
+    @GetMapping("/cancelSubscription/{incrementId}")
+    public Result cancelSubscription(@PathVariable Integer incrementId){
+        userIncrementService.cancelSubscription(incrementId);
+        return Result.success();
+    }
 }

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

@@ -129,5 +129,7 @@ public class IncrementOrder implements Serializable {
     @TableField("time_zone_off")
     private Integer timeZoneOff;
 
+    @TableField("auto_pay")
+    private Integer autoPay;
 
 }

+ 3 - 0
src/main/java/com/fdkankan/ucenter/entity/UserIncrement.java

@@ -107,4 +107,7 @@ public class UserIncrement implements Serializable {
     @TableField("agent_id")
     private Integer agentId;
 
+    @TableField("subscription_order")
+    private String subscriptionOrder;
+
 }

+ 6 - 0
src/main/java/com/fdkankan/ucenter/httpClient/client/PayClient.java

@@ -8,6 +8,7 @@ import com.fdkankan.ucenter.httpClient.address.PayAddressSource;
 import com.fdkankan.ucenter.httpClient.param.PayOrderParam;
 import com.fdkankan.ucenter.httpClient.param.SSDownSceneParam;
 import com.fdkankan.ucenter.httpClient.param.SsBindParam;
+import org.springframework.web.bind.annotation.GetMapping;
 
 import java.util.List;
 import java.util.Map;
@@ -31,5 +32,10 @@ public interface PayClient {
     @Get("/service/pay/order/info/{orderSn}")
     ResultData queryOrder(@Var("orderSn")String orderSn);
 
+    /**
+     * paypal取消订阅
+     */
+    @Get("/service/pay/paypal/cancel/{orderSn}")
+    ResultData cancelSubscription(@Var("orderSn")String orderSn);
 
 }

+ 3 - 1
src/main/java/com/fdkankan/ucenter/httpClient/param/PayGoods.java

@@ -11,6 +11,7 @@ public class PayGoods {
     private Integer goodsId;
     private Integer monthQy = 1;
     private String nameEn;
+    private Integer autoPay;
 
     public PayGoods(String name, String nameEn,Integer count,Integer type) {
         this.name = name;
@@ -19,11 +20,12 @@ public class PayGoods {
         this.type = type;
     }
 
-    public PayGoods(String name, Integer count,Integer type,Integer monthQy) {
+    public PayGoods(String name, Integer count,Integer type,Integer monthQy,Integer autoPay) {
         this.name = name;
         this.count = count;
         this.type = type;
         this.monthQy = monthQy;
+        this.autoPay = autoPay;
     }
 
     public PayGoods(String name, Integer count,String sceneNum,Integer type) {

+ 98 - 0
src/main/java/com/fdkankan/ucenter/mq/consumer/AutoOrderConsumer.java

@@ -0,0 +1,98 @@
+package com.fdkankan.ucenter.mq.consumer;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.ucenter.entity.IncrementOrder;
+import com.fdkankan.ucenter.entity.User;
+import com.fdkankan.ucenter.entity.UserIncrement;
+import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
+import com.fdkankan.ucenter.pay.paypal.sdk.AutoPaypalVo;
+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.IIncrementOrderService;
+import com.fdkankan.ucenter.service.IMailTemplateService;
+import com.fdkankan.ucenter.service.IUserIncrementService;
+import com.fdkankan.ucenter.service.IUserService;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+
+@Slf4j
+@Component
+public class AutoOrderConsumer {
+
+
+    @Autowired
+    IUserIncrementService userIncrementService;
+    @Autowired
+    IMailTemplateService mailTemplateService;
+    @Autowired
+    IUserService userService;
+
+
+    @RabbitListener(
+            queuesToDeclare = @Queue("${queue.pay.auto-paypal:pay-auto-paypal}")
+    )
+    public void consumerQueue(Channel channel, Message message)  {
+        try {
+            String messageId = message.getMessageProperties().getMessageId();
+            String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+            log.info("autoPaypal-result-mq--messageId:{},msg:{}",messageId,msg);
+
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+
+            AutoPaypalVo order = JSONObject.parseObject(msg, AutoPaypalVo.class);
+            if(order == null){
+                return;
+            }
+
+            UserIncrement increment = userIncrementService.getByAutoOrderSn(order.getOrderSn());
+            if(increment == null){
+                return;
+            }
+            User user = userService.getById(increment.getUserId());
+
+            switch (order.getEventType()){
+                case "PAYMENT.SALE.COMPLETED" :     //每日扣款
+                    //Enum: "completed" "partially_refunded" "pending" "refunded" "denied"
+                    switch (order.getState()){
+                        case "completed" :      //扣款完成
+                            userIncrementService.delay(increment);
+                            break;
+                        case "partially_refunded" :
+                            break;
+                        case "pending" :        //等待
+                            break;
+                        case "refunded" :       //退还
+                            break;
+                        case "denied" :         //支付失败
+                            if(user != null){
+                                mailTemplateService.sendPayErrorMail(user.getUserName());
+                            }
+                            break;
+                    }
+                    break;
+                case "BILLING.SUBSCRIPTION.CANCELLED" :     //取消订阅
+                    userIncrementService.cancelSubscriptions(increment);
+                    break;
+                default:
+                    break;
+            }
+
+
+        }catch (Exception e){
+            log.error("order-payResult----消费失败",e);
+        }finally {
+
+        }
+
+    }
+
+}

+ 0 - 3
src/main/java/com/fdkankan/ucenter/mq/consumer/OrderDownConsumer.java

@@ -49,9 +49,6 @@ public class OrderDownConsumer {
             log.info("接受下单结果mq--messageId:{},msg:{}",messageId,msg);
 
             channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-            msg = msg.substring(1, msg.length() - 1);
-
-            msg = StringEscapeUtils.unescapeJava(msg);
 
             PayOrderVo order = JSONObject.parseObject(msg, PayOrderVo.class);
             if(order == null){

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

@@ -0,0 +1,17 @@
+package com.fdkankan.ucenter.pay.paypal.sdk;
+
+import lombok.Data;
+
+@Data
+public class AutoPaypalVo {
+    private String orderSn;
+    /**
+     * BILLING.SUBSCRIPTION.CANCELLED
+     * PAYMENT.SALE.COMPLETED
+     */
+    private String eventType;
+    /**
+     * Enum: "completed" "partially_refunded" "pending" "refunded" "denied"
+     */
+    private String state;
+}

+ 6 - 1
src/main/java/com/fdkankan/ucenter/pay/strategy/impl/IncrementOrderImpl.java

@@ -66,7 +66,9 @@ public class IncrementOrderImpl implements OrderStrategy {
                     userIncrementEntity.setIsExpired(0);
                     userIncrementEntity.setIncrementTypeId(responseIncrementOrder.getIncrementType());
                     userIncrementEntity.setMemberLevels(responseIncrementOrder.getMemberLevels());
-
+                    if(responseIncrementOrder.getAutoPay() == 1){
+                        userIncrementEntity.setSubscriptionOrder(responseIncrementOrder.getOrderSn());
+                    }
                     userIncrementService.save(userIncrementEntity);
                 }
             }
@@ -77,6 +79,9 @@ public class IncrementOrderImpl implements OrderStrategy {
             userIncrementEntity.setOrderSn(userIncrementEntity.getOrderSn() + "," + orderSn);
             userIncrementEntity.setUpdateTime(DateUserUtil.getDate(new Date()));
             userIncrementEntity.setIsExpired(0);
+            if(responseIncrementOrder.getAutoPay() == 1){
+                userIncrementEntity.setSubscriptionOrder(responseIncrementOrder.getOrderSn());
+            }
             userIncrementService.updateById(userIncrementEntity);
 
             if(userIncrementEntity.getAgentId() != null){

+ 2 - 0
src/main/java/com/fdkankan/ucenter/service/IMailTemplateService.java

@@ -47,4 +47,6 @@ public interface IMailTemplateService extends IService<MailTemplate> {
     Boolean sendSceneCooperation(List<ScenePro> proList, List<ScenePlus> plusList, String username,String lang);
 
     Boolean sendCameraCooperation(HashMap<Long, Camera> cameraMap, String username, String lang);
+
+    void sendPayErrorMail(String email);
 }

+ 8 - 0
src/main/java/com/fdkankan/ucenter/service/IUserIncrementService.java

@@ -46,4 +46,12 @@ public interface IUserIncrementService extends IService<UserIncrement> {
     void delByCameraId(List<Long> cameraIds);
 
     HashMap<String, List<Long>> getByOrderSnList(Set<String> orderSn);
+
+    UserIncrement getByAutoOrderSn(String orderSn);
+
+    void delay(UserIncrement increment);
+
+    void cancelSubscriptions(UserIncrement increment);
+
+    void cancelSubscription(Integer incrementId);
 }

+ 2 - 1
src/main/java/com/fdkankan/ucenter/service/impl/IncrementOrderServiceImpl.java

@@ -171,7 +171,7 @@ public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper
         }
 
         IncrementOrder incrementOrderEntity = new IncrementOrder();
-        PayGoods payGoods = new PayGoods(incrementType.getName(),param.getCount(),incrementType.getValidTimeType(),param.getMonthQy());
+        PayGoods payGoods = new PayGoods(incrementType.getName(),param.getCount(),incrementType.getValidTimeType(),param.getMonthQy(),param.getAutoPay());
         PayOrderVo payOrderVo = payService.downOrder(total, "incrementOrder",user.getUserName(),user.getNickName(), Arrays.asList(payGoods));
         if(payOrderVo == null){
             throw new BusinessException(OrderConstant.FAILURE_CODE_8005,OrderConstant.FAILURE_MSG_8005);
@@ -191,6 +191,7 @@ public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper
         incrementOrderEntity.setIncrementType(incrementType.getId());
         incrementOrderEntity.setMonthQy(param.getMonthQy());
         incrementOrderEntity.setTimeZoneOff(param.getTimeZoneOff());
+        incrementOrderEntity.setAutoPay(param.getAutoPay());
         if(incrementType.getValidTimeType() == 0){
             incrementOrderEntity.setMemberLevels("PR");
         }

+ 6 - 0
src/main/java/com/fdkankan/ucenter/service/impl/MailTemplateServiceImpl.java

@@ -157,4 +157,10 @@ public class MailTemplateServiceImpl extends ServiceImpl<IMailTemplateMapper, Ma
         }
         return false;
     }
+
+    @Override
+    public void sendPayErrorMail(String email) {
+        MailTemplate mailTemplate = this.getTemplate(9,"en");
+        sendMail(email,mailTemplate,null);
+    }
 }

+ 46 - 4
src/main/java/com/fdkankan/ucenter/service/impl/UserIncrementServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.PatternUtils;
 import com.fdkankan.common.util.SecurityUtil;
@@ -16,10 +17,8 @@ import com.fdkankan.common.util.DateUtil;
 import com.fdkankan.ucenter.common.constants.NacosProperty;
 import com.fdkankan.ucenter.constant.CameraConstant;
 import com.fdkankan.ucenter.constant.LoginConstant;
-import com.fdkankan.ucenter.entity.Camera;
-import com.fdkankan.ucenter.entity.CameraDetail;
-import com.fdkankan.ucenter.entity.User;
-import com.fdkankan.ucenter.entity.UserIncrement;
+import com.fdkankan.ucenter.entity.*;
+import com.fdkankan.ucenter.httpClient.client.PayClient;
 import com.fdkankan.ucenter.mapper.IUserIncrementMapper;
 import com.fdkankan.ucenter.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -65,6 +64,8 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
     ICameraIncrementLogService cameraIncrementLogService;
     @Autowired
     IExceedSpaceSceneService exceedSpaceSceneService;
+    @Autowired
+    IIncrementTypeService incrementTypeService;
 
     @Override
     public Long getCountByUserId(Long userId, int type) {
@@ -416,4 +417,45 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
 
         return map;
     }
+
+    @Override
+    public UserIncrement getByAutoOrderSn(String orderSn) {
+        return null;
+    }
+
+    /**
+     * 续费1单位
+     */
+    @Override
+    public void delay(UserIncrement increment) {
+        LambdaUpdateWrapper<UserIncrement> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(UserIncrement::getId,increment.getId());
+        wrapper.set(UserIncrement::getIsExpired,0);
+
+        IncrementType incrementType = incrementTypeService.getById(increment.getIncrementTypeId());
+        Date date = DateUserUtil.getDateTime(new Date(),incrementType,1).toDate();
+        wrapper.set(UserIncrement::getIncrementEndTime,date);
+        this.update(wrapper);
+    }
+
+    @Override
+    public void cancelSubscriptions(UserIncrement increment) {
+        LambdaUpdateWrapper<UserIncrement> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(UserIncrement::getId,increment.getId());
+        wrapper.set(UserIncrement::getSubscriptionOrder,null);
+        this.update(wrapper);
+    }
+
+    @Autowired
+    PayClient payClient;
+
+    @Override
+    public void cancelSubscription(Integer incrementId) {
+        UserIncrement userIncrement = this.getById(incrementId);
+        if(userIncrement == null){
+            throw new BusinessException(ErrorCode.VALUE_NOT_EXIST);
+        }
+        this.cancelSubscriptions(userIncrement);
+        payClient.cancelSubscription(userIncrement.getSubscriptionOrder());
+    }
 }

+ 2 - 0
src/main/java/com/fdkankan/ucenter/vo/request/DownNumParam.java

@@ -24,6 +24,8 @@ public class DownNumParam {
 
     private Integer timeZoneOff;
 
+    private Integer autoPay ;
+
     public Integer getIncrementType() {
         if(incrementType == null && StringUtils.isNotBlank(skuSn) && StringUtils.isNumeric(skuSn)){
             return  Integer.valueOf(skuSn);

+ 2 - 0
src/main/java/com/fdkankan/ucenter/vo/response/UserIncrementVo.java

@@ -52,6 +52,8 @@ public class UserIncrementVo  {
     private String memberLevels;
     private Integer monthQy;
 
+    private String subscriptionOrder;
+
 
     public String getIncrementStartStr() {
         return DateUserUtil.getDayTime(incrementStartTime);