Browse Source

Bug修复

tangxiangan 4 months ago
parent
commit
69cb987076

+ 53 - 7
pdf-office-payment/src/main/java/cn/kdan/cloud/pdf/office/payment/controller/OrderController.java

@@ -1,29 +1,31 @@
 package cn.kdan.cloud.pdf.office.payment.controller;
 
 import cn.kdan.cloud.pdf.office.api.payment.vo.OrderGiftLogVO;
-import cn.kdan.cloud.pdf.office.api.product.vo.ProductVO;
 import cn.kdan.cloud.pdf.office.common.dto.CreateUserOrderDTO;
-import cn.kdan.cloud.pdf.office.common.utils.JsonUtils;
 import cn.kdan.cloud.pdf.office.common.vo.UserInfoVO;
 import cn.kdan.cloud.pdf.office.api.payment.dto.*;
-import cn.kdan.cloud.pdf.office.api.payment.enums.PaymentMethodEnum;
 import cn.kdan.cloud.pdf.office.api.payment.vo.CreateOrderResultVO;
 import cn.kdan.cloud.pdf.office.api.payment.vo.OrderUpdateVO;
 import cn.kdan.cloud.pdf.office.api.payment.vo.OrdersVO;
 import cn.kdan.cloud.pdf.office.api.product.feign.ProductApi;
 import cn.kdan.cloud.pdf.office.common.pojo.ResultMap;
+import cn.kdan.cloud.pdf.office.payment.client.GooglePayClient;
+import cn.kdan.cloud.pdf.office.payment.entity.Order;
 import cn.kdan.cloud.pdf.office.payment.entity.OrderGift;
 import cn.kdan.cloud.pdf.office.payment.entity.OrderGiftLog;
 import cn.kdan.cloud.pdf.office.payment.service.*;
-import com.alibaba.fastjson.JSON;
+import cn.kdan.cloud.pdf.office.payment.webhook.google.SubscriptionPurchaseV3;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.alibaba.fastjson.JSONObject;
 import lombok.RequiredArgsConstructor;
-import lombok.val;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.client.RestTemplate;
 
 import javax.validation.constraints.NotNull;
 import java.time.ZoneId;
@@ -31,7 +33,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @author ComPDFKit-WPH 2023/2/6
@@ -57,6 +59,10 @@ public class OrderController {
     private final OrderGiftService orderGiftService;
     private final OrderGiftLogService orderGiftLogService;
 
+    private final RestTemplate restTemplate = new RestTemplate();
+    private final RedissonClient redissonClient;
+    private final GooglePayClient googlePayClient;
+
     /**
      * 创建支付订单
      *
@@ -100,6 +106,46 @@ public class OrderController {
         return ResultMap.success(googlePayService.googleEquityVerification(googlePayDTO));
     }
 
+    @PostMapping("/updateStatusPayment")
+    public ResultMap<Boolean> updateStatusPayment(@RequestParam String userId, @RequestParam String productId){
+        updatePayment(userId,productId);
+        return ResultMap.success(true);
+    }
+
+    public void updatePayment(String userId, String productId) {
+        /*
+         如果用户有进行中的订阅,查最近的完成订阅订单,
+         */
+        Order order = ordersService.getOrderByUserIdAndProductId(userId, productId);
+        //如果没有订单结束
+        if(ObjectUtils.isEmpty(order)||StringUtils.isEmpty(order.getResult())){
+            return;
+        }
+        if(order.getPayment()==6){
+            SubscriptionPurchaseV3 subscriptionGoogleOrderV2 = googlePayClient.getSubscription("com.pdftechnologies.pdfreaderpro",order.getResult());
+            if(subscriptionGoogleOrderV2.getSubscriptionState().equals("SUBSCRIPTION_STATE_CANCELED")||subscriptionGoogleOrderV2.getSubscriptionState().equals("SUBSCRIPTION_STATE_EXPIRED")){
+                googlePayService.subscriptionCancel(subscriptionGoogleOrderV2.getExternalAccountIdentifiers().getObfuscatedExternalAccountId());
+            }
+            if(subscriptionGoogleOrderV2.getSubscriptionState().equals("SUBSCRIPTION_STATE_ACTIVE")){
+                String lockKey = Integer.toString(2).concat(subscriptionGoogleOrderV2.getExternalAccountIdentifiers().getObfuscatedExternalAccountId()) + "-RedissonLock";
+                RLock rLock = redissonClient.getLock(lockKey);
+                try {
+                    // 上锁
+                    boolean resultLock = rLock.tryLock(30, 10, TimeUnit.SECONDS);
+                    if (resultLock) {
+                        googlePayService.subscriptionPaymentSucceeded(false, subscriptionGoogleOrderV2.getExternalAccountIdentifiers().getObfuscatedExternalAccountId(), subscriptionGoogleOrderV2.getLatestOrderId(), 2);
+                    }
+                } catch (InterruptedException e) {
+
+                } finally {
+                    if (rLock.isLocked() && rLock.isHeldByCurrentThread()) {
+                        rLock.unlock();
+                    }
+                }
+            }
+        }
+    }
+
     /**
      * 手动创建虚拟订单
      *