From b2ec3fb29cffb44738d1e93f604bbdce2082f291 Mon Sep 17 00:00:00 2001 From: Lemon Date: Tue, 21 Apr 2026 09:33:22 +0800 Subject: [PATCH] =?UTF-8?q?bugfix=20=E4=BD=99=E9=A2=9D=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E9=80=80=E6=AC=BE=E6=97=B6=E7=A9=BA=E6=8C=87=E9=92=88=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programlogic/DelayMerchantProgramLogic.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java index 4f058958f..e835a7243 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/programlogic/DelayMerchantProgramLogic.java @@ -1103,17 +1103,22 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic { // 判断消费金额,如果消费金额 - 折扣金额小于 1 元,则将保险费也进行退回 if (orderBasicInfo.getOrderAmount().subtract(orderBasicInfo.getDiscountAmount()).compareTo(BigDecimal.ONE) < 0) { - // orderBasicInfoService.refundInsurance(orderBasicInfo); // 判断是否需要退保险费用 boolean checkResult = orderBasicInfoService.checkRefundInsuranceAmount(orderBasicInfo); if (checkResult) { - // 退保险, 计算退保金额 + // 退保险, 使用 calculateBalanceRefund 重新计算完整的退款金额(电费退款+保险费退款) + // 注意:不能在 calculateReturnAmount 的基础上叠加保险费,因为 calculateReturnAmount 不感知保险费, + // 算出的退款金额中已包含保险费部分,叠加会导致保险费被重复退还 Map refundMap = calculateBalanceRefund(principalPay, giftPay, orderBasicInfo.getOrderAmount(), orderBasicInfo.getDiscountAmount(), orderBasicInfo.getInsuranceAmount()); + BigDecimal refundPrincipal = refundMap.get("returnPrincipal"); + BigDecimal refundGift = refundMap.get("returnGift"); BigDecimal returnPrincipalForInsurance = refundMap.get("returnPrincipalForInsurance"); BigDecimal returnGiftForInsurance = refundMap.get("returnGiftForInsurance"); + refundPrincipal = refundPrincipal == null ? BigDecimal.ZERO : refundPrincipal; + refundGift = refundGift == null ? BigDecimal.ZERO : refundGift; - updateMemberBalanceDTO.setUpdatePrincipalBalance(returnPrincipal.add(returnPrincipalForInsurance)); - updateMemberBalanceDTO.setUpdateGiftBalance(returnGift.add(returnGiftForInsurance)); + updateMemberBalanceDTO.setUpdatePrincipalBalance(refundPrincipal.add(returnPrincipalForInsurance)); + updateMemberBalanceDTO.setUpdateGiftBalance(refundGift.add(returnGiftForInsurance)); } } // 统一退款