From de73b82f653e613981061a0e4739ee20d7d1ea6a Mon Sep 17 00:00:00 2001 From: Guoqs <123456@jsowell.com> Date: Sat, 25 Jul 2026 16:29:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=9D=9E=E4=BD=99=E9=A2=9D?= =?UTF-8?q?=E6=94=AF=E4=BB=98=EF=BC=88=E7=99=BD=E5=90=8D=E5=8D=95/?= =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E6=94=AF=E4=BB=98=EF=BC=89=E4=BF=9D=E9=99=A9?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=94=AF=E4=BB=98=E5=87=AD=E8=AF=81=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=EF=BC=9A=E7=A7=BB=E9=99=A4=E9=94=99=E8=AF=AF=E7=9A=84?= =?UTF-8?q?=E4=BF=9D=E9=99=A9=E9=87=91=E9=A2=9D=E5=8F=8C=E9=87=8D=E8=AE=A1?= =?UTF-8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 非余额支付分支的 inspectOrderPayment 仍在 payAmount 基础上叠加 insuranceAmount 进行比对, 导致白名单/在线支付勾选保险后 payAmount + insuranceAmount ≠ payRecordAmount,订单被误判为异常。 修复: 1. 非余额分支改为直接比较 payAmount vs payRecordAmount,不再叠加 insuranceAmount 2. 错误信息拆分并打印具体值,便于定位字段不完整还是金额不一致 --- .../service/impl/OrderBasicInfoServiceImpl.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) 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 77bf0f932..2230ff608 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 @@ -1180,19 +1180,20 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { .orderPaymentReady(false) .paymentAmount(payRecordEvidence ? payRecordAmount : null) .paymentTime(paymentTime) - .reason("订单主表支付字段不完整") + .reason("订单主表支付字段不完整(payStatus=" + payStatus + + ", payAmount=" + orderBasicInfo.getPayAmount() + + ", payTime=" + orderBasicInfo.getPayTime() + ")") .build(); } - // 订单支付金额 = 充电金额 + 保险金额 - BigDecimal orderPayAmount = orderBasicInfo.getPayAmount() - .add(orderBasicInfo.getInsuranceAmount() == null ? BigDecimal.ZERO : orderBasicInfo.getInsuranceAmount()); - if (payRecordEvidence && !samePaymentAmount(orderPayAmount, payRecordAmount)) { + // payAmount 已通过回调/支付记录设置(微信/支付宝/白名单等),不应再加保险金额(避免双重计算) + if (payRecordEvidence && !samePaymentAmount(orderBasicInfo.getPayAmount(), payRecordAmount)) { return OrderPaymentCheckResult.builder() .checkCompleted(true) .paymentEvidenceFound(true) .orderPaymentReady(false) .paymentTime(paymentTime) - .reason("订单支付明细与订单主表支付金额不一致") + .reason("订单支付明细金额(" + payRecordAmount + + ")与订单主表支付金额(" + orderBasicInfo.getPayAmount() + ")不一致") .build(); } return OrderPaymentCheckResult.builder()