TRX il y a 1 an
Parent
commit
c31261c20f

+ 2 - 2
FullCardClient/src/main/java/com/zhongshu/card/client/utils/PayExceptionToShowUtil.java

@@ -20,9 +20,9 @@ public class PayExceptionToShowUtil {
         String msg = "";
         if (StringUtils.isNotEmpty(cls)) {
             if (cls.contains("BalanceRangeMinException")) {
-                msg = "余额不足"; // 消费金额超出限制
+                msg = "钱包余额不足"; // 消费金额超出限制
             } else if (cls.contains("BalanceRangeMaxException")) {
-                msg = "余额不足";
+                msg = "钱包余额不足";
             } else if (cls.contains("UncategorizedMongoDbException")) {
                 msg = "内部错误";
             }

+ 12 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ExpenseFlow.java

@@ -254,4 +254,16 @@ public class ExpenseFlow extends SuperMain {
     @Schema(description = "结算时间")
     private Long settlementTime;
 
+    /**
+     * 设置支付失败
+     *
+     * @param msg
+     */
+    public void setPayFailed(String msg) {
+        this.paymentStatus = "支付失败";
+        this.isPaySuccess = Boolean.FALSE;
+        this.payRemark = msg;
+        this.orderType = OrderState.PAID_ERROR;
+        this.isPaid = Boolean.TRUE;
+    }
 }

+ 43 - 38
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/PayCallService.java

@@ -100,11 +100,7 @@ public class PayCallService extends SuperService {
         ResultContent<List<PaymentType>> resultContent = payOrderSettingService.getUserPayment(entity.getUserId(), entity.getProjectOid());
         if (resultContent.isFailed()) {
             String msg = resultContent.getMsg();
-            entity.setPaymentStatus("支付失败");
-            entity.setIsPaySuccess(Boolean.FALSE);
-            entity.setPayRemark(msg);
-            entity.setOrderType(OrderState.PAID_ERROR);
-            entity.setIsPaid(Boolean.TRUE);
+            entity.setPayFailed(msg);
             expenseFlowDao.save(entity);
             return ResultContent.buildFail(msg);
         }
@@ -112,52 +108,58 @@ public class PayCallService extends SuperService {
         List<PaymentType> paymentTypes = resultContent.getContent();
         if (ObjectUtils.isEmpty(paymentTypes)) {
             String msg = "用户暂无开启支付渠道";
-            entity.setPaymentStatus("支付失败");
-            entity.setIsPaySuccess(Boolean.FALSE);
-            entity.setPayRemark(msg);
-            entity.setOrderType(OrderState.PAID_ERROR);
-            entity.setIsPaid(Boolean.TRUE);
+            entity.setPayFailed(msg);
             expenseFlowDao.save(entity);
             return ResultContent.buildFail(msg);
         }
 
         log.info("开始时间:{}", DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyySSS));
-        log.info("开始支付: {} {}", entity.getPaymentNo(), paymentTypes);
-        int maxTime = 2 * 1000;
+        log.info("渠道: {} {}", paymentTypes, entity.getPaymentNo());
+
+        int maxTime = 5 * 1000;
+        int stepTime = 110;
         boolean b = false;
         for (PaymentType paymentType : paymentTypes) {
             entity = expenseFlowDao.findTopById(entity.getId());
             entity.setPaymentType(paymentType);
             entity.setPaymentWay(paymentType.getRemark());
             if (paymentType == PaymentType.UserWallet) {
+                // 钱包支付
                 balancePay(entity);
             } else if (paymentType == PaymentType.UnionFrictionlessPay) {
+                // 银联云闪付
                 unionFrictionlessPay(entity);
             }
 
-            boolean isPaying = orderIsPaying(entity.getPaymentNo(), paymentType);
-            if (isPaying) {
-                AtomicInteger atomicInteger = new AtomicInteger(0);
-                while (atomicInteger.get() <= maxTime) {
-                    isPaying = orderIsPaying(entity.getPaymentNo(), paymentType);
-                    if (!isPaying) {
-                        break;
-                    }
-                    try {
-                        TimeUnit.MILLISECONDS.sleep(110);
-                    } catch (Exception e) {
-                        e.printStackTrace();
+            if (paymentType.isPayIsAsync()) {
+                boolean isPaying = orderIsPaying(entity.getPaymentNo(), paymentType);
+                if (isPaying) {
+                    AtomicInteger atomicInteger = new AtomicInteger(0);
+                    while (atomicInteger.get() <= maxTime) {
+                        isPaying = orderIsPaying(entity.getPaymentNo(), paymentType);
+                        log.info("等待:{} {} {}", atomicInteger.get(), isPaying, paymentType);
+                        if (!isPaying) {
+                            entity = expenseFlowDao.findTopById(entity.getId());
+                            break;
+                        }
+                        try {
+                            TimeUnit.MILLISECONDS.sleep(stepTime);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        atomicInteger.addAndGet(stepTime);
                     }
-                    atomicInteger.addAndGet(110);
                 }
             }
 
+            // 支付成功
             if (entity.getIsPaySuccess() != null && entity.getIsPaySuccess()) {
                 b = true;
                 break;
             }
         }
 
+        log.info("支付: {}", b);
         // 所有的渠道都支付失败
         if (!b && paymentTypes.size() > 1) {
             String msg = "支付失败";
@@ -165,9 +167,9 @@ public class PayCallService extends SuperService {
             entity.setIsPaySuccess(Boolean.FALSE);
             entity.setPayRemark(msg);
             entity.setOrderType(OrderState.PAID_ERROR);
+            entity.setIsPaid(Boolean.TRUE);
+            expenseFlowDao.save(entity);
         }
-        entity.setIsPaid(Boolean.TRUE);
-        expenseFlowDao.save(entity);
         return ResultContent.buildSuccess();
     }
 
@@ -189,8 +191,8 @@ public class PayCallService extends SuperService {
         paymentProcess.setPayStartTime(System.currentTimeMillis());
 
         entity.setPayStartTime(System.currentTimeMillis());
-        com.github.microservice.net.ResultContent<List<TransactionLogModel>> resultContent = balancePayService.balancePay(entity.getProjectOid(), entity.getShopOid(), entity.getUserId(), entity.getPayAmount(), entity.getPaymentNo(), entity.getRemark());
-        if (resultContent.getState() == com.github.microservice.net.ResultState.Success) {
+        com.github.microservice.pay.client.ret.ResultContent<List<TransactionLogModel>> resultContent = balancePayService.balancePay(entity.getProjectOid(), entity.getShopOid(), entity.getUserId(), entity.getPayAmount(), entity.getPaymentNo(), entity.getRemark());
+        if (resultContent.getState() == com.github.microservice.pay.client.ret.ResultState.Success) {
             // 关联参数
             String msg = "支付成功";
             List<TransactionLogModel> list = resultContent.getContent();
@@ -218,7 +220,7 @@ public class PayCallService extends SuperService {
             String msg = resultContent.getMsg();
             if (StringUtils.isNotEmpty(msg) && msg.contains("Connection reset")) {
                 msg = "调用支付中心失败";
-            } else {
+            } else if (resultContent.getException() != null) {
                 String cls = resultContent.getException().getCls();
                 msg = PayExceptionToShowUtil.convertException(cls);
                 if (cls.contains("UncategorizedMongoDbException") && entity.getRepeatTime() <= 1) {
@@ -234,13 +236,14 @@ public class PayCallService extends SuperService {
                 }
             }
             if (StringUtils.isEmpty(msg)) {
-                msg = "支付中心失败";
+                msg = "支付中心调用失败";
             }
             entity.setPaymentStatus(msg);
             entity.setIsPaySuccess(Boolean.FALSE);
             entity.setPayRemark(msg);
             entity.setOrderType(OrderState.PAID_ERROR);
 
+            // 支付记录流程
             paymentProcess.setIsPaySuccess(Boolean.FALSE);
             paymentProcess.setPayRemark(msg);
             // 日志
@@ -255,6 +258,7 @@ public class PayCallService extends SuperService {
         entity.setPayMillis(entity.getPayEndTime() - entity.getPayStartTime());
         expenseFlowDao.save(entity);
 
+        paymentProcess.setIsPaying(Boolean.FALSE);
         paymentProcess.setPayEndTime(System.currentTimeMillis());
         paymentProcess.setPayMillis(paymentProcess.getPayEndTime() - paymentProcess.getPayStartTime());
         paymentProcess.setTimeStr(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
@@ -370,6 +374,7 @@ public class PayCallService extends SuperService {
                 entity.setIsPaySuccess(Boolean.TRUE);
                 entity.setPayRemark("支付成功");
                 entity.setPaymentStatus("支付成功");
+                entity.setIsPaid(Boolean.TRUE);
                 JSONObject payResult = new JSONObject();
                 payResult.set("targetOrderId", targetOrderId);
                 entity.setPayResult(payResult);
@@ -391,10 +396,10 @@ public class PayCallService extends SuperService {
                 paymentProcess.setPayRemark("支付失败");
                 paymentProcess.setIsPaying(Boolean.FALSE);
             }
-            expenseFlowDao.save(entity);
+            // 订单支付流程数据
             paymentProcessDao.save(paymentProcess);
-
-
+            // 订单数据
+            expenseFlowDao.save(entity);
         }
         return ResultContent.buildSuccess();
     }
@@ -423,8 +428,8 @@ public class PayCallService extends SuperService {
     public BigDecimal queryBalance(ExpenseFlow entity) {
         BigDecimal balance = BigDecimal.ZERO;
         if (entity.getPaymentType() == PaymentType.UserWallet) {
-            com.github.microservice.net.ResultContent<Long> resultContent = balancePayService.queryUserBalance(entity.getProjectOid(), entity.getUserId());
-            if (resultContent.getState() == com.github.microservice.net.ResultState.Success) {
+            com.github.microservice.pay.client.ret.ResultContent<Long> resultContent = balancePayService.queryUserBalance(entity.getProjectOid(), entity.getUserId());
+            if (resultContent.getState() == com.github.microservice.pay.client.ret.ResultState.Success) {
                 long number = resultContent.getContent();
                 balance = BigDecimal.valueOf(number);
             } else {
@@ -479,8 +484,8 @@ public class PayCallService extends SuperService {
         refundRecord.setProjectOid(entity.getProjectOid());
         refundRecord.setPaymentType(entity.getPaymentType());
 
-        com.github.microservice.net.ResultContent<List<TransactionLogModel>> resultContent = balancePayService.refund(entity.getProjectOid(), entity.getShopOid(), entity.getUserId(), refundNo, payAmount, param.getRemark());
-        if (resultContent.getState() == com.github.microservice.net.ResultState.Success) {
+        com.github.microservice.pay.client.ret.ResultContent<List<TransactionLogModel>> resultContent = balancePayService.refund(entity.getProjectOid(), entity.getShopOid(), entity.getUserId(), refundNo, payAmount, param.getRemark());
+        if (resultContent.getState() == com.github.microservice.pay.client.ret.ResultState.Success) {
             entity.setIsRefund(Boolean.TRUE);
             entity.setRefundRemark(param.getRemark());
             entity.setRefundTime(System.currentTimeMillis());