From 0a6e3fcaa4850d319c4cfeb60b96c255eb476075 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Wed, 31 Jan 2024 11:04:40 +0800 Subject: [PATCH] 会员列表增加波卷功能 --- src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 121 +++++++++++++++++++++++++++++++--------- 1 files changed, 94 insertions(+), 27 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java index 8912e6b..361081e 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java @@ -57,6 +57,7 @@ private final IMallMoneyFlowService mallMoneyFlowService; private final MallMemberClassMapper mallMemberClassMapper; private final MallMemberHouseMapper mallMemberHouseMapper; + private final MallMoneyFlowMapper mallMoneyFlowMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -350,7 +351,25 @@ } Long memberId = mallOrderInfo.getMemberId(); MallMember mallMember = memberMapper.selectById(memberId); - + /** + * 用户是否满足最低消费,满足则升级成为会员,可以邀请用户,并且查看会员商城 + */ + Integer isMember = mallMember.getIsMember(); + if(AppContants.MEMBER_STATE_NO == isMember){ + List<MallOrderInfo> mallOrderInfos = mallOrderInfoMapper.selectOrderInfoByStatus(OrderStatusEnum.FINISH.getValue()); + if(CollUtil.isNotEmpty(mallOrderInfos)){ + DataDictionaryCustom minAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.MIN_AMOUNT_IS_MEMBER.getType(), + DataDictionaryEnum.MIN_AMOUNT_IS_MEMBER.getCode() + ); + BigDecimal minAmount = new BigDecimal(minAmountDic.getValue());//系统设置的累计消费金额 + BigDecimal accumulateAmount = mallOrderInfos.stream().map(MallOrderInfo::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);//累计消费金额 + if(minAmount.compareTo(accumulateAmount) <= 0){//用户累计消费大于系统设置的累计消费 + mallMember.setIsMember(AppContants.MEMBER_STATE_YES); + memberMapper.updateById(mallMember); + } + } + } List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(mallOrderInfo.getId()); if(CollUtil.isEmpty(mallOrderItemList)){ @@ -365,21 +384,69 @@ */ //是否返利 BigDecimal amountBigDecimal = new BigDecimal(StrUtil.isEmpty(amount) ? "0" : amount); + BigDecimal parentUpAmount = BigDecimal.ZERO; if(BigDecimal.ZERO.compareTo(amountBigDecimal) < 0){ if(ObjectUtil.isNotEmpty(mallMember.getReferrerId())){ String referrerId = mallMember.getReferrerId(); MallMember mallMemberParent = memberMapper.selectInfoByInviteId(referrerId); Long id = mallMemberParent.getId(); - DataDictionaryCustom returnPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( - DataDictionaryEnum.MEMBER_RETURN_PERCENT.getType(), - DataDictionaryEnum.MEMBER_RETURN_PERCENT.getCode() - ); - String returnPercentStr = StrUtil.isNotEmpty(returnPercentDic.getValue()) ? "1" : returnPercentDic.getValue(); - BigDecimal returnPercent = new BigDecimal(returnPercentStr).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN); - BigDecimal amountActual = amountBigDecimal.multiply(returnPercent).setScale(2, BigDecimal.ROUND_DOWN); - memberWalletService.add(amountActual, id, "balance"); - mallMoneyFlowService.addMoneyFlow(id, amountActual, MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(), - mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); + + MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectOneByOrderNoAndMemberIdAndRtMemberId(mallOrderInfo.getOrderNo(), memberId, id); + if(ObjectUtil.isEmpty(mallMoneyFlow)){ + DataDictionaryCustom returnPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.MEMBER_RETURN_PERCENT.getType(), + DataDictionaryEnum.MEMBER_RETURN_PERCENT.getCode() + ); + String returnPercentStr = StrUtil.isEmpty(returnPercentDic.getValue()) ? "10" : returnPercentDic.getValue(); + BigDecimal returnPercent = new BigDecimal(returnPercentStr).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN); + BigDecimal amountActual = amountBigDecimal.multiply(returnPercent).setScale(2, BigDecimal.ROUND_DOWN); + + mallMoneyFlowService.addMoneyFlow( + id, + amountActual, + MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(), + mallOrderInfo.getOrderNo(), + "直推奖", + "直推奖", + mallMember.getId(), + 1, + FlowTypeEnum.BALANCE.getValue(), + 2); + parentUpAmount = amountActual; + } + + /** + * 拿下一级(直推的)收入的百分之五十 + */ + if(ObjectUtil.isNotEmpty(mallMemberParent.getReferrerId())){ + String referrerIdParentUp = mallMemberParent.getReferrerId(); + MallMember mallMemberParentUp = memberMapper.selectInfoByInviteId(referrerIdParentUp); + Long idParentUp = mallMemberParentUp.getId(); + MallMoneyFlow mallMoneyFlowParentUp = mallMoneyFlowMapper.selectOneByOrderNoAndMemberIdAndRtMemberId(mallOrderInfo.getOrderNo() + , idParentUp + , id); + if(ObjectUtil.isEmpty(mallMoneyFlowParentUp)){ + DataDictionaryCustom returnPercentUpDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.MEMBER_RETURN_PERCENT_UP.getType(), + DataDictionaryEnum.MEMBER_RETURN_PERCENT_UP.getCode() + ); + String returnPercentUpStr = StrUtil.isEmpty(returnPercentUpDic.getValue()) ? "50" : returnPercentUpDic.getValue(); + BigDecimal returnPercentUp = new BigDecimal(returnPercentUpStr).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN); + BigDecimal amountActualUp = parentUpAmount.multiply(returnPercentUp).setScale(2, BigDecimal.ROUND_DOWN); + + mallMoneyFlowService.addMoneyFlow( + idParentUp, + amountActualUp, + MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(), + mallOrderInfo.getOrderNo(), + "直推奖", + "直推奖", + id, + 1, + FlowTypeEnum.BALANCE.getValue(), + 2); + } + } } } for(MallOrderItem mallOrderItem : mallOrderItemList){ @@ -391,23 +458,23 @@ if(ObjectUtil.isNotEmpty(mallGoods.getIsUnreal()) && 1 == mallGoods.getIsUnreal()){ mallOrderInfo.setStatus(OrderStatusEnum.FINISH.getValue()); mallOrderInfoMapper.updateById(mallOrderInfo); - } - //是否送券 1:是 2:否 - BigDecimal levelTwoPrice = mallGoods.getLevelTwoPrice(); - if(BigDecimal.ONE.compareTo(levelTwoPrice) == 0){ - MallRollPerk mallRollPerk = new MallRollPerk(); - mallRollPerk.setMemberId(memberId); - mallRollPerk.setState(1); - mallRollPerk.setRollId(mallGoods.getLevelThreePrice().longValue()); - mallRollPerkMapper.insert(mallRollPerk); - } - //赠送积分 - BigDecimal levelOnePrice = mallGoods.getLevelOnePrice(); - if(BigDecimal.ZERO.compareTo(levelOnePrice) <= 0){ - memberWalletService.add(levelOnePrice, memberId, "score"); + //是否送券 1:是 2:否 + BigDecimal levelTwoPrice = mallGoods.getLevelTwoPrice(); + if(BigDecimal.ONE.compareTo(levelTwoPrice) == 0){ + MallRollPerk mallRollPerk = new MallRollPerk(); + mallRollPerk.setMemberId(memberId); + mallRollPerk.setState(1); + mallRollPerk.setRollId(mallGoods.getLevelThreePrice().longValue()); + mallRollPerkMapper.insert(mallRollPerk); + } + //赠送积分 + BigDecimal levelOnePrice = mallGoods.getLevelOnePrice(); + if(BigDecimal.ZERO.compareTo(levelOnePrice) <= 0){ + memberWalletService.add(levelOnePrice, memberId, "score"); - mallMoneyFlowService.addMoneyFlow(memberId, levelOnePrice, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), - mallOrderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue(),"赠送积分",2); + mallMoneyFlowService.addMoneyFlow(memberId, levelOnePrice, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), + mallOrderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue(),"赠送积分",2); + } } } } -- Gitblit v1.9.1