From 095210f9149c73e6e00d997b39fd6c44a65e4d38 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期二, 28 四月 2026 22:04:17 +0800
Subject: [PATCH] 代码生成

---
 server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java |  143 +++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 129 insertions(+), 14 deletions(-)

diff --git a/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
index 3484958..c6e4822 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
@@ -19,6 +19,8 @@
 import com.doumee.dao.business.model.ShopInfo;
 import com.doumee.dao.business.model.WithdrawalOrders;
 import com.doumee.dao.dto.WithdrawalApproveDTO;
+import com.doumee.config.alipay.AlipayFundTransUniTransfer;
+import com.doumee.dao.dto.AlipayTransferDTO;
 import com.doumee.dao.dto.WithdrawalDTO;
 import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.model.SystemUser;
@@ -27,6 +29,7 @@
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
@@ -179,13 +182,17 @@
         if (pageWrap.getModel().getCreateEndTime() != null) {
             queryWrapper.le(WithdrawalOrders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime()));
         }
-        for (PageWrap.SortData sortData : pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
+        // 闂ㄥ簵绔細鎸夐棬搴楀悕绉版垨鑱旂郴浜烘ā绯婃悳绱�
+        if (StringUtils.isNotBlank(pageWrap.getModel().getShopName())) {
+            queryWrapper.and(i -> i.like(ShopInfo::getName, pageWrap.getModel().getShopName())
+                    .or().like(ShopInfo::getLinkName, pageWrap.getModel().getShopName()));
         }
+        // 鍙告満绔細鎸夊徃鏈哄鍚嶆ā绯婃悳绱�
+        if (StringUtils.isNotBlank(pageWrap.getModel().getMemberName())) {
+            queryWrapper.like(DriverInfo::getName, pageWrap.getModel().getMemberName());
+        }
+
+        queryWrapper.orderByDesc(WithdrawalOrders::getId);
         return PageData.from(withdrawalOrdersMapper.selectJoinPage(page, WithdrawalOrders.class, queryWrapper));
     }
 
@@ -205,7 +212,10 @@
         queryWrapper.select("IFNULL(SUM(amount), 0) as amount");
         Utils.MP.blankToNull(pageWrap.getModel());
         queryWrapper.lambda().eq(WithdrawalOrders::getDeleted, Constants.ZERO);
-        queryWrapper.lambda().in(WithdrawalOrders::getStatus, Arrays.asList(Constants.ZERO, Constants.ONE));
+        queryWrapper.lambda().eq(WithdrawalOrders::getStatus, Constants.ONE);
+        if (pageWrap.getModel().getMemberType() != null) {
+            queryWrapper.lambda().eq(WithdrawalOrders::getMemberType, pageWrap.getModel().getMemberType());
+        }
         if (pageWrap.getModel().getOutBillNo() != null) {
             queryWrapper.lambda().like(WithdrawalOrders::getOutBillNo, pageWrap.getModel().getOutBillNo());
         }
@@ -229,6 +239,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void approve(WithdrawalApproveDTO dto) {
         if (dto == null || dto.getId() == null || dto.getStatus() == null) {
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀹℃壒鍙傛暟涓嶅畬鏁�");
@@ -249,13 +260,95 @@
         Integer currentUserId = getCurrentUserId();
         Date now = new Date();
 
+        // 瀹℃壒閫氳繃鏃讹紝璋冪敤鏀粯瀹濇墦娆�
+        Integer finalStatus = dto.getStatus();
+        String doneInfo = null;
+        if (Constants.ONE.equals(dto.getStatus())) {
+            String aliAccount = order.getAliAccount();
+            String aliName = order.getAliName();
+
+            // 浠庡徃鏈烘垨闂ㄥ簵鑾峰彇鏀粯瀹濊处鎴峰拰瀹炲悕濮撳悕
+            if (StringUtils.isBlank(aliAccount)) {
+                if (Constants.equalsInteger(order.getMemberType(), Constants.ONE)) {
+                    DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+                            .eq(DriverInfo::getMemberId, order.getMemberId())
+                            .eq(DriverInfo::getDeleted, Constants.ZERO)
+                            .last("limit 1"));
+                    if (driver != null) {
+                        aliAccount = driver.getAliAccount();
+                        aliName = driver.getAliName();
+                    }
+                } else if (Constants.equalsInteger(order.getMemberType(), Constants.TWO)) {
+                    ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+                            .eq(ShopInfo::getId, order.getMemberId())
+                            .eq(ShopInfo::getDeleted, Constants.ZERO)
+                            .last("limit 1"));
+                    if (shop != null) {
+                        aliAccount = shop.getAliAccount();
+                        aliName = shop.getAliName();
+                    }
+                }
+            } else {
+                // 浠� WithdrawalOrders 鐨� aliAccount 鏌ュ搴斿鍚�
+                if (Constants.equalsInteger(order.getMemberType(), Constants.ONE)) {
+                    DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+                            .eq(DriverInfo::getMemberId, order.getMemberId())
+                            .eq(DriverInfo::getDeleted, Constants.ZERO)
+                            .last("limit 1"));
+                    if (driver != null) {
+                        aliName = driver.getAliName();
+                    }
+                } else if (Constants.equalsInteger(order.getMemberType(), Constants.TWO)) {
+                    ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+                            .eq(ShopInfo::getId, order.getMemberId())
+                            .eq(ShopInfo::getDeleted, Constants.ZERO)
+                            .last("limit 1"));
+                    if (shop != null) {
+                        aliName = shop.getAliName();
+                    }
+                }
+            }
+
+            if (StringUtils.isBlank(aliAccount)) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏀粯瀹濇彁鐜拌处鎴锋湭閰嶇疆锛屾棤娉曟墦娆�");
+            }
+
+            // 閲戦杞崲锛氬垎 鈫� 鍏�
+            Long amountFen = order.getAmount() != null ? order.getAmount() : 0L;
+            BigDecimal transAmount = new BigDecimal(amountFen).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+
+            AlipayTransferDTO transferDTO = new AlipayTransferDTO();
+            transferDTO.setOutBizNo(order.getOutBillNo());
+            transferDTO.setTransAmount(transAmount);
+            transferDTO.setPayeeAccount(aliAccount);
+            transferDTO.setPayeeName(aliName);
+            transferDTO.setRemark("鎻愮幇鎵撴");
+
+            String alipayOrderId;
+            try {
+                alipayOrderId = AlipayFundTransUniTransfer.transfer(transferDTO);
+            } catch (BusinessException e) {
+                throw e;
+            } catch (Exception e) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏀粯瀹濇墦娆惧け璐ワ細" + e.getMessage());
+            }
+            doneInfo = "鏀粯瀹濊浆璐﹀崟鍙凤細" + alipayOrderId;
+        }
+
         WithdrawalOrders update = new WithdrawalOrders();
         update.setId(dto.getId());
-        update.setStatus(dto.getStatus());
+        update.setStatus(finalStatus);
         update.setUserId(currentUserId);
         update.setApproveTime(now);
         update.setApproveRemark(dto.getApproveRemark());
         update.setUpdateTime(now);
+        if (Constants.ONE.equals(finalStatus)) {
+            update.setDoneTime(now);
+            update.setDoneInfo(doneInfo);
+        } else if (doneInfo != null) {
+            update.setDoneTime(now);
+            update.setDoneInfo(doneInfo);
+        }
         withdrawalOrdersMapper.updateById(update);
 
         // 鏇存柊鍏宠仈鐨勬彁鐜� Revenue 璁板綍鐘舵��
@@ -267,15 +360,15 @@
                 .eq(Revenue::getDeleted, Constants.ZERO)
                 .last("limit 1"));
         if (withdrawalRevenue != null) {
-            Integer revenueStatus = Constants.ONE.equals(dto.getStatus()) ? Constants.ZERO : Constants.ONE; // 閫氳繃=0鎴愬姛, 椹冲洖=1澶辫触
+            Integer revenueStatus = Constants.ONE.equals(finalStatus) ? Constants.ZERO : Constants.ONE; // 閫氳繃=0鎴愬姛, 椹冲洖=1澶辫触
             revenueMapper.update(new UpdateWrapper<Revenue>().lambda()
                     .set(Revenue::getStatus, revenueStatus)
                     .set(Revenue::getUpdateTime, now)
                     .eq(Revenue::getId, withdrawalRevenue.getId()));
         }
 
-        // 椹冲洖鏃堕��鍥炰綑棰�
-        if (Constants.TWO.equals(dto.getStatus())) {
+        // 椹冲洖鎴栨墦娆惧け璐ユ椂閫�鍥炰綑棰�
+        if (Constants.TWO.equals(finalStatus)) {
             Long amountFen = order.getAmount() != null ? order.getAmount() : 0L;
             if (amountFen > 0 && order.getMemberId() != null) {
                 if (Constants.equalsInteger(order.getMemberType(), Constants.ONE)) {
@@ -292,7 +385,7 @@
                 } else if (Constants.equalsInteger(order.getMemberType(), Constants.TWO)) {
                     // 闂ㄥ簵锛氶�氳繃 memberId 鏌� ShopInfo锛岄��鍥� balance
                     ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
-                            .eq(ShopInfo::getRegionMemberId, order.getMemberId())
+                            .eq(ShopInfo::getId, order.getMemberId())
                             .eq(ShopInfo::getDeleted, Constants.ZERO)
                             .last("limit 1"));
                     if (shop != null) {
@@ -392,11 +485,22 @@
         order.setType(Constants.ZERO);
         order.setOutBillNo(billNo);
         order.setAliAccount(dto.getAliAccount());
+        order.setAliName(dto.getAliName());
         order.setDeleted(Constants.ZERO);
         order.setCreateTime(now);
         order.setUpdateTime(now);
         order.setCreateUser(memberId);
         withdrawalOrdersMapper.insert(order);
+        // 鏀粯瀹濊处鎴锋垨濮撳悕鏈夊彉鍖栨椂鏇存柊鍙告満淇℃伅
+        boolean aliChanged = !dto.getAliAccount().equals(driver.getAliAccount())
+                || (dto.getAliName() != null && !dto.getAliName().equals(driver.getAliName()));
+        if (aliChanged) {
+            DriverInfo update = new DriverInfo();
+            update.setId(driver.getId());
+            update.setAliAccount(dto.getAliAccount());
+            update.setAliName(dto.getAliName());
+            driverInfoMapper.updateById(update);
+        }
         // 鍒涘缓鏀嚭 Revenue 璁板綍
         Revenue revenue = new Revenue();
         revenue.setMemberId(memberId);
@@ -436,21 +540,32 @@
                 .eq(ShopInfo::getId, shopId));
         // 鍒涘缓鎻愮幇璁板綍
         WithdrawalOrders order = new WithdrawalOrders();
-        order.setMemberId(shop.getRegionMemberId());
+        order.setMemberId(shop.getId());
         order.setMemberType(Constants.TWO);
         order.setAmount(amountFen);
         order.setStatus(Constants.ZERO);
         order.setType(Constants.ZERO);
         order.setOutBillNo(billNo);
         order.setAliAccount(dto.getAliAccount());
+        order.setAliName(dto.getAliName());
         order.setDeleted(Constants.ZERO);
         order.setCreateTime(now);
         order.setUpdateTime(now);
         order.setCreateUser(shop.getRegionMemberId());
         withdrawalOrdersMapper.insert(order);
+        // 鏀粯瀹濊处鎴锋垨濮撳悕鏈夊彉鍖栨椂鏇存柊闂ㄥ簵淇℃伅
+        boolean aliChanged = !dto.getAliAccount().equals(shop.getAliAccount())
+                || (dto.getAliName() != null && !dto.getAliName().equals(shop.getAliName()));
+        if (aliChanged) {
+            ShopInfo update = new ShopInfo();
+            update.setId(shopId);
+            update.setAliAccount(dto.getAliAccount());
+            update.setAliName(dto.getAliName());
+            shopInfoMapper.updateById(update);
+        }
         // 鍒涘缓鏀嚭 Revenue 璁板綍
         Revenue revenue = new Revenue();
-        revenue.setMemberId(shop.getRegionMemberId());
+        revenue.setMemberId(shop.getId());
         revenue.setMemberType(Constants.TWO);
         revenue.setType(Constants.ONE); // 1=鎻愮幇鏀嚭
         revenue.setOptType(-Constants.ONE); // -1=鏀嚭

--
Gitblit v1.9.3