From 2b4ccf5ba9e76e8f73f0c5821877e48a24db5f60 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期二, 21 七月 2026 10:10:38 +0800
Subject: [PATCH] fix: 修正特殊退款累计金额
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 36 ++++++++++++++++++++++++++++++++++++
1 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index aee5754..9eb57b9 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -4821,6 +4821,7 @@
if (order == null) {
return R.fail("未查询到支付成功的充电订单");
}
+ mergeSuccessfulRefundAmounts(order);
PayOrderInfoDto dto = new PayOrderInfoDto();
dto.setOrderId(order.getId().toString());
dto.setCode(order.getCode());
@@ -4862,6 +4863,7 @@
if (order == null) {
return R.fail("充电订单不存在");
}
+ mergeSuccessfulRefundAmounts(order);
BigDecimal refundAmount = money(payOrderQueryDto.getRefundAmount());
BigDecimal refundableAmount = money(order.getPaymentAmount()).subtract(money(order.getRefundAmount())).setScale(2, RoundingMode.HALF_UP);
if (refundAmount.compareTo(refundableAmount) > 0) {
@@ -4928,6 +4930,40 @@
}
}
+ private void mergeSuccessfulRefundAmounts(TChargingOrder order) {
+ if (order == null || order.getId() == null) {
+ return;
+ }
+ List<TChargingOrderRefund> refunds = chargingOrderRefundService.list(
+ new LambdaQueryWrapper<TChargingOrderRefund>()
+ .eq(TChargingOrderRefund::getChargingOrderId, order.getId())
+ .eq(TChargingOrderRefund::getRefundStatus, 2));
+ if (refunds == null || refunds.isEmpty()) {
+ return;
+ }
+ BigDecimal successfulAmount = BigDecimal.ZERO;
+ BigDecimal explicitBalanceAmount = BigDecimal.ZERO;
+ BigDecimal explicitThirdAmount = BigDecimal.ZERO;
+ BigDecimal unspecifiedAmount = BigDecimal.ZERO;
+ for (TChargingOrderRefund refund : refunds) {
+ BigDecimal amount = money(refund.getRefundAmount());
+ BigDecimal balanceAmount = money(refund.getBalanceRefundAmount());
+ BigDecimal thirdAmount = money(refund.getThirdRefundAmount());
+ successfulAmount = successfulAmount.add(amount);
+ explicitBalanceAmount = explicitBalanceAmount.add(balanceAmount);
+ explicitThirdAmount = explicitThirdAmount.add(thirdAmount);
+ if (balanceAmount.add(thirdAmount).compareTo(BigDecimal.ZERO) == 0) {
+ unspecifiedAmount = unspecifiedAmount.add(amount);
+ }
+ }
+ BigDecimal inferredThirdAmount = unspecifiedAmount.min(
+ getRefundableThirdPayAmount(order).subtract(explicitThirdAmount).max(BigDecimal.ZERO));
+ BigDecimal inferredBalanceAmount = unspecifiedAmount.subtract(inferredThirdAmount).max(BigDecimal.ZERO);
+ order.setRefundAmount(money(order.getRefundAmount()).max(money(successfulAmount)));
+ order.setThirdRefundAmount(money(order.getThirdRefundAmount()).max(money(explicitThirdAmount.add(inferredThirdAmount))));
+ order.setBalanceRefundAmount(money(order.getBalanceRefundAmount()).max(money(explicitBalanceAmount.add(inferredBalanceAmount))));
+ }
+
private R refundIcbcShareBeforeMainRefund(TChargingOrder order, TChargingOrderRefund refund, BigDecimal thirdRefundAmount) {
if (order == null || refund == null || thirdRefundAmount == null || thirdRefundAmount.compareTo(BigDecimal.ZERO) <= 0) {
return R.ok();
--
Gitblit v1.7.1