|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import cc.mrbird.febs.common.entity.FebsResponse; | 
|---|
|  |  |  | import cc.mrbird.febs.common.enumerates.AgentLevelEnum; | 
|---|
|  |  |  | 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.*; | 
|---|
|  |  |  | 
|---|
|  |  |  | import cc.mrbird.febs.mall.service.IApiMallMemberService; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.service.ICommonService; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.vo.MallMemberVo; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.vo.MoneyFlowVo; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.vo.TeamListVo; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.vo.*; | 
|---|
|  |  |  | import cn.hutool.core.collection.CollUtil; | 
|---|
|  |  |  | import cn.hutool.core.util.IdUtil; | 
|---|
|  |  |  | import cn.hutool.core.util.ObjectUtil; | 
|---|
|  |  |  | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.math.BigDecimal; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.HashMap; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.Map; | 
|---|
|  |  |  | 
|---|
|  |  |  | private final IApiMallMemberWalletService walletService; | 
|---|
|  |  |  | private final MallMemberPaymentMapper mallMemberPaymentMapper; | 
|---|
|  |  |  | private final DataDictionaryCustomMapper dataDictionaryCustomMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${spring.profiles.active}") | 
|---|
|  |  |  | private String active; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberVo.getId()); | 
|---|
|  |  |  | mallMemberVo.setBalance(wallet.getBalance()); | 
|---|
|  |  |  | mallMemberVo.setScore(wallet.getScore()); | 
|---|
|  |  |  | mallMemberVo.setPrizeScore(wallet.getPrizeScore()); | 
|---|
|  |  |  | mallMemberVo.setTotalCost(mallOrderInfoMapper.selectTotalAmount(id)); | 
|---|
|  |  |  | return new FebsResponse().success().data(mallMemberVo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, String description, String remark, Long rtMemberId, Integer status) { | 
|---|
|  |  |  | public void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, String description, String remark, Long rtMemberId, Integer status, Integer flowType) { | 
|---|
|  |  |  | MallMoneyFlow flow = new MallMoneyFlow(); | 
|---|
|  |  |  | flow.setMemberId(memberId); | 
|---|
|  |  |  | flow.setAmount(amount); | 
|---|
|  |  |  | 
|---|
|  |  |  | flow.setRemark(remark); | 
|---|
|  |  |  | flow.setRtMemberId(rtMemberId); | 
|---|
|  |  |  | flow.setStatus(status); | 
|---|
|  |  |  | flow.setFlowType(flowType); | 
|---|
|  |  |  | mallMoneyFlowMapper.insert(flow); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | walletService.reduceBalance(transferDto.getAmount(), memberId); | 
|---|
|  |  |  | String orderNo = MallUtils.getOrderNum("T"); | 
|---|
|  |  |  | this.addMoneyFlow(memberId, transferDto.getAmount().negate(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, mallMember.getId(), null); | 
|---|
|  |  |  | this.addMoneyFlow(memberId, transferDto.getAmount().negate(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, mallMember.getId(), null, FlowTypeEnum.BALANCE.getValue()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | walletService.addBalance(transferDto.getAmount(), mallMember.getId()); | 
|---|
|  |  |  | this.addMoneyFlow(mallMember.getId(), transferDto.getAmount(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, memberId, null); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void withdrawal(WithdrawalDto withdrawalDto) { | 
|---|
|  |  |  | Long memberId = LoginUserUtil.getLoginUser().getId(); | 
|---|
|  |  |  | MallMember mallMember = this.baseMapper.selectById(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("未设置收款方式"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | walletService.reduceBalance(withdrawalDto.getAmount(), memberId); | 
|---|
|  |  |  | String orderNo = MallUtils.getOrderNum("W"); | 
|---|
|  |  |  | this.addMoneyFlow(memberId, withdrawalDto.getAmount().negate(), MoneyFlowTypeEnum.WITHDRAWAL.getValue(), orderNo, null, null, null, 1); | 
|---|
|  |  |  | this.addMoneyFlow(mallMember.getId(), transferDto.getAmount(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, memberId, null, FlowTypeEnum.BALANCE.getValue()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | 
|---|
|  |  |  | member.setBindPhone(accountAndCodeDto.getAccount()); | 
|---|
|  |  |  | this.baseMapper.updateById(member); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public BigDecimal canMoney() { | 
|---|
|  |  |  | Long memberId = LoginUserUtil.getLoginUser().getId(); | 
|---|
|  |  |  | MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); | 
|---|
|  |  |  | BigDecimal profit = mallMoneyFlowMapper.selectProfitByDateAndMemberId(memberId); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | BigDecimal canMoney = wallet.getBalance(); | 
|---|
|  |  |  | if (profit != null) { | 
|---|
|  |  |  | if(canMoney.compareTo(BigDecimal.ZERO) > 0) { | 
|---|
|  |  |  | canMoney = canMoney.subtract(profit); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return canMoney; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public List<MallMember> findRankList(RankListDto rankListDto) { | 
|---|
|  |  |  | IPage<MallMember> page = new Page<>(rankListDto.getPageNum(), rankListDto.getPageSize()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | MallMember member = new MallMember(); | 
|---|
|  |  |  | member.setQuery("2"); | 
|---|
|  |  |  | member.setCreatedTime(new Date()); | 
|---|
|  |  |  | IPage<MallMember> list = this.baseMapper.selectRankListInPage(page, member); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return list.getRecords(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public MallMember findMemberInfoByAccount(String phone) { | 
|---|
|  |  |  | return this.baseMapper.selectInfoByAccount(phone); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public MyCommissionVo myCommission() { | 
|---|
|  |  |  | Long id = LoginUserUtil.getLoginUser().getId(); | 
|---|
|  |  |  | MallMember mallMember = this.baseMapper.selectById(id); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | MyCommissionVo commissionVo = MallMemberConversion.INSTANCE.entityToCommissionVo(mallMember); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | MallMember referMember = this.baseMapper.selectInfoByInviteId(mallMember.getReferrerId()); | 
|---|
|  |  |  | if (referMember != null) { | 
|---|
|  |  |  | commissionVo.setReferrerName(referMember.getName()); | 
|---|
|  |  |  | commissionVo.setAvatar(referMember.getAvatar()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.AGENT_LEVEL, mallMember.getLevel()); | 
|---|
|  |  |  | if (dic != null) { | 
|---|
|  |  |  | commissionVo.setLevelName(dic.getDescription()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(id); | 
|---|
|  |  |  | commissionVo.setCommission(wallet.getCommission()); | 
|---|
|  |  |  | commissionVo.setToday(mallMoneyFlowMapper.selectCommissionIncome(1, new Date(), id)); | 
|---|
|  |  |  | commissionVo.setMonth(mallMoneyFlowMapper.selectCommissionIncome(2, new Date(), id)); | 
|---|
|  |  |  | commissionVo.setTotal(mallMoneyFlowMapper.selectCommissionIncome(null, null, id)); | 
|---|
|  |  |  | commissionVo.setWaitCommission(BigDecimal.ZERO); | 
|---|
|  |  |  | return commissionVo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|