刘俊驰 4 tháng trước cách đây
mục cha
commit
9aa743ed95

+ 18 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java

@@ -1674,15 +1674,26 @@ DISCOUNT("畅学卡")
         // 执行状态锁定
         String lockNameInner = redisCacheService.getPaymentCacheKey(orderRefundBill.getBillNo());
         DistributedLock.of(redissonClient).runIfLockCanGet(lockNameInner, () -> {
-            RefundResp refundResp = paymentServiceContext.getPaymentService(paymentOrder.getPaymentVendor()).refund(refundOrder);
-            // 申请请求失败
-            if (PaymentStatus.FAILED == refundResp.getPaymentStatus()) {
+            if (StringUtils.isEmpty(paymentOrder.getTransNo())) {
+                orderRefundBill.setStatus(TradeStatusEnum.succeeded);
+                userOrderRefundBillService.save(orderRefundBill);
+            }
+            try {
+                RefundResp refundResp = paymentServiceContext.getPaymentService(paymentOrder.getPaymentVendor()).refund(refundOrder);
+                // 申请请求失败
+                if (PaymentStatus.FAILED == refundResp.getPaymentStatus()) {
+                    orderRefundBill.setStatus(TradeStatusEnum.failed);
+                    orderRefundBill.setPayFailMsg(refundResp.getMsg());
+                } else {
+                    orderRefundBill.setTransNo(refundResp.getTransNo());
+                    orderRefundBill.setStatus(TradeStatusEnum.pending);
+                }
+            } catch (Exception e) {
                 orderRefundBill.setStatus(TradeStatusEnum.failed);
-                orderRefundBill.setPayFailMsg(refundResp.getMsg());
-            } else {
-                orderRefundBill.setTransNo(refundResp.getTransNo());
-                orderRefundBill.setStatus(TradeStatusEnum.pending);
+                orderRefundBill.setPayFailMsg(e.getMessage());
+                log.error("refundOnly orderNo={}", orderRefundBill.getBillNo(), e);
             }
+
             userOrderRefundBillService.save(orderRefundBill);
 
         }, 10L, TimeUnit.SECONDS);