From 4ee8c6332c6f6fd7b78c6fd200fe32107f5cc37f Mon Sep 17 00:00:00 2001
From: yupeng <roc__yu@163.com>
Date: 星期六, 22 三月 2025 11:20:28 +0800
Subject: [PATCH] feat: 更新回调接口,完成回调方法添加解锁

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java |  113 +++++++++++++++++++++++++++++---------------------------
 1 files changed, 59 insertions(+), 54 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java
index 0376220..adb9fe4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java
@@ -124,6 +124,7 @@
         if (isok){
             try {
                 TBill save = new TBill();
+                save.setId(tBill.getId());
                 TBill presist = getById(tBill.getId());
                 //如果账单是已缴费状态,本方法不再进行更新账单
                 if (presist.getPayFeesStatus().equals("3")){
@@ -323,62 +324,66 @@
         String uuid = UUID.fastUUID().toString();
         boolean lock = redisCache.trylockLoop(CacheConstants.COMPLETE_PAY_LOCK_KEY + orderNo, uuid, 60);
         if (lock){
-            TPayOrder order = tPayOrderService.getById(orderNo);
-            if (order==null){
-                throw new ServiceException("订单不存在");
-            }
-            if (StringUtils.isNotEmpty(order.getPayNo())){
-                log.info("订单号已处理:{}",orderNo);
-                return;
-            }
-            /**
-             * 更新订单状态
-             */
-            TPayOrder save = new TPayOrder();
-            save.setId(order.getId());
-            save.setStatus(1);
-            save.setPayNo(billRequest.getMessage().getInfo().getTraceNo());
-            save.setPayType(billRequest.getMessage().getHead().getChannel());
             try {
-                save.setPayTime(DateUtils.parseDate(billRequest.getMessage().getHead().getTimeStamp(),"yyyyMMddHHmmssSSS"));
-            } catch (ParseException e) {
-                throw new ServiceException("日期格式化错误");
+                TPayOrder order = tPayOrderService.getById(orderNo);
+                if (order==null){
+                    throw new ServiceException("订单不存在");
+                }
+                if (StringUtils.isNotEmpty(order.getPayNo())){
+                    log.info("订单号已处理:{}",orderNo);
+                    return;
+                }
+                /**
+                 * 更新订单状态
+                 */
+                TPayOrder save = new TPayOrder();
+                save.setId(order.getId());
+                save.setStatus(1);
+                save.setPayNo(billRequest.getMessage().getInfo().getTraceNo());
+                save.setPayType(billRequest.getMessage().getHead().getChannel());
+                try {
+                    save.setPayTime(DateUtils.parseDate(billRequest.getMessage().getHead().getTimeStamp(),"yyyyMMddHHmmssSSS"));
+                } catch (ParseException e) {
+                    throw new ServiceException("日期格式化错误");
+                }
+                save.setCallbackTime(new Date());
+                BigDecimal payAmount = new BigDecimal(billRequest.getMessage().getInfo().getPayBillAmt());
+                save.setActPayAmount(payAmount
+                        .multiply(AmountConstant.b100).longValue());
+                save.setStatus(1);
+                save.setPayInfo(billRequest.getMessage().toString());
+                tPayOrderService.updateById(save);
+                /**
+                 * 更新账单状态
+                 */
+                List<TOrderBill> orderBills = orderBillService.getByOrderNo(order.getId());
+                List<TBill> bills = orderBills.stream().map(ob -> getById(ob.getBillId())).collect(Collectors.toList());
+                lockAndUpdateByAmountBatch(bills,payAmount,(bill)->{
+                    TFlowManagement saveFlow = new TFlowManagement();
+                    saveFlow.setPayType(1);
+                    saveFlow.setPayer(order.getUserId());
+                    saveFlow.setPayTime(DateUtils.dateToLocalDateTime(save.getPayTime()));
+                    saveFlow.setSysSerialNumber(OrderNos.getDid(30));
+                    saveFlow.setBankSerialNumber(save.getPayNo());
+                    saveFlow.setFlowType(2);
+                    saveFlow.setPaymentBillId(bill.getId());
+                    saveFlow.setDeductionMoney(bill.getDeductionMoney());
+                    saveFlow.setFlowMoney(payAmount);
+                    saveFlow.setRemainingMoney(bill.getOutstandingMoney());
+                    saveFlow.setPreOutstand(bill.getPreOutstand());
+                    tFlowManagementService.save(saveFlow);
+                });
+//                TBankFlow bankFlow = new TBankFlow();
+//                bankFlow.setPayType(1);
+//                bankFlow.setPayer(order.getUserId());
+//                bankFlow.setPayTime(DateUtils.dateToLocalDateTime(save.getPayTime()));
+//                bankFlow.setBankSerialNumber(save.getPayNo());
+//                bankFlow.setFlowMoney(payAmount);
+//                bankFlow.setFlowStatus(1);
+//                tBankFlowService.save(bankFlow);
+            }finally {
+                redisCache.unlock(CacheConstants.COMPLETE_PAY_LOCK_KEY + orderNo,uuid);
             }
-            save.setCallbackTime(new Date());
-            BigDecimal payAmount = new BigDecimal(billRequest.getMessage().getInfo().getPayBillAmt());
-            save.setActPayAmount(payAmount
-                    .multiply(AmountConstant.b100).longValue());
-            save.setStatus(1);
-            save.setPayInfo(billRequest.getMessage().toString());
-            tPayOrderService.updateById(save);
-            /**
-             * 更新账单状态
-             */
-            List<TOrderBill> orderBills = orderBillService.getByOrderNo(order.getId());
-            List<TBill> bills = orderBills.stream().map(ob -> getById(ob.getBillId())).collect(Collectors.toList());
-            lockAndUpdateByAmountBatch(bills,payAmount,(bill)->{
-                TFlowManagement saveFlow = new TFlowManagement();
-                saveFlow.setPayType(1);
-                saveFlow.setPayer(order.getUserId());
-                saveFlow.setPayTime(DateUtils.dateToLocalDateTime(save.getPayTime()));
-                saveFlow.setSysSerialNumber(OrderNos.getDid(30));
-                saveFlow.setBankSerialNumber(save.getPayNo());
-                saveFlow.setFlowType(2);
-                saveFlow.setPaymentBillId(bill.getId());
-                saveFlow.setDeductionMoney(bill.getDeductionMoney());
-                saveFlow.setFlowMoney(payAmount);
-                saveFlow.setRemainingMoney(bill.getOutstandingMoney());
-                saveFlow.setPreOutstand(bill.getPreOutstand());
-                tFlowManagementService.save(saveFlow);
-            });
-            TBankFlow bankFlow = new TBankFlow();
-            bankFlow.setPayType(1);
-            bankFlow.setPayer(order.getUserId());
-            bankFlow.setPayTime(DateUtils.dateToLocalDateTime(save.getPayTime()));
-            bankFlow.setBankSerialNumber(save.getPayNo());
-            bankFlow.setFlowMoney(payAmount);
-            bankFlow.setFlowStatus(1);
-            tBankFlowService.save(bankFlow);
 
         }
 

--
Gitblit v1.7.1