From e50954f0708ecbbc672352102ae3b24279d40cc1 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期四, 16 四月 2026 20:12:50 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/gtzxinglijicun

---
 server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java |  551 +++++++++++++++++++++++++++++++-----------------------
 1 files changed, 319 insertions(+), 232 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 20bf1f1..83e7959 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
@@ -1,45 +1,45 @@
 package com.doumee.service.business.impl;
 
-import com.alibaba.fastjson.JSONObject;
-import com.doumee.config.wx.SendWxMessage;
-import com.doumee.config.wx.TransferToUser;
-import com.doumee.config.wx.WXPayUtility;
-import com.doumee.config.wx.WxMiniConfig;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
-import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.MemberMapper;
-import com.doumee.dao.business.MemberRevenueMapper;
+import com.doumee.dao.business.DriverInfoMapper;
+import com.doumee.dao.business.RevenueMapper;
+import com.doumee.dao.business.ShopInfoMapper;
 import com.doumee.dao.business.WithdrawalOrdersMapper;
-import com.doumee.dao.business.model.Member;
-import com.doumee.dao.business.model.MemberRevenue;
+import com.doumee.dao.business.model.DriverInfo;
+import com.doumee.dao.business.model.Revenue;
+import com.doumee.dao.business.model.ShopInfo;
 import com.doumee.dao.business.model.WithdrawalOrders;
+import com.doumee.dao.dto.WithdrawalApproveDTO;
 import com.doumee.dao.dto.WithdrawalDTO;
+import com.doumee.dao.system.SystemUserMapper;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.WithdrawalOrdersService;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+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 org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
 
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
-import java.util.UUID;
+import java.util.concurrent.ThreadLocalRandom;
 
 /**
  * 鎻愮幇鐢宠璁板綍Service瀹炵幇
- * @author 姹熻箘韫�
- * @date 2025/07/09 12:00
+ * @author rk
+ * @date 2026/04/10
  */
 @Service
 public class WithdrawalOrdersServiceImpl implements WithdrawalOrdersService {
@@ -48,13 +48,16 @@
     private WithdrawalOrdersMapper withdrawalOrdersMapper;
 
     @Autowired
-    private MemberMapper memberMapper;
+    private SystemUserMapper systemUserMapper;
 
     @Autowired
-    private MemberRevenueMapper memberRevenueMapper;
+    private ShopInfoMapper shopInfoMapper;
 
     @Autowired
-    private SendWxMessage sendWxMessage;
+    private DriverInfoMapper driverInfoMapper;
+
+    @Autowired
+    private RevenueMapper revenueMapper;
 
     @Override
     public Integer create(WithdrawalOrders withdrawalOrders) {
@@ -64,7 +67,9 @@
 
     @Override
     public void deleteById(Integer id) {
-        withdrawalOrdersMapper.deleteById(id);
+        withdrawalOrdersMapper.update(new UpdateWrapper<WithdrawalOrders>().lambda()
+                .set(WithdrawalOrders::getDeleted, Constants.ONE)
+                .eq(WithdrawalOrders::getId, id));
     }
 
     @Override
@@ -75,7 +80,7 @@
 
     @Override
     public void deleteByIdInBatch(List<Integer> ids) {
-        if (CollectionUtils.isEmpty(ids)) {
+        if (ids == null || ids.isEmpty()) {
             return;
         }
         withdrawalOrdersMapper.deleteBatchIds(ids);
@@ -87,18 +92,30 @@
     }
 
     @Override
-    public void updateByIdInBatch(List<WithdrawalOrders> withdrawalOrderss) {
-        if (CollectionUtils.isEmpty(withdrawalOrderss)) {
+    public void updateByIdInBatch(List<WithdrawalOrders> withdrawalOrdersList) {
+        if (withdrawalOrdersList == null || withdrawalOrdersList.isEmpty()) {
             return;
         }
-        for (WithdrawalOrders withdrawalOrders: withdrawalOrderss) {
+        for (WithdrawalOrders withdrawalOrders : withdrawalOrdersList) {
             this.updateById(withdrawalOrders);
         }
     }
 
     @Override
     public WithdrawalOrders findById(Integer id) {
-        return withdrawalOrdersMapper.selectById(id);
+        WithdrawalOrders order = withdrawalOrdersMapper.selectById(id);
+        if (Objects.isNull(order)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        // 鏌ヨ瀹℃壒浜哄悕绉�
+        fillUpdateUserName(order);
+        // 鏍规嵁鐢ㄦ埛绫诲瀷鏌ヨ鍏宠仈淇℃伅
+        if (Constants.ONE.equals(order.getMemberType())) {
+            fillMemberInfo(order);
+        } else {
+            fillShopInfo(order);
+        }
+        return order;
     }
 
     @Override
@@ -112,63 +129,69 @@
         QueryWrapper<WithdrawalOrders> wrapper = new QueryWrapper<>(withdrawalOrders);
         return withdrawalOrdersMapper.selectList(wrapper);
     }
-  
+
     @Override
     public PageData<WithdrawalOrders> findPage(PageWrap<WithdrawalOrders> pageWrap) {
         IPage<WithdrawalOrders> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<WithdrawalOrders> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<WithdrawalOrders> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(WithdrawalOrders::getId, pageWrap.getModel().getId());
+        pageWrap.getModel().setDeleted(Constants.ZERO);
+
+        // 鍏叡锛氬鎵逛汉鍚嶇О
+        queryWrapper.selectAll(WithdrawalOrders.class)
+                .selectAs(SystemUser::getUsername, WithdrawalOrders::getUpdateUserName)
+                .leftJoin(SystemUser.class, SystemUser::getId, WithdrawalOrders::getUserId);
+
+        // 鏍规嵁鐢ㄦ埛绫诲瀷鍏宠仈涓嶅悓琛�
+        Integer memberType = pageWrap.getModel().getMemberType();
+        if (Constants.ONE.equals(memberType)) {
+            // 鍙告満绔細鍏宠仈 DriverInfo 琛�
+            queryWrapper.selectAs(DriverInfo::getName, WithdrawalOrders::getMemberName)
+                    .selectAs(DriverInfo::getTelephone, WithdrawalOrders::getMemberTelephone)
+                    .leftJoin(DriverInfo.class, DriverInfo::getMemberId, WithdrawalOrders::getMemberId);
+        } else {
+            // 搴楅摵绔� / 涓嶇瓫閫夛細鍏宠仈 ShopInfo 琛�
+            queryWrapper.selectAs(ShopInfo::getName, WithdrawalOrders::getShopName)
+                    .selectAs(ShopInfo::getLinkName, WithdrawalOrders::getLinkName)
+                    .leftJoin(ShopInfo.class, ShopInfo::getId, WithdrawalOrders::getMemberId,
+                            ext -> ext.eq(ShopInfo::getDeleted, Constants.ZERO));
         }
-        if (pageWrap.getModel().getDeleted() != null) {
-            queryWrapper.lambda().eq(WithdrawalOrders::getDeleted, pageWrap.getModel().getDeleted());
+
+        queryWrapper.eq(WithdrawalOrders::getDeleted, pageWrap.getModel().getDeleted());
+        if (memberType != null) {
+            queryWrapper.eq(WithdrawalOrders::getMemberType, memberType);
         }
-        if (pageWrap.getModel().getCreateUser() != null) {
-            queryWrapper.lambda().eq(WithdrawalOrders::getCreateUser, pageWrap.getModel().getCreateUser());
-        }
-        if (pageWrap.getModel().getCreateTime() != null) {
-            queryWrapper.lambda().ge(WithdrawalOrders::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
-            queryWrapper.lambda().le(WithdrawalOrders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
-        }
-        if (pageWrap.getModel().getUpdateUser() != null) {
-            queryWrapper.lambda().eq(WithdrawalOrders::getUpdateUser, pageWrap.getModel().getUpdateUser());
-        }
-        if (pageWrap.getModel().getUpdateTime() != null) {
-            queryWrapper.lambda().ge(WithdrawalOrders::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
-            queryWrapper.lambda().le(WithdrawalOrders::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(WithdrawalOrders::getRemark, pageWrap.getModel().getRemark());
+        if (StringUtils.isNotBlank(pageWrap.getModel().getOutBillNo())) {
+            queryWrapper.like(WithdrawalOrders::getOutBillNo, pageWrap.getModel().getOutBillNo());
         }
         if (pageWrap.getModel().getMemberId() != null) {
-            queryWrapper.lambda().eq(WithdrawalOrders::getMemberId, pageWrap.getModel().getMemberId());
-        }
-        if (pageWrap.getModel().getAmount() != null) {
-            queryWrapper.lambda().eq(WithdrawalOrders::getAmount, pageWrap.getModel().getAmount());
-        }
-        if (pageWrap.getModel().getWxExternalNo() != null) {
-            queryWrapper.lambda().eq(WithdrawalOrders::getWxExternalNo, pageWrap.getModel().getWxExternalNo());
+            queryWrapper.eq(WithdrawalOrders::getMemberId, pageWrap.getModel().getMemberId());
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(WithdrawalOrders::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(WithdrawalOrders::getStatus, pageWrap.getModel().getStatus());
         }
-        if (pageWrap.getModel().getDoneTime() != null) {
-            queryWrapper.lambda().ge(WithdrawalOrders::getDoneTime, Utils.Date.getStart(pageWrap.getModel().getDoneTime()));
-            queryWrapper.lambda().le(WithdrawalOrders::getDoneTime, Utils.Date.getEnd(pageWrap.getModel().getDoneTime()));
+        if (pageWrap.getModel().getType() != null) {
+            queryWrapper.eq(WithdrawalOrders::getType, pageWrap.getModel().getType());
         }
-        if (pageWrap.getModel().getDoneInfo() != null) {
-            queryWrapper.lambda().eq(WithdrawalOrders::getDoneInfo, pageWrap.getModel().getDoneInfo());
+        if (pageWrap.getModel().getCreateStartTime() != null) {
+            queryWrapper.ge(WithdrawalOrders::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateStartTime()));
         }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+        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());
             }
         }
-        return PageData.from(withdrawalOrdersMapper.selectPage(page, queryWrapper));
+        return PageData.from(withdrawalOrdersMapper.selectJoinPage(page, WithdrawalOrders.class, queryWrapper));
     }
+
+
+
+
 
     @Override
     public long count(WithdrawalOrders withdrawalOrders) {
@@ -176,193 +199,257 @@
         return withdrawalOrdersMapper.selectCount(wrapper);
     }
 
-
-    /************************************绉诲姩绔帴鍙�*******************************************/
-
-    /**
-     * 鎻愮幇鐢宠
-     * @param withdrawalDTO
-     */
     @Override
-    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
-    public TransferToUser.TransferToUserResponse  applyWithdrawal(WithdrawalDTO withdrawalDTO){
-        if(Objects.isNull(withdrawalDTO)
-        || Objects.isNull(withdrawalDTO.getAmount())
-        || org.apache.commons.lang3.StringUtils.isBlank(withdrawalDTO.getName())
-        || withdrawalDTO.getAmount().compareTo(BigDecimal.ZERO)<=Constants.ZERO
-        ){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+    public Long totalAmount(PageWrap<WithdrawalOrders> pageWrap) {
+        QueryWrapper<WithdrawalOrders> queryWrapper = new QueryWrapper<>();
+        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));
+        if (pageWrap.getModel().getOutBillNo() != null) {
+            queryWrapper.lambda().like(WithdrawalOrders::getOutBillNo, pageWrap.getModel().getOutBillNo());
         }
-        Member member = memberMapper.selectById(withdrawalDTO.getMember().getId());
-        if(Objects.isNull(member)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛淇℃伅寮傚父,璇疯仈绯荤鐞嗗憳");
+        if (pageWrap.getModel().getMemberId() != null) {
+            queryWrapper.lambda().eq(WithdrawalOrders::getMemberId, pageWrap.getModel().getMemberId());
         }
-        if(member.getAmount() < withdrawalDTO.getAmount().multiply(new BigDecimal("100")).intValue()){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鍙彁鐜颁綑棰濅笉瓒炽��");
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(WithdrawalOrders::getStatus, pageWrap.getModel().getStatus());
         }
-        if(StringUtils.isEmpty(member.getName())){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇峰厛鍘荤淮鎶ょ湡瀹炲鍚嶅悗杩涜鎻愮幇鐢宠");
+        if (pageWrap.getModel().getType() != null) {
+            queryWrapper.lambda().eq(WithdrawalOrders::getType, pageWrap.getModel().getType());
         }
-        WithdrawalOrders withdrawalOrders = new WithdrawalOrders();
-        withdrawalOrders.setCreateTime(new Date());
-        withdrawalOrders.setMemberId(member.getId());
-        withdrawalOrders.setOutBillNo(UUID.randomUUID().toString().replace("-",""));
-        withdrawalOrders.setAmount((withdrawalDTO.getAmount().multiply(new BigDecimal("100"))).longValue());
-        withdrawalOrders.setStatus(Constants.ZERO);
-        withdrawalOrders.setType(Constants.ZERO);
-        withdrawalOrders.setDeleted(Constants.ZERO);
-
-        //鍙戣捣鎻愮幇鐢宠
-        TransferToUser.TransferToUserRequest transferToUserRequest = new TransferToUser.TransferToUserRequest();
-        transferToUserRequest.openid = member.getOpenid();
-        transferToUserRequest.outBillNo =  withdrawalOrders.getOutBillNo();
-        transferToUserRequest.transferAmount = withdrawalOrders.getAmount();
-        transferToUserRequest.transferRemark = "鎻愮幇鐢宠";
-        try {
-            TransferToUser.TransferToUserResponse response =  WxMiniConfig.transferToUser.run(transferToUserRequest,withdrawalDTO.getName());
-            withdrawalOrders.setRemark(JSONObject.toJSONString(response));
-            if(response.state.name().equals("WAIT_USER_CONFIRM") || response.state.name().equals("ACCEPTED")){
-                withdrawalOrders.setWxExternalNo(response.transferBillNo);
-            }
-            withdrawalOrdersMapper.insert(withdrawalOrders);
-            //鏇存柊鐢ㄦ埛浣欓
-            memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT -  " + withdrawalOrders.getAmount() ).eq(Member::getId,member.getId()));
-            //瀛樺偍娴佹按璁板綍
-            MemberRevenue memberRevenue = new MemberRevenue();
-            memberRevenue.setCreateTime(new Date());
-            memberRevenue.setTransactionNo(withdrawalOrders.getOutBillNo());
-            memberRevenue.setDeleted(Constants.ZERO);
-            memberRevenue.setMemberId(member.getId());
-            memberRevenue.setType(Constants.THREE);
-            memberRevenue.setOptType(-Constants.ONE);
-            memberRevenue.setBeforeAmount(member.getAmount());
-            memberRevenue.setAmount(withdrawalOrders.getAmount());
-            memberRevenue.setAfterAmount(member.getAmount() - withdrawalOrders.getAmount());
-            memberRevenue.setObjId(withdrawalOrders.getId());
-            memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType()));
-            memberRevenue.setObjType(Constants.ONE);
-            memberRevenue.setDeleted(Constants.ZERO);
-            memberRevenue.setStatus(Constants.TWO);
-            memberRevenueMapper.insert(memberRevenue);
-            return response;
-        } catch (WXPayUtility.ApiException e) {
-            String message = JSONObject.parseObject(e.getBody()).getString("message");
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),message);
+        if (pageWrap.getModel().getCreateStartTime() != null) {
+            queryWrapper.lambda().ge(WithdrawalOrders::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateStartTime()));
         }
-    }
-
-
-    @Override
-    public void transferSuccess(String outBillNo,Boolean isSuccess){
-        WithdrawalOrders withdrawalOrders = withdrawalOrdersMapper.selectOne(new QueryWrapper<WithdrawalOrders>().lambda()
-                .eq(WithdrawalOrders::getOutBillNo,outBillNo).last("limit 1"));
-        Member member = memberMapper.selectById(withdrawalOrders.getMemberId());
-        if(Objects.isNull(member)){
-            return;
+        if (pageWrap.getModel().getCreateEndTime() != null) {
+            queryWrapper.lambda().le(WithdrawalOrders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime()));
         }
-        if(Objects.nonNull(withdrawalOrders)){
-            //杞处鎴愬姛
-            if(isSuccess){
-                withdrawalOrdersMapper.update(new UpdateWrapper<WithdrawalOrders>().lambda()
-                        .set(WithdrawalOrders::getStatus,Constants.ONE)
-                        .set(WithdrawalOrders::getUpdateTime, DateUtil.getCurrDateTime())
-                        .eq(WithdrawalOrders::getOutBillNo,outBillNo)
-                );
-                //淇敼娴佹按璁板綍鐘舵��
-                memberRevenueMapper.update(new UpdateWrapper<MemberRevenue>().lambda()
-                        .set(MemberRevenue::getStatus,Constants.ZERO)
-                        .set(MemberRevenue::getUpdateTime, DateUtil.getCurrDateTime())
-                        .eq(MemberRevenue::getObjId,withdrawalOrders.getId())
-                        .eq(MemberRevenue::getObjType,Constants.ONE)
-                );
-                withdrawalOrders.setUpdateTime(new Date());
-                sendWxMessage.withdrawalMessage(member.getOpenid(),withdrawalOrders);
-            }else {
-                //鏇存柊鐢ㄦ埛浣欓
-                memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT +  " + withdrawalOrders.getAmount() ).eq(Member::getId,withdrawalOrders.getMemberId()));
-                //淇敼娴佹按璁板綍鐘舵��
-                memberRevenueMapper.update(new UpdateWrapper<MemberRevenue>().lambda()
-                        .set(MemberRevenue::getStatus,Constants.ONE)
-                        .set(MemberRevenue::getUpdateTime, DateUtil.getCurrDateTime())
-                        .eq(MemberRevenue::getObjId,withdrawalOrders.getId())
-                        .eq(MemberRevenue::getObjType,Constants.ONE)
-                );
-                //瀛樺偍娴佹按璁板綍
-                MemberRevenue memberRevenue = new MemberRevenue();
-                memberRevenue.setCreateTime(new Date());
-                memberRevenue.setTransactionNo(withdrawalOrders.getOutBillNo());
-                memberRevenue.setDeleted(Constants.ZERO);
-                memberRevenue.setMemberId(withdrawalOrders.getMemberId());
-                memberRevenue.setType(Constants.FOUR);
-                memberRevenue.setOptType(Constants.ONE);
-                memberRevenue.setBeforeAmount(member.getAmount());
-                memberRevenue.setAmount(withdrawalOrders.getAmount());
-                memberRevenue.setAfterAmount(member.getAmount() + withdrawalOrders.getAmount());
-                memberRevenue.setObjId(withdrawalOrders.getId());
-                memberRevenue.setRemark(Constants.RevenueType.getInfo(memberRevenue.getType()));
-                memberRevenue.setObjType(Constants.ONE);
-                memberRevenue.setDeleted(Constants.ZERO);
-                memberRevenue.setStatus(Constants.ZERO);
-                memberRevenueMapper.insert(memberRevenue);
-            }
-        }
-
+        WithdrawalOrders result = withdrawalOrdersMapper.selectOne(queryWrapper);
+        return result != null && result.getAmount() != null ? result.getAmount() : 0L;
     }
 
     @Override
-    public void cancelTransfer(TransferToUser.CancelTransferRequest request){
-        if(Objects.isNull(request)
-        || StringUtils.isEmpty(request.outBillNo)){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+    public void approve(WithdrawalApproveDTO dto) {
+        if (dto == null || dto.getId() == null || dto.getStatus() == null) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀹℃壒鍙傛暟涓嶅畬鏁�");
         }
-        WithdrawalOrders withdrawalOrders = withdrawalOrdersMapper.selectOne(new QueryWrapper<WithdrawalOrders>().lambda().eq(WithdrawalOrders::getOutBillNo,request.outBillNo).last("limit 1"));
-        if(Objects.isNull(withdrawalOrders)){
+        if (!Constants.ONE.equals(dto.getStatus()) && !Constants.TWO.equals(dto.getStatus())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀹℃壒缁撴灉浠呮敮鎸侀�氳繃鎴栨嫆缁�");
+        }
+
+        WithdrawalOrders order = withdrawalOrdersMapper.selectById(dto.getId());
+        if (Objects.isNull(order)) {
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        Member member = memberMapper.selectById(withdrawalOrders.getMemberId());
-        if(Objects.isNull(member)){
-            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        if (!Constants.ZERO.equals(order.getStatus())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呯敵璇蜂腑鐨勬彁鐜拌鍗曞彲瀹℃壒");
         }
-        try {
-            TransferToUser.CancelTransferResponse response =  WxMiniConfig.transferToUser.cancelRun(request);
-            if(response.state.equals("CANCELING")){
-                //鏍囪鎻愮幇澶辫触 鍔犲洖瀵瑰簲鐨勬彁鐜伴噾棰�
-                withdrawalOrdersMapper.update(new UpdateWrapper<WithdrawalOrders>()
-                        .lambda().set(WithdrawalOrders::getStatus,Constants.TWO)
-                        .eq(WithdrawalOrders::getId,withdrawalOrders.getId()));
 
-                memberRevenueMapper.update(new UpdateWrapper<MemberRevenue>().lambda().set(MemberRevenue::getStatus,Constants.ONE)
-                                .set(MemberRevenue::getUpdateTime,new Date())
-                        .eq(MemberRevenue::getObjId,withdrawalOrders.getId()))
-                ;
+        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+        Integer currentUserId = getCurrentUserId();
+        Date now = new Date();
 
-                //鏇存柊鐢ㄦ埛浣欓
-                memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT + " + withdrawalOrders.getAmount() ).eq(Member::getId,withdrawalOrders.getMemberId()));
+        WithdrawalOrders update = new WithdrawalOrders();
+        update.setId(dto.getId());
+        update.setStatus(dto.getStatus());
+        update.setUserId(currentUserId);
+        update.setApproveTime(now);
+        update.setApproveRemark(dto.getApproveRemark());
+        update.setUpdateTime(now);
+        withdrawalOrdersMapper.updateById(update);
 
-                //瀛樺偍娴佹按璁板綍
-                MemberRevenue memberRevenue = new MemberRevenue();
-                memberRevenue.setCreateTime(new Date());
-                memberRevenue.setMemberId(withdrawalOrders.getMemberId());
-                memberRevenue.setType(Constants.FOUR);
-                memberRevenue.setOptType(Constants.ONE);
-                memberRevenue.setBeforeAmount(member.getAmount());
-                memberRevenue.setAmount(withdrawalOrders.getAmount());
-                memberRevenue.setAfterAmount(member.getAmount() + withdrawalOrders.getAmount());
-                memberRevenue.setObjId(withdrawalOrders.getId());
-                memberRevenue.setObjType(Constants.ONE);
-                memberRevenue.setDeleted(Constants.ZERO);
-                memberRevenue.setStatus(Constants.ZERO);
-                memberRevenueMapper.insert(memberRevenue);
-
+        // 椹冲洖鏃堕��鍥炰綑棰�
+        if (Constants.TWO.equals(dto.getStatus())) {
+            Long amountFen = order.getAmount() != null ? order.getAmount() : 0L;
+            if (amountFen > 0 && order.getMemberId() != null) {
+                if (Constants.equalsInteger(order.getMemberType(), Constants.ONE)) {
+                    // 鍙告満锛氶�氳繃 memberId 鏌� DriverInfo锛岄��鍥� balance
+                    DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+                            .eq(DriverInfo::getMemberId, order.getMemberId())
+                            .eq(DriverInfo::getDeleted, Constants.ZERO)
+                            .last("limit 1"));
+                    if (driver != null) {
+                        driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+                                .setSql(" BALANCE = IFNULL(BALANCE, 0) + " + amountFen)
+                                .eq(DriverInfo::getId, driver.getId()));
+                    }
+                } 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::getDeleted, Constants.ZERO)
+                            .last("limit 1"));
+                    if (shop != null) {
+                        shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda()
+                                .setSql(" BALANCE = IFNULL(BALANCE, 0) + " + amountFen)
+                                .eq(ShopInfo::getId, shop.getId()));
+                    }
+                }
+                // 鍒涘缓閫�鍥� Revenue 璁板綍
+                Revenue revenue = new Revenue();
+                revenue.setMemberId(order.getMemberId());
+                revenue.setMemberType(order.getMemberType());
+                revenue.setType(Constants.TWO); // 2=鎻愮幇閫�鍥�
+                revenue.setOptType(Constants.ONE); // 1=鏀跺叆
+                revenue.setAmount(amountFen);
+                revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
+                revenue.setObjId(order.getId());
+                revenue.setObjType(Constants.ONE); // 1=鎻愮幇涓氬姟
+                revenue.setStatus(Constants.ZERO);
+                revenue.setDeleted(Constants.ZERO);
+                revenue.setCreateTime(now);
+                revenueMapper.insert(revenue);
             }
-            System.out.println(JSONObject.toJSONString(response));
-        } catch (WXPayUtility.ApiException e) {
-            String message = JSONObject.parseObject(e.getBody()).getString("message");
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),message);
         }
-
     }
 
+    private Integer getCurrentUserId() {
+        com.doumee.core.model.LoginUserInfo user =
+                (com.doumee.core.model.LoginUserInfo) org.apache.shiro.SecurityUtils.getSubject().getPrincipal();
+        return user != null ? user.getId() : null;
+    }
 
+    private void fillUpdateUserName(WithdrawalOrders order) {
+        if (order.getUserId() != null) {
+            SystemUser user = systemUserMapper.selectById(order.getUserId());
+            if (user != null) {
+                order.setUpdateUserName(user.getUsername());
+            }
+        }
+    }
+
+    private void fillShopInfo(WithdrawalOrders order) {
+        if (order.getMemberId() != null) {
+            ShopInfo shop = shopInfoMapper.selectById(order.getMemberId());
+            if (shop != null && !Constants.ONE.equals(shop.getDeleted())) {
+                order.setShopInfo(shop);
+                order.setShopName(shop.getName());
+                order.setLinkName(shop.getLinkName());
+            }
+        }
+    }
+
+    private void fillMemberInfo(WithdrawalOrders order) {
+        if (order.getMemberId() != null) {
+            DriverInfo driver = driverInfoMapper.selectOne(
+                    new QueryWrapper<DriverInfo>().lambda()
+                            .eq(DriverInfo::getMemberId, order.getMemberId())
+                            .eq(DriverInfo::getDeleted, Constants.ZERO)
+                            .last("limit 1"));
+            if (driver != null) {
+                order.setMemberName(driver.getName());
+                order.setMemberTelephone(driver.getTelephone());
+            }
+        }
+    }
+
+    @Override
+    public void applyDriverWithdrawal(WithdrawalDTO dto, Integer memberId) {
+        DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+                .eq(DriverInfo::getMemberId, memberId)
+                .eq(DriverInfo::getDeleted, Constants.ZERO)
+                .last("limit 1"));
+        if (driver == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+        }
+        long amountFen = dto.getAmount().multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
+        long balance = driver.getBalance() != null ? driver.getBalance() : 0L;
+        if (amountFen <= 0) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦蹇呴』澶т簬0");
+        }
+        if (amountFen > balance) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦涓嶈兘瓒呰繃鍙敤浣欓");
+        }
+        String billNo = generateBillNo();
+        Date now = new Date();
+        // 鎵e噺鍙告満浣欓
+        driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+                .setSql(" BALANCE = IFNULL(BALANCE, 0) - " + amountFen)
+                .eq(DriverInfo::getId, driver.getId()));
+        // 鍒涘缓鎻愮幇璁板綍
+        WithdrawalOrders order = new WithdrawalOrders();
+        order.setMemberId(memberId);
+        order.setMemberType(Constants.ONE);
+        order.setAmount(amountFen);
+        order.setStatus(Constants.ZERO);
+        order.setType(Constants.ZERO);
+        order.setOutBillNo(billNo);
+        order.setAliAccount(dto.getAliAccount());
+        order.setDeleted(Constants.ZERO);
+        order.setCreateTime(now);
+        order.setUpdateTime(now);
+        order.setCreateUser(memberId);
+        withdrawalOrdersMapper.insert(order);
+        // 鍒涘缓鏀嚭 Revenue 璁板綍
+        Revenue revenue = new Revenue();
+        revenue.setMemberId(memberId);
+        revenue.setMemberType(Constants.ONE);
+        revenue.setType(Constants.ONE);
+        revenue.setOptType(-Constants.ONE);
+        revenue.setAmount(amountFen);
+        revenue.setVaildStatus(Constants.ONE);
+        revenue.setObjId(order.getId());
+        revenue.setObjType(Constants.ONE);
+        revenue.setStatus(Constants.ZERO);
+        revenue.setDeleted(Constants.ZERO);
+        revenue.setCreateTime(now);
+        revenueMapper.insert(revenue);
+    }
+
+    @Override
+    public void applyShopWithdrawal(WithdrawalDTO dto, Integer shopId) {
+        ShopInfo shop = shopInfoMapper.selectById(shopId);
+        if (shop == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        long amountFen = dto.getAmount().multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).longValue();
+        long balance = shop.getBalance() != null ? shop.getBalance() : 0L;
+        if (amountFen <= 0) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦蹇呴』澶т簬0");
+        }
+        if (amountFen > balance) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎻愮幇閲戦涓嶈兘瓒呰繃鍙敤浣欓");
+        }
+        String billNo = generateBillNo();
+        Date now = new Date();
+        // 鎵e噺闂ㄥ簵浣欓
+        shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda()
+                .setSql(" BALANCE = IFNULL(BALANCE, 0) - " + amountFen)
+                .eq(ShopInfo::getId, shopId));
+        // 鍒涘缓鎻愮幇璁板綍
+        WithdrawalOrders order = new WithdrawalOrders();
+        order.setMemberId(shop.getRegionMemberId());
+        order.setMemberType(Constants.TWO);
+        order.setAmount(amountFen);
+        order.setStatus(Constants.ZERO);
+        order.setType(Constants.ZERO);
+        order.setOutBillNo(billNo);
+        order.setAliAccount(dto.getAliAccount());
+        order.setDeleted(Constants.ZERO);
+        order.setCreateTime(now);
+        order.setUpdateTime(now);
+        order.setCreateUser(shop.getRegionMemberId());
+        withdrawalOrdersMapper.insert(order);
+        // 鍒涘缓鏀嚭 Revenue 璁板綍
+        Revenue revenue = new Revenue();
+        revenue.setMemberId(shop.getRegionMemberId());
+        revenue.setMemberType(Constants.TWO);
+        revenue.setType(Constants.ONE); // 1=鎻愮幇鏀嚭
+        revenue.setOptType(-Constants.ONE); // -1=鏀嚭
+        revenue.setAmount(amountFen);
+        revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
+        revenue.setObjId(order.getId());
+        revenue.setObjType(Constants.ONE); // 1=鎻愮幇涓氬姟
+        revenue.setStatus(Constants.ZERO);
+        revenue.setDeleted(Constants.ZERO);
+        revenue.setCreateTime(now);
+        revenueMapper.insert(revenue);
+    }
+
+    private String generateBillNo() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String random = String.valueOf(ThreadLocalRandom.current().nextInt(100000, 999999));
+        return "TX" + sdf.format(new Date()) + random;
+    }
 
 }

--
Gitblit v1.9.3