|
@@ -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();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 手动创建虚拟订单
|
|
|
*
|