MrShi
昨天 7ee466ebc953bb5640bcf42f2b8e2a87aa471c21
server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
@@ -1,45 +1,39 @@
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.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.ShopInfo;
import com.doumee.dao.business.model.WithdrawalOrders;
import com.doumee.dao.dto.WithdrawalDTO;
import com.doumee.dao.dto.WithdrawalApproveDTO;
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.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
/**
 * 提现申请记录Service实现
 * @author 江蹄蹄
 * @date 2025/07/09 12:00
 * @author rk
 * @date 2026/04/10
 */
@Service
public class WithdrawalOrdersServiceImpl implements WithdrawalOrdersService {
@@ -48,13 +42,13 @@
    private WithdrawalOrdersMapper withdrawalOrdersMapper;
    @Autowired
    private MemberMapper memberMapper;
    private SystemUserMapper systemUserMapper;
    @Autowired
    private MemberRevenueMapper memberRevenueMapper;
    private ShopInfoMapper shopInfoMapper;
    @Autowired
    private SendWxMessage sendWxMessage;
    private DriverInfoMapper driverInfoMapper;
    @Override
    public Integer create(WithdrawalOrders withdrawalOrders) {
@@ -64,7 +58,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 +71,7 @@
    @Override
    public void deleteByIdInBatch(List<Integer> ids) {
        if (CollectionUtils.isEmpty(ids)) {
        if (ids == null || ids.isEmpty()) {
            return;
        }
        withdrawalOrdersMapper.deleteBatchIds(ids);
@@ -87,18 +83,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 +120,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 +190,103 @@
        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);
        }
        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()))
                ;
                //更新用户余额
                memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT + " + withdrawalOrders.getAmount() ).eq(Member::getId,withdrawalOrders.getMemberId()));
                //存储流水记录
                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);
            }
            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);
        if (!Constants.ZERO.equals(order.getStatus())) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "仅申请中的提现订单可审批");
        }
        // 获取当前登录用户
        Integer currentUserId = getCurrentUserId();
        WithdrawalOrders update = new WithdrawalOrders();
        update.setId(dto.getId());
        update.setStatus(dto.getStatus());
        update.setUserId(currentUserId);
        update.setApproveTime(new Date());
        update.setApproveRemark(dto.getApproveRemark());
        update.setUpdateTime(new Date());
        withdrawalOrdersMapper.updateById(update);
    }
    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());
            }
        }
    }
}