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