lyhzzz před 1 rokem
rodič
revize
79fbd6aef5

+ 46 - 7
src/main/java/com/fdkankan/ucenter/mq/consumer/AutoOrderConsumer.java

@@ -1,10 +1,18 @@
 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;
@@ -22,30 +30,61 @@ public class AutoOrderConsumer {
 
 
     @Autowired
-    IncrementOrderImpl incrementOrder;
+    IUserIncrementService userIncrementService;
     @Autowired
-    DownloadOrderImpl downloadOrder;
+    IMailTemplateService mailTemplateService;
     @Autowired
-    EntityOrderImpl entityOrder;
+    IUserService userService;
 
 
     @RabbitListener(
-            queuesToDeclare = @Queue("${queue.orderPay.autoorder-payResult:autoorder-payResult}")
+            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("接受下单结果mq--messageId:{},msg:{}",messageId,msg);
+            log.info("autoPaypal-result-mq--messageId:{},msg:{}",messageId,msg);
 
             channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
 
-            PayOrderVo order = JSONObject.parseObject(msg, PayOrderVo.class);
+            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){

+ 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;
+}

+ 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);
 }

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

@@ -46,4 +46,10 @@ 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);
 }

+ 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);
+    }
 }

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

@@ -16,10 +16,7 @@ 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.mapper.IUserIncrementMapper;
 import com.fdkankan.ucenter.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -65,6 +62,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 +415,32 @@ 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());
+
+        this.update(wrapper);
+    }
 }