From 39f6fca28e3f78abe48f08e474ec011abb990b36 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 09 九月 2026 10:39:21 +0800
Subject: [PATCH] update

---
 backend/src/main/java/com/tourguide/modules/finance/service/GuideWithdrawalService.java |   35 +++++++++++++++++++++++++++++++----
 1 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/backend/src/main/java/com/tourguide/modules/finance/service/GuideWithdrawalService.java b/backend/src/main/java/com/tourguide/modules/finance/service/GuideWithdrawalService.java
index fc3c02a..2533c0b 100644
--- a/backend/src/main/java/com/tourguide/modules/finance/service/GuideWithdrawalService.java
+++ b/backend/src/main/java/com/tourguide/modules/finance/service/GuideWithdrawalService.java
@@ -12,6 +12,9 @@
 import com.tourguide.modules.finance.entity.GuideWithdrawalAccount;
 import com.tourguide.modules.finance.mapper.GuideWithdrawalMapper;
 import com.tourguide.modules.user.entity.GuideUser;
+import com.tourguide.modules.user.entity.GuideTeam;
+import com.tourguide.modules.user.mapper.GuideTeamMapper;
+import com.tourguide.modules.user.mapper.GuideUserMapper;
 import com.tourguide.modules.user.service.GuideUserService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -38,25 +41,35 @@
     private final GuideWithdrawableBalanceService balanceService;
     private final GuideWithdrawalStateService stateService;
     private final GuideWithdrawalPayoutService payoutService;
+    private final GuideTeamMapper teamMapper;
+    private final GuideUserMapper guideUserMapper;
 
     public GuideWithdrawalService(GuideWithdrawalMapper withdrawalMapper,
                                   GuideSettlementService settlementService,
                                   GuideUserService guideUserService,
                                   GuideWithdrawableBalanceService balanceService,
                                   GuideWithdrawalStateService stateService,
-                                  GuideWithdrawalPayoutService payoutService) {
+                                  GuideWithdrawalPayoutService payoutService,
+                                  GuideTeamMapper teamMapper,
+                                  GuideUserMapper guideUserMapper) {
         this.withdrawalMapper = withdrawalMapper;
         this.settlementService = settlementService;
         this.guideUserService = guideUserService;
         this.balanceService = balanceService;
         this.stateService = stateService;
         this.payoutService = payoutService;
+        this.teamMapper = teamMapper;
+        this.guideUserMapper = guideUserMapper;
     }
 
     public GuideWithdrawalSummaryResponse summary(Long guideId) {
         try {
             settlementService.requireApproved(guideId);
-            return new GuideWithdrawalSummaryResponse(balanceService.getAvailableAmount(guideId));
+            GuideUser guide = guideUserService.findEnabledById(guideId);
+            GuideTeam collectionTeam = findCollectionTeam(guide);
+            return new GuideWithdrawalSummaryResponse(collectionTeam == null
+                    ? balanceService.getAvailableAmount(guideId)
+                    : balanceService.getAvailableTeamAmount(collectionTeam.getId()));
         } catch (BusinessException exception) {
             if (exception.getCode() == 409) {
                 return new GuideWithdrawalSummaryResponse(money(BigDecimal.ZERO));
@@ -82,19 +95,27 @@
 
     @Transactional
     public WithdrawalResponse create(Long guideId, GuideWithdrawalCreateRequest request) {
-        GuideUser guide = guideUserService.findEnabledById(guideId);
+        GuideUser guide = guideUserMapper.selectForUpdate(guideId);
+        if (guide == null || !Integer.valueOf(1).equals(guide.getStatus())) {
+            throw new BusinessException(401, "导游用户不存在或已停用");
+        }
         GuideWithdrawalAccount account = settlementService.requireApprovedCardForUpdate(
                 guideId, request.getBankCardId());
         BigDecimal amount = money(request.getAmount());
         if (amount.compareTo(BigDecimal.ZERO) <= 0) {
             throw new BusinessException(400, "提现金额必须大于0");
         }
-        if (!balanceService.debit(guideId, amount)) {
+        GuideTeam collectionTeam = findCollectionTeam(guide);
+        boolean debited = collectionTeam == null
+                ? balanceService.debit(guideId, amount)
+                : balanceService.debitTeam(collectionTeam.getId(), amount);
+        if (!debited) {
             throw new BusinessException(409, "提现金额不能超过当前可提金额");
         }
         GuideWithdrawal withdrawal = new GuideWithdrawal();
         withdrawal.setWithdrawalNo(generateWithdrawalNo());
         withdrawal.setGuideId(guideId);
+        withdrawal.setTeamId(collectionTeam == null ? null : collectionTeam.getId());
         withdrawal.setGuideName(StringUtils.hasText(guide.getRealName())
                 ? guide.getRealName() : guide.getUsername());
         withdrawal.setGuideMobile(guide.getMobile());
@@ -198,6 +219,12 @@
                 + String.format("%04d", ThreadLocalRandom.current().nextInt(10000));
     }
 
+    private GuideTeam findCollectionTeam(GuideUser guide) {
+        if (guide == null || guide.getTeamId() == null) return null;
+        GuideTeam team = teamMapper.selectById(guide.getTeamId());
+        return team != null && guide.getId().equals(team.getCollectionGuideId()) ? team : null;
+    }
+
     private String maskCard(String cardNumber) {
         if (!StringUtils.hasText(cardNumber)) return "";
         String value = cardNumber.trim();

--
Gitblit v1.7.1