111
rk
2025-08-21 10c77061473979a78529139d1ed4cbb70353ba73
server/services/src/main/java/com/doumee/service/business/impl/WithdrawalOrdersServiceImpl.java
@@ -28,6 +28,7 @@
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -181,14 +182,17 @@
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public TransferToUser.TransferToUserResponse  applyWithdrawal(WithdrawalDTO withdrawalDTO){
        if(Objects.isNull(withdrawalDTO)
        || Objects.isNull(withdrawalDTO.getAmount())){
        || 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);
        }
        Member member = memberMapper.selectById(withdrawalDTO.getMember().getId());
        if(Objects.isNull(member)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户信息异常,请联系管理员");
        }
        if(member.getAmount() < withdrawalDTO.getAmount()){
        if(member.getAmount() < withdrawalDTO.getAmount().multiply(new BigDecimal("100")).intValue()){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,可提现余额不足。");
        }
        if(StringUtils.isEmpty(member.getName())){
@@ -198,7 +202,7 @@
        withdrawalOrders.setCreateTime(new Date());
        withdrawalOrders.setMemberId(member.getId());
        withdrawalOrders.setOutBillNo(UUID.randomUUID().toString().replace("-",""));
        withdrawalOrders.setAmount(withdrawalDTO.getAmount());
        withdrawalOrders.setAmount((withdrawalDTO.getAmount().multiply(new BigDecimal("100"))).longValue());
        withdrawalOrders.setStatus(Constants.ZERO);
        withdrawalOrders.setType(Constants.ZERO);
        withdrawalOrders.setDeleted(Constants.ZERO);
@@ -207,18 +211,17 @@
        TransferToUser.TransferToUserRequest transferToUserRequest = new TransferToUser.TransferToUserRequest();
        transferToUserRequest.openid = member.getOpenid();
        transferToUserRequest.outBillNo =  withdrawalOrders.getOutBillNo();
        transferToUserRequest.transferAmount = withdrawalDTO.getAmount();
        transferToUserRequest.transferAmount = withdrawalOrders.getAmount();
        transferToUserRequest.transferRemark = "提现申请";
        try {
            TransferToUser.TransferToUserResponse response =  WxMiniConfig.transferToUser.run(transferToUserRequest,member.getName());
            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 -  " + withdrawalDTO.getAmount() ).eq(Member::getId,member.getId()));
            memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" AMOUNT = AMOUNT -  " + withdrawalOrders.getAmount() ).eq(Member::getId,member.getId()));
            //存储流水记录
            MemberRevenue memberRevenue = new MemberRevenue();
            memberRevenue.setCreateTime(new Date());
@@ -245,6 +248,48 @@
    @Override
    public void transferSuccess(String outBillNo,Boolean isSuccess){
        //转账成功
        if(isSuccess){
            withdrawalOrdersMapper.update(new UpdateWrapper<WithdrawalOrders>().lambda()
                    .set(WithdrawalOrders::getStatus,Constants.ONE)
                    .eq(WithdrawalOrders::getOutBillNo,outBillNo)
            );
        }else {
            WithdrawalOrders withdrawalOrders = withdrawalOrdersMapper.selectOne(new QueryWrapper<WithdrawalOrders>().lambda()
                    .eq(WithdrawalOrders::getOutBillNo,outBillNo).last("limit 1"));
            if(Objects.isNull(withdrawalOrders)){
                return;
            }
            Member member = memberMapper.selectById(withdrawalOrders.getMemberId());
            if(Objects.isNull(member)){
                return;
            }
            //更新用户余额
            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.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);
        }
    }
    @Override
    public void cancelTransfer(TransferToUser.CancelTransferRequest request){
        if(Objects.isNull(request)
        || StringUtils.isEmpty(request.outBillNo)){