From a7c6abad7c9e59285542156c40081fa54e2df2de Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Tue, 20 Dec 2022 17:20:23 +0800 Subject: [PATCH] 20221220 1、每天两点会员星级保证金返还任务 2、每天两点半会员星级更新任务 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 186 +++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 164 insertions(+), 22 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 2125d43..a642ecc 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}") @@ -111,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()); @@ -238,10 +246,10 @@ 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()); @@ -315,23 +323,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.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); } @@ -435,7 +432,7 @@ MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); BigDecimal profit = mallMoneyFlowMapper.selectProfitByDateAndMemberId(memberId); - BigDecimal canMoney = wallet.getBalance(); + BigDecimal canMoney = wallet.getCommission(); if (profit != null) { if(canMoney.compareTo(BigDecimal.ZERO) > 0) { canMoney = canMoney.subtract(profit); @@ -553,4 +550,149 @@ } 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.setName(updateMemberBankDto.getName()); + mallMemberBank.setIdType(updateMemberBankDto.getIdType()); + mallMemberBank.setIdCardNum(updateMemberBankDto.getIdCardNum()); + mallMemberBank.setBankNo(updateMemberBankDto.getBankNo()); + mallMemberBank.setPhone(updateMemberBankDto.getPhone()); + 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(BigDecimal.ROUND_DOWN,2)); + 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(BigDecimal.ROUND_DOWN, 2); + 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()); + return new FebsResponse().success(); + } } -- Gitblit v1.9.1