From 82a8bc62d5b9d5d607f6952329952b17eda2f0a0 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 14 九月 2026 15:44:34 +0800
Subject: [PATCH] update

---
 backend/src/main/java/com/tourguide/modules/finance/service/GuideBalanceSettlementService.java |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/backend/src/main/java/com/tourguide/modules/finance/service/GuideBalanceSettlementService.java b/backend/src/main/java/com/tourguide/modules/finance/service/GuideBalanceSettlementService.java
index 6c92169..72b9a9c 100644
--- a/backend/src/main/java/com/tourguide/modules/finance/service/GuideBalanceSettlementService.java
+++ b/backend/src/main/java/com/tourguide/modules/finance/service/GuideBalanceSettlementService.java
@@ -59,10 +59,16 @@
         BigDecimal currentReversal = proratedEarning(order.getGuideEarningAmount(), current, paidAmount);
         BigDecimal reversal = currentReversal.subtract(previousReversal).setScale(2, RoundingMode.HALF_UP);
         if (reversal.signum() <= 0) return;
+        boolean debited;
         if (order.getCommissionTeamId() != null) {
-            balanceService.debitTeamForRefund(order.getCommissionTeamId(), reversal);
+            debited = balanceService.debitTeamForRefund(order.getCommissionTeamId(), reversal);
         } else if (order.getGuideId() != null) {
-            balanceService.debitForRefund(order.getGuideId(), reversal);
+            debited = balanceService.debitForRefund(order.getGuideId(), reversal);
+        } else {
+            return;
+        }
+        if (!debited) {
+            throw new BusinessException(500, "退款后导游收益冲正失败");
         }
     }
 
@@ -75,7 +81,7 @@
                 && order.getGuideId() != null
                 && order.getGuideEarningAmount() != null
                 && order.getGuideEarningAmount().signum() >= 0
-                && !RefundStatus.REFUNDED.matches(order.getRefundStatus());
+                && canSettleRefund(order.getRefundStatus());
     }
 
     private BigDecimal effectiveEarning(TourOrder order) {
@@ -94,4 +100,12 @@
     private BigDecimal nonNegative(BigDecimal value) {
         return value == null ? BigDecimal.ZERO : value.max(BigDecimal.ZERO);
     }
+
+    private boolean canSettleRefund(String refundStatus) {
+        return refundStatus == null
+                || refundStatus.trim().isEmpty()
+                || RefundStatus.NONE.matches(refundStatus)
+                || RefundStatus.PARTIAL.matches(refundStatus)
+                || RefundStatus.REFUND_FAILED.matches(refundStatus);
+    }
 }

--
Gitblit v1.7.1