| package cc.mrbird.febs.mall.service.impl; | 
|   | 
| import cc.mrbird.febs.common.enumerates.FlowTypeEnum; | 
| import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; | 
| import cc.mrbird.febs.common.exception.FebsException; | 
| import cc.mrbird.febs.common.utils.LoginUserUtil; | 
| import cc.mrbird.febs.common.utils.MallUtils; | 
| import cc.mrbird.febs.mall.dto.WithdrawalDto; | 
| import cc.mrbird.febs.mall.entity.MallMember; | 
| import cc.mrbird.febs.mall.entity.MallMemberPayment; | 
| import cc.mrbird.febs.mall.entity.MallMemberWallet; | 
| import cc.mrbird.febs.mall.entity.MallMemberWithdraw; | 
| import cc.mrbird.febs.mall.mapper.*; | 
| import cc.mrbird.febs.mall.service.IApiMallMemberService; | 
| import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; | 
| import cc.mrbird.febs.mall.service.IMallMemberWithdrawService; | 
| import cc.mrbird.febs.mall.service.MallMemberService; | 
| import cn.hutool.core.util.StrUtil; | 
| import cn.hutool.crypto.SecureUtil; | 
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
| import lombok.RequiredArgsConstructor; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.stereotype.Service; | 
|   | 
| import java.math.BigDecimal; | 
|   | 
| /** | 
|  * @author wzy | 
|  * @date 2022-05-05 | 
|  **/ | 
| @Slf4j | 
| @Service | 
| @RequiredArgsConstructor | 
| public class MallMemberWithdrawServiceImpl extends ServiceImpl<MallMemberWithdrawMapper, MallMemberWithdraw> implements IMallMemberWithdrawService { | 
|   | 
|     private final IApiMallMemberService mallMemberService; | 
|     private final MallMoneyFlowMapper mallMoneyFlowMapper; | 
|     private final MallMemberWalletMapper mallMemberWalletMapper; | 
|     private final IApiMallMemberWalletService walletService; | 
|     private final MallMemberPaymentMapper mallMemberPaymentMapper; | 
|   | 
|     @Override | 
|     public void withdrawal(WithdrawalDto withdrawalDto) { | 
|         Long memberId = LoginUserUtil.getLoginUser().getId(); | 
|         MallMember mallMember = mallMemberService.getById(memberId); | 
|         if (StrUtil.isBlank(mallMember.getTradePassword())) { | 
|             throw new FebsException("未设置支付密码"); | 
|         } | 
|   | 
|         if (!mallMember.getTradePassword().equals(SecureUtil.md5(withdrawalDto.getTradePwd()))) { | 
|             throw new FebsException("支付密码错误"); | 
|         } | 
|   | 
|         if (withdrawalDto.getAmount().compareTo(BigDecimal.valueOf(100)) < 0) { | 
|             throw new FebsException("最小提现金额为100"); | 
|         } | 
|   | 
|         MallMemberPayment payment = mallMemberPaymentMapper.selectByMemberId(memberId); | 
|         if (payment == null) { | 
|             throw new FebsException("未设置收款方式"); | 
|         } | 
|   | 
|         BigDecimal profit = mallMoneyFlowMapper.selectProfitByDateAndMemberId(memberId); | 
|         MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); | 
|         if (profit != null) { | 
|             // 可提现 | 
|             BigDecimal canMoney = wallet.getCommission().subtract(profit); | 
|   | 
|             if(withdrawalDto.getAmount().compareTo(canMoney) > 0) { | 
|                 throw new FebsException("提现金额不足"); | 
|             } | 
|         } | 
|   | 
|         walletService.reduce(withdrawalDto.getAmount(), memberId, "commission"); | 
|         String orderNo = MallUtils.getOrderNum("W"); | 
|   | 
|         MallMemberWithdraw withdraw = new MallMemberWithdraw(); | 
|         withdraw.setWithdrawNo(orderNo); | 
|         withdraw.setMemberId(memberId); | 
|         withdraw.setAmount(withdrawalDto.getAmount()); | 
|         withdraw.setStatus(1); | 
|         this.baseMapper.insert(withdraw); | 
|   | 
|         mallMemberService.addMoneyFlow(memberId, withdrawalDto.getAmount().negate(), MoneyFlowTypeEnum.WITHDRAWAL.getValue(), orderNo, null, null, null, 1, FlowTypeEnum.COMMISSION.getValue()); | 
|     } | 
| } |