修复非余额支付(白名单/在线支付)保险订单支付凭证校验:移除错误的保险金额双重计算

非余额支付分支的 inspectOrderPayment 仍在 payAmount 基础上叠加 insuranceAmount 进行比对,
导致白名单/在线支付勾选保险后 payAmount + insuranceAmount ≠ payRecordAmount,订单被误判为异常。

修复:
1. 非余额分支改为直接比较 payAmount vs payRecordAmount,不再叠加 insuranceAmount
2. 错误信息拆分并打印具体值,便于定位字段不完整还是金额不一致
This commit is contained in:
Guoqs
2026-07-25 16:29:39 +08:00
parent 1f05471dda
commit de73b82f65

View File

@@ -1180,19 +1180,20 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
.orderPaymentReady(false) .orderPaymentReady(false)
.paymentAmount(payRecordEvidence ? payRecordAmount : null) .paymentAmount(payRecordEvidence ? payRecordAmount : null)
.paymentTime(paymentTime) .paymentTime(paymentTime)
.reason("订单主表支付字段不完整") .reason("订单主表支付字段不完整(payStatus=" + payStatus
+ ", payAmount=" + orderBasicInfo.getPayAmount()
+ ", payTime=" + orderBasicInfo.getPayTime() + ")")
.build(); .build();
} }
// 订单支付金额 = 充电金额 + 保险金额 // payAmount 已通过回调/支付记录设置(微信/支付宝/白名单等),不应再加保险金额(避免双重计算)
BigDecimal orderPayAmount = orderBasicInfo.getPayAmount() if (payRecordEvidence && !samePaymentAmount(orderBasicInfo.getPayAmount(), payRecordAmount)) {
.add(orderBasicInfo.getInsuranceAmount() == null ? BigDecimal.ZERO : orderBasicInfo.getInsuranceAmount());
if (payRecordEvidence && !samePaymentAmount(orderPayAmount, payRecordAmount)) {
return OrderPaymentCheckResult.builder() return OrderPaymentCheckResult.builder()
.checkCompleted(true) .checkCompleted(true)
.paymentEvidenceFound(true) .paymentEvidenceFound(true)
.orderPaymentReady(false) .orderPaymentReady(false)
.paymentTime(paymentTime) .paymentTime(paymentTime)
.reason("订单支付明细与订单主表支付金额不一致") .reason("订单支付明细金额(" + payRecordAmount
+ ")与订单主表支付金额(" + orderBasicInfo.getPayAmount() + ")不一致")
.build(); .build();
} }
return OrderPaymentCheckResult.builder() return OrderPaymentCheckResult.builder()