From c6b2efa459a6ed7c03723423a2205a7d32d961e0 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 12 Jan 2023 14:49:49 +0800 Subject: [PATCH] 20221227 充值归集 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 272 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 234 insertions(+), 38 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java index a736675..e4dfc1a 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java @@ -1,12 +1,11 @@ package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.entity.FebsResponse; -import cc.mrbird.febs.common.enumerates.AgentLevelEnum; -import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; -import cc.mrbird.febs.common.enumerates.FlowTypeEnum; -import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; +import cc.mrbird.febs.common.enumerates.*; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.*; +import cc.mrbird.febs.mall.conversion.MallGoodsConversion; +import cc.mrbird.febs.mall.conversion.MallMemberBankConversion; import cc.mrbird.febs.mall.conversion.MallMemberConversion; import cc.mrbird.febs.mall.conversion.MallShopApplyConversion; import cc.mrbird.febs.mall.dto.*; @@ -15,6 +14,7 @@ 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.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.vo.*; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; @@ -24,6 +24,7 @@ import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -58,6 +59,10 @@ private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final MallShopApplyMapper mallShopApplyMapper; private final MallRegisterAppealMapper mallRegisterAppealMapper; + private final MallMemberBankMapper mallMemberBankMapper; + private final IApiMallMemberWalletService memberWalletService; + private final MallMemberStarBuyMapper mallMemberStarBuyMapper; + private final IMallMoneyFlowService mallMoneyFlowService; @Value("${spring.profiles.active}") @@ -68,7 +73,7 @@ public FebsResponse register(RegisterDto registerDto) { MallMember mallMember = this.baseMapper.selectInfoByAccount(registerDto.getAccount()); if (mallMember != null) { - throw new FebsException("该账号已被占用"); + throw new FebsException("该账号已被使用"); } List<MallMember> mallMembers = this.baseMapper.selectMemberByName(registerDto.getName()); @@ -80,10 +85,12 @@ } String account = registerDto.getAccount(); - String code = registerDto.getCode(); - boolean flags = commonService.verifyCode(account, code); - if(!flags) { - throw new FebsException("验证码错误"); + if (!"admin".equals(registerDto.getRegistType())) { + String code = registerDto.getCode(); + boolean flags = commonService.verifyCode(account, code); + if (!flags) { + throw new FebsException("验证码错误"); + } } mallMember = new MallMember(); @@ -109,7 +116,10 @@ mallMember.setName(registerDto.getName()); mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); - mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name()); + //会员等级 + mallMember.setAccountLevel(MemberAccountLevelEnum.NORMAL.getName()); + //代理等级 + mallMember.setLevel(MemberAgentLevelEnum.AGENT.getName()); mallMember.setSex("男"); mallMember.setBindPhone(registerDto.getAccount()); @@ -236,15 +246,24 @@ mallMemberVo.setHasPayment(1); } - DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.AGENT_LEVEL, mallMember.getLevel()); - if (dic != null) { - mallMemberVo.setLevelName(dic.getDescription()); - } +// DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.AGENT_LEVEL, mallMember.getLevel()); +// if (dic != null) { +// mallMemberVo.setLevelName(dic.getDescription()); +// } MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberVo.getId()); mallMemberVo.setBalance(wallet.getBalance()); mallMemberVo.setScore(wallet.getScore()); mallMemberVo.setPrizeScore(wallet.getPrizeScore()); mallMemberVo.setTotalCost(mallOrderInfoMapper.selectTotalAmount(id)); + //提现冻结金额 + BigDecimal froBalance = mallMoneyFlowMapper.selectSumAmountByStatusAndMemberId(MallMoneyFlow.STATUS_ING, id); + mallMemberVo.setFroBalance(froBalance); + //剩余保证金 + BigDecimal avaAmount = mallMemberStarBuyMapper.selectSumAvaAmountByStatusAndMemberId(1,id); + mallMemberVo.setAvaAmount(avaAmount); + String accountLevel = mallMemberVo.getAccountLevel(); + Integer memberLevelCode = MemberAccountLevelEnum.NORMAL.getMemberLevelCode(accountLevel); + mallMemberVo.setAccountLevelCode(memberLevelCode); return new FebsResponse().success().data(mallMemberVo); } @@ -313,23 +332,12 @@ MallMember mallMember = this.baseMapper.selectById(memberId); List<TeamListVo> list = this.baseMapper.selectTeamListByInviteId(mallMember.getInviteId()); -// BigDecimal ownAmount = this.baseMapper.selectOwnOrderAmountByInviteId(mallMember.getInviteId()); -// TeamListVo own = new TeamListVo(); -// own.setCreatedTime(mallMember.getCreatedTime()); -// own.setAmount(ownAmount); -// own.setName(mallMember.getName()); -// own.setPhone(mallMember.getPhone()); -// own.setInviteId(mallMember.getInviteId()); -// own.setIsCurrent(1); -// own.setCnt(this.baseMapper.selectOwnCntByInviteId(mallMember.getInviteId())); -// own.setOrderCnt(this.baseMapper.selectOwnOrderCntByInviteId(mallMember.getInviteId())); -// own.setId(mallMember.getId()); MyTeamVo myTeamVo = new MyTeamVo(); myTeamVo.setTeam(list); - myTeamVo.setMyAchieve(this.baseMapper.selectAchieveByMemberId(mallMember.getInviteId(), 1)); + myTeamVo.setMyAchieve(mallOrderInfoMapper.selectTotalAmount(memberId)); myTeamVo.setMyTeamAchieve(this.baseMapper.selectAchieveByMemberId(mallMember.getInviteId(), 2)); - myTeamVo.setMyTeamCnt(list.size()); + myTeamVo.setMyTeamCnt(this.baseMapper.selectAllChildAgentListByInviteId(mallMember.getInviteId()).size()); return new FebsResponse().success().data(myTeamVo); } @@ -386,11 +394,34 @@ } 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, FlowTypeEnum.BALANCE.getValue()); - + String orderNo = MallUtils.getOrderNum("NZ"); +// this.addMoneyFlow(memberId, transferDto.getAmount().negate(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, mallMember.getId(), null, FlowTypeEnum.BALANCE.getValue()); + //生成流水 + Long outFlowId = mallMoneyFlowService.addMoneyFlow( + memberId, + orderNo, + transferDto.getAmount().negate(), + MallMoneyFlowTypeEnum.WITHDRAW_INSIDE.getCode(), + MallMoneyFlow.STATUS_SUCCESS, + MallMoneyFlow.IS_RETURN_Y, + memberId, + FlowTypeEnum.BALANCE.getValue(), + MallMoneyFlowTypeEnum.WITHDRAW_INSIDE.getName() + ); walletService.addBalance(transferDto.getAmount(), mallMember.getId()); - this.addMoneyFlow(mallMember.getId(), transferDto.getAmount(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, memberId, null, FlowTypeEnum.BALANCE.getValue()); + //生成流水 + Long inFlowId = mallMoneyFlowService.addMoneyFlow( + mallMember.getId(), + orderNo, + transferDto.getAmount(), + MallMoneyFlowTypeEnum.WITHDRAW_INSIDE.getCode(), + MallMoneyFlow.STATUS_SUCCESS, + MallMoneyFlow.IS_RETURN_Y, + mallMember.getId(), + FlowTypeEnum.BALANCE.getValue(), + MallMoneyFlowTypeEnum.WITHDRAW_INSIDE.getName() + ); +// this.addMoneyFlow(mallMember.getId(), transferDto.getAmount(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, memberId, null, FlowTypeEnum.BALANCE.getValue()); } @Override @@ -431,14 +462,8 @@ 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); - } - } + canMoney = canMoney.compareTo(BigDecimal.ZERO) > 0 ? canMoney : BigDecimal.ZERO; return canMoney; } @@ -551,4 +576,175 @@ } return MallShopApplyConversion.INSTANCE.entitiesToVOs(list); } + + @Override + @Transactional + public FebsResponse addMemberBank(AddMemberBankDto addMemberBankDto) { + MallMember member = LoginUserUtil.getLoginUser(); + MallMemberBank mallMemberBank = MallMemberBankConversion.INSTANCE.dtoToentity(addMemberBankDto); + mallMemberBank.setMemberId(member.getId()); + mallMemberBankMapper.insert(mallMemberBank); + return new FebsResponse().success(); + } + + @Override + public FebsResponse findMemberBankList(MemberBankListDto memberBankListDto) { + MallMember member = LoginUserUtil.getLoginUser(); + Page<MemberBankListVo> page = new Page<>(memberBankListDto.getPageNum(), memberBankListDto.getPageSize()); + memberBankListDto.setMemberId(member.getId()); + IPage<MemberBankListVo> pageResult = mallMemberBankMapper.findMemberBankListInPage(memberBankListDto, page); + return new FebsResponse().success().data(pageResult); + } + + @Override + public FebsResponse findBankDetailsById(Long id) { + MallMemberBank mallMemberBank = mallMemberBankMapper.selectById(id); + MemberBankListVo memberBankListVo = MallMemberBankConversion.INSTANCE.entityToVo(mallMemberBank); + return new FebsResponse().success().data(memberBankListVo); + } + + @Override + @Transactional + public FebsResponse updateMemberBank(UpdateMemberBankDto updateMemberBankDto) { + Long id = updateMemberBankDto.getId(); + MallMemberBank mallMemberBank = mallMemberBankMapper.selectById(id); + mallMemberBank.setBankNo(updateMemberBankDto.getBankNo()); + mallMemberBankMapper.updateById(mallMemberBank); + return new FebsResponse().success(); + } + + @Override + @Transactional + public FebsResponse delMemberBank(Long id) { + mallMemberBankMapper.deleteById(id); + return new FebsResponse().success(); + } + + @Override + public List<ApiMallMemberStarVo> getMemberStarMarketList() { + List<ApiMallMemberStarVo> apiMallMemberStarVos = new ArrayList<>(); + List<DataDictionaryCustom> memberStarMarketDicList = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.ONE_STAR.getType()); + if(CollUtil.isNotEmpty(memberStarMarketDicList)){ + for(DataDictionaryCustom memberStarMarketDic : memberStarMarketDicList){ + ApiMallMemberStarVo apiMallMemberStarVo = new ApiMallMemberStarVo(); + apiMallMemberStarVo.setName(memberStarMarketDic.getDescription()); + apiMallMemberStarVo.setCode(memberStarMarketDic.getCode()); + String value = memberStarMarketDic.getValue(); + cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(value); + String price = jsonObject.get("price").toString(); + String status = jsonObject.get("status").toString(); + apiMallMemberStarVo.setPrice(new BigDecimal(price).setScale(2,BigDecimal.ROUND_DOWN)); + apiMallMemberStarVo.setStatus(Integer.parseInt(status)); + apiMallMemberStarVos.add(apiMallMemberStarVo); + } + } + return apiMallMemberStarVos; + } + + @Override + @Transactional + public FebsResponse buyMemberStar(ApiBuyMemberStarDto apiBuyMemberStarDto) { + MallMember member = LoginUserUtil.getLoginUser(); + /** + * 判断用户当前的星级 + */ + MallMember mallMember = this.baseMapper.selectById(member.getId()); + //用户当前的星级 + String accountLevel = mallMember.getAccountLevel(); + Integer memberLevelCode = MemberAccountLevelEnum.NORMAL.getMemberLevelCode(accountLevel); + //星级市场的星级参数 + String buyStarCode = apiBuyMemberStarDto.getCode(); + DataDictionaryCustom buyStarCodeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.ONE_STAR.getType(), + buyStarCode + ); + if(ObjectUtil.isEmpty(buyStarCodeDic)){ + throw new FebsException("请选择正确的星级"); + } + String buyStarValue = buyStarCodeDic.getValue(); + cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(buyStarValue); + String buyStarPrice = jsonObject.get("price").toString(); + String buyStarStatus = jsonObject.get("status").toString(); + if(1 != Integer.parseInt(buyStarStatus)){ + throw new FebsException("当前未开放购买"); + } + + String buyStarDescription = buyStarCodeDic.getDescription(); + Integer buyStarLevelCode = MemberAccountLevelEnum.NORMAL.getMemberLevelCode(buyStarDescription); + //判断用户星级和购买星级关系,无法购买当前用户已拥有及其以下的星级 + if(memberLevelCode >= buyStarLevelCode){ + throw new FebsException("请不要重复购买"); + } + //支付 + String tradePassword = apiBuyMemberStarDto.getTradePassword(); + if (StrUtil.isBlank(tradePassword)) { + throw new FebsException("支付密码错误"); + } + if (StrUtil.isBlank(mallMember.getTradePassword())) { + throw new FebsException("未设置支付密码"); + } + if (!SecureUtil.md5(tradePassword).equals(mallMember.getTradePassword())) { + throw new FebsException("支付密码错误"); + } + BigDecimal buyStarPriceBigDecimal = new BigDecimal(buyStarPrice).setScale(2, BigDecimal.ROUND_DOWN); + int reduce = memberWalletService.reduce(buyStarPriceBigDecimal, mallMember.getId(), "balance"); + if (reduce == 2) { + throw new FebsException("余额不足"); + } + //产生用户升级会员等级记录 + MallMemberStarBuy mallMemberStarBuy = new MallMemberStarBuy(); + mallMemberStarBuy.setMemberId(mallMember.getId()); + mallMemberStarBuy.setBuyCode(MallUtils.getLogisticsNum("MS")); + mallMemberStarBuy.setStarName(buyStarDescription); + mallMemberStarBuy.setStarCode(buyStarCode); + mallMemberStarBuy.setAmount(buyStarPriceBigDecimal); + mallMemberStarBuy.setAvaAmount(buyStarPriceBigDecimal); + mallMemberStarBuy.setStatus(1); + mallMemberStarBuyMapper.insert(mallMemberStarBuy); + //产生支付流水 + Long subsidyAmountFlowId = mallMoneyFlowService.addMoneyFlow( + mallMember.getId(), + mallMemberStarBuy.getBuyCode(), + buyStarPriceBigDecimal.negate(), + MallMoneyFlowTypeEnum.BUY_MARKET_STAR.getCode(), + MallMoneyFlow.STATUS_SUCCESS, + MallMoneyFlow.IS_RETURN_Y, + mallMember.getId(), + FlowTypeEnum.BALANCE.getValue(), + MallMoneyFlowTypeEnum.BUY_MARKET_STAR.getName() + ); + //更新会员星级 + this.baseMapper.updateAccountLevelById(buyStarDescription,mallMember.getId()); + + //直推返利 + if(StrUtil.isNotEmpty(mallMember.getReferrerId())){ + //下单人的直推上级 + MallMember mallMemberOne = this.baseMapper.selectInfoByInviteId(mallMember.getReferrerId()); + //生成直推返利的流水记录 + if(ObjectUtil.isNotEmpty(mallMemberOne)){ + DataDictionaryCustom rewardPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.REWARD_PERCENT.getType(), + DataDictionaryEnum.REWARD_PERCENT.getCode() + ); + buyStarPriceBigDecimal = buyStarPriceBigDecimal.compareTo(BigDecimal.ZERO) > 0 ? buyStarPriceBigDecimal : BigDecimal.ZERO; + BigDecimal rewardPercent = new BigDecimal(rewardPercentDic.getValue()).multiply(new BigDecimal(0.01)).setScale(2,BigDecimal.ROUND_DOWN); + BigDecimal directRewardAmount = buyStarPriceBigDecimal.multiply(rewardPercent).setScale(4, BigDecimal.ROUND_DOWN); + + Long marketSubsidyFlowId = mallMoneyFlowService.addMoneyFlow( + mallMember.getId(), + mallMemberStarBuy.getBuyCode(), + directRewardAmount, + MallMoneyFlowTypeEnum.DIRECT_REWARD.getCode(), + MallMoneyFlow.STATUS_SUCCESS, + MallMoneyFlow.IS_RETURN_Y, + mallMemberOne.getId(), + FlowTypeEnum.BALANCE.getValue(), + MallMoneyFlowTypeEnum.DIRECT_REWARD.getName() + ); + memberWalletService.addBalance(directRewardAmount,mallMemberOne.getId()); + } + } + + return new FebsResponse().success(); + } } -- Gitblit v1.9.1