From f11b781c276221a4439d4e475e18b92deb92ce02 Mon Sep 17 00:00:00 2001 From: Guoqs <123456@jsowell.com> Date: Sat, 25 Jul 2026 16:47:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9C=A8=E7=BA=BF=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E4=BF=9D=E9=99=A9=E8=AE=A2=E5=8D=95=20payAmount=20?= =?UTF-8?q?=E4=B8=8E=20payRecordAmount=20=E4=B8=8D=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在线支付回调(adapayCallback)中主动将 payAmount 减去了 insuranceAmount 再传给回调, 但 order_pay_record 记录的是完整支付金额,导致校验时 payAmount(扣减后) ≠ payRecordAmount(完整)。 修复: 1. OrderService.adapayCallback: callbackDTO 传完整 amount,同时带上 insuranceAmount 2. payOrderSuccessCallback: 下发桩的启动金额用 payAmount - insuranceAmount 计算, 订单主表 payAmount 仍为完整支付金额,与 payRecordAmount 一致 --- .../main/java/com/jsowell/service/OrderService.java | 12 +++--------- .../pile/service/impl/OrderBasicInfoServiceImpl.java | 8 ++++++-- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java index 3a889dba1..dc8a25c9f 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -1299,19 +1299,13 @@ public class OrderService { } }, executor); - // 初始化充电金额 - BigDecimal chargeAmount = amount; + // 支付订单成功 OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode); BigDecimal insuranceAmount = orderBasicInfo.getInsuranceAmount(); - if (insuranceAmount.compareTo(BigDecimal.ZERO) > 0) { - // 如果用户支付了保险金额,则充电金额需将保险金额减去 - chargeAmount = amount.subtract(insuranceAmount).setScale(2, RoundingMode.HALF_UP); - } - // 支付订单成功 PayOrderSuccessCallbackDTO callbackDTO = PayOrderSuccessCallbackDTO.builder() .orderCode(orderCode) - .payAmount(chargeAmount) // amount - // .payMode(OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue()) + .payAmount(amount) // 完整支付金额(含保险),与 order_pay_record 汇总一致 + .insuranceAmount(insuranceAmount) // 保险金额,回调中用于计算下发桩的充电金额 .payMode(payModel) .acquirer(AcquirerEnum.ADAPAY.getValue()) .build(); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 2230ff608..4886cdd3e 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -5406,8 +5406,12 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { return; } - // 获取启动金额 - BigDecimal chargeAmount = computeChargeAmount(orderInfo.getMerchantId(), orderInfo.getStationId(), orderInfo.getMemberId(), dto.getPayAmount()); + // 获取启动金额:保险金额不计入下发桩的充电额度 + BigDecimal payAmountForPile = dto.getPayAmount(); + if (dto.getInsuranceAmount() != null && dto.getInsuranceAmount().compareTo(BigDecimal.ZERO) > 0) { + payAmountForPile = dto.getPayAmount().subtract(dto.getInsuranceAmount()); + } + BigDecimal chargeAmount = computeChargeAmount(orderInfo.getMerchantId(), orderInfo.getStationId(), orderInfo.getMemberId(), payAmountForPile); // 发送启动指令 if (StringUtils.equals(pileConnectorDetailVO.getChargePortType(), Constants.THREE)) {