From 2e655cbd32ff32ae5d836ccce7bc34a13ce80ffa Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Mon, 10 Apr 2023 21:57:45 +0800 Subject: [PATCH] 后台修改 --- src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 162 +++++++++++++++++--------------- src/main/resources/mapper/modules/MallMemberWalletMapper.xml | 2 src/test/java/cc/mrbird/febs/ProfitTest.java | 3 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 73 +++++++++----- src/main/resources/mapper/modules/MallMemberMapper.xml | 2 src/main/resources/mapper/modules/MallMoneyFlowMapper.xml | 2 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 10 +- 7 files changed, 140 insertions(+), 114 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 194a485..39212ca 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 @@ -50,14 +50,9 @@ List<String> ids = StrUtil.split(member.getReferrerIds(), ','); List<MallMember> parentMembers = memberMapper.selectByInviteIds(ids); for (MallMember parent : parentMembers) { - /** - * 升级到董事就无法升级了 - */ - String nextLevelName = MemberLevelEnum.NORMAL.getNextLevel(parent.getLevel()); - int levelCode = MemberLevelEnum.NORMAL.getLevelCode(nextLevelName); - if(levelCode == 8){ - //level为v6,升级董事,则看团队下有没有两个V6 - List<MallMember> mallMemberTeamMembers = memberMapper.selectAllChildAgentListByInviteId(parent.getInviteId()); + //level为v6,升级董事,则看团队下有没有两个V6 + List<MallMember> mallMemberTeamMembers = memberMapper.selectAllChildAgentListByInviteId(parent.getInviteId()); + if(CollUtil.isNotEmpty(mallMemberTeamMembers)){ List<MallMember> levelV6List = mallMemberTeamMembers.stream() .filter(teamMember -> teamMember.getLevel().equals(MemberLevelEnum.V6.getType())) .collect(Collectors.toList()); @@ -68,6 +63,12 @@ } continue; } + + /** + * 升级到董事就无法升级了 + */ + String nextLevelName = MemberLevelEnum.NORMAL.getNextLevel(parent.getLevel()); + int levelCode = MemberLevelEnum.NORMAL.getLevelCode(nextLevelName); DataDictionaryCustom newLevelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("AGENT_PERK_SET", nextLevelName); @@ -294,84 +295,91 @@ */ if(StrUtil.isNotEmpty(mallMember.getReferrerIds())){ //团队补贴对象 - List<MallMember> mallMemberTeamPerk = new ArrayList<>(); +// List<MallMember> mallMemberTeamPerk = new ArrayList<>(); String referrerIds = mallMember.getReferrerIds(); List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ","); if(CollUtil.isNotEmpty(referrerIdList)){ - List<MallMember> mallMembers = mallMemberMapper.selectByInviteIds(referrerIdList); - /** - * 根据等级分组,获取对应的<级别,会员数组>map - */ - Map<String, List<MallMember>> collect = mallMembers.stream().collect(Collectors.groupingBy(MallMember::getLevel)); - Set<String> set = collect.keySet(); // 得到所有key的集合 - for (String key : set) { - /** - * 团队补贴从v1到v6 - */ - int compareMin = MemberLevelEnum.V1.compareLevel(key, MemberLevelEnum.V1.getType()); - int compareMax = MemberLevelEnum.V1.compareLevel(MemberLevelEnum.V6.getType(), key); - if(compareMin >= 1 && compareMax >= 1){ - List<MallMember> value = collect.get(key); - mallMemberTeamPerk.add(value.get(0)); + List<MallMember> mallMemberTeamPerk = mallMemberMapper.selectByInviteIds(referrerIdList); + + if(CollUtil.isNotEmpty(mallMemberTeamPerk)){ + String levelNormal = MemberLevelEnum.V1.getType(); + BigDecimal cashPercentNormal = BigDecimal.ZERO; + BigDecimal scorePercentNormal = BigDecimal.ZERO; + + DataDictionaryCustom poolScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + PerkEnum.POOL_SCORE_PRICE.getType(), + PerkEnum.POOL_SCORE_PRICE.getCode()); + BigDecimal poolScorePrice = new BigDecimal(poolScorePriceDic.getValue() == null ? "1" : poolScorePriceDic.getValue()); + for(MallMember teamPerkMember : mallMemberTeamPerk){ + String level = teamPerkMember.getLevel(); + //比较两个级别的大小,level大于levelNormal返回1 + int compareMin = MemberLevelEnum.V1.compareLevel(level, levelNormal); + int compareMax = MemberLevelEnum.V1.compareLevel(MemberLevelEnum.V6.getType(), level); + if(compareMin >= 1 && compareMax >= 1){ + Long teamPerkMemberId = teamPerkMember.getId(); + DataDictionaryCustom teamPerkMemberDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + "AGENT_PERK_SET", level); + + AdminAgentInfo adminAgentInfo = JSONObject.parseObject(teamPerkMemberDic.getValue(), AdminAgentInfo.class); + BigDecimal cashPercent = adminAgentInfo.getCashPercent().multiply(AppContants.PERCENTAGE); + BigDecimal scorePercent = adminAgentInfo.getScorePercent().multiply(AppContants.PERCENTAGE); + //极差 + cashPercent = cashPercent.subtract(cashPercentNormal); + scorePercent = scorePercent.subtract(scorePercentNormal); + + BigDecimal cashAmount = amountTC.multiply(cashPercent).setScale(2, BigDecimal.ROUND_DOWN); + + //如果是积分,除以当前价格,得到数量。 + BigDecimal scoreCnt = amountTC.multiply(scorePercent).setScale(2, BigDecimal.ROUND_DOWN); + scoreCnt = scoreCnt.divide(poolScorePrice, 2 ,BigDecimal.ROUND_DOWN); + if(cashAmount.compareTo(BigDecimal.ZERO) > 0){ + addWalletInfoAndMoneyFlow(cashAmount, + teamPerkMemberId, + "balance", + MoneyFlowTypeEnum.AGENT_CASH_PERK.getValue(), + memberId, + FlowTypeEnum.BALANCE.getValue(), + orderNo); + } + if(scoreCnt.compareTo(BigDecimal.ZERO) > 0){ + addWalletInfoAndMoneyFlow(scoreCnt, + teamPerkMemberId, + "score", + MoneyFlowTypeEnum.AGENT_SCORE_PERK.getValue(), + memberId, + FlowTypeEnum.SCORE.getValue(), + orderNo); + } + levelNormal = level; + cashPercentNormal = adminAgentInfo.getCashPercent().multiply(AppContants.PERCENTAGE); + scorePercentNormal = adminAgentInfo.getScorePercent().multiply(AppContants.PERCENTAGE); + } } } + +// for(MallMember levelMember : mallMembers){ +// String level = levelMember.getLevel(); +// } +// /** +// * 根据等级分组,获取对应的<级别,会员数组>map todo 目前获取到的levelMember是无序的 +// */ +// Map<String, List<MallMember>> collect = mallMembers.stream().collect(Collectors.groupingBy(MallMember::getLevel)); +// Set<String> set = collect.keySet(); // 得到所有key的集合 +// for (String key : set) { +// /** +// * 团队补贴从v1到v6 +// */ +// int compareMin = MemberLevelEnum.V1.compareLevel(key, MemberLevelEnum.V1.getType()); +// int compareMax = MemberLevelEnum.V1.compareLevel(MemberLevelEnum.V6.getType(), key); +// if(compareMin >= 1 && compareMax >= 1){ +// List<MallMember> value = collect.get(key); +// mallMemberTeamPerk.add(value.get(0)); +// } +// } } - if(CollUtil.isNotEmpty(mallMemberTeamPerk)){ - String levelNormal = MemberLevelEnum.NORMAL.getType(); - BigDecimal cashPercentNormal = BigDecimal.ZERO; - BigDecimal scorePercentNormal = BigDecimal.ZERO; - DataDictionaryCustom poolScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( - PerkEnum.POOL_SCORE_PRICE.getType(), - PerkEnum.POOL_SCORE_PRICE.getCode()); - BigDecimal poolScorePrice = new BigDecimal(poolScorePriceDic.getValue() == null ? "1" : poolScorePriceDic.getValue()); - for(MallMember teamPerkMember : mallMemberTeamPerk){ - String level = teamPerkMember.getLevel(); - //比较两个级别的大小,level大于levelNormal返回1 - int compareLevel = MemberLevelEnum.V1.compareLevel(level, levelNormal); - if(compareLevel == 1){ - Long teamPerkMemberId = teamPerkMember.getId(); - DataDictionaryCustom teamPerkMemberDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( - MemberLevelEnum.V1.getType(), level); - - AdminAgentInfo adminAgentInfo = JSONObject.parseObject(teamPerkMemberDic.getValue(), AdminAgentInfo.class); - BigDecimal cashPercent = adminAgentInfo.getCashPercent().multiply(AppContants.PERCENTAGE); - BigDecimal scorePercent = adminAgentInfo.getScorePercent().multiply(AppContants.PERCENTAGE); - //极差 - cashPercent = cashPercent.subtract(cashPercentNormal); - scorePercent = scorePercent.subtract(scorePercentNormal); - - BigDecimal cashAmount = amountTC.multiply(cashPercent).setScale(2, BigDecimal.ROUND_DOWN); - - //如果是积分,除以当前价格,得到数量。 - BigDecimal scoreCnt = amountTC.multiply(scorePercent).setScale(2, BigDecimal.ROUND_DOWN); - scoreCnt = scoreCnt.divide(poolScorePrice, 2 ,BigDecimal.ROUND_DOWN); - if(cashAmount.compareTo(BigDecimal.ZERO) > 0){ - addWalletInfoAndMoneyFlow(cashAmount, - teamPerkMemberId, - "balance", - MoneyFlowTypeEnum.AGENT_CASH_PERK.getValue(), - memberId, - FlowTypeEnum.BALANCE.getValue(), - orderNo); - } - if(scoreCnt.compareTo(BigDecimal.ZERO) > 0){ - addWalletInfoAndMoneyFlow(scoreCnt, - teamPerkMemberId, - "score", - MoneyFlowTypeEnum.AGENT_SCORE_PERK.getValue(), - memberId, - FlowTypeEnum.SCORE.getValue(), - orderNo); - } - levelNormal = level; - cashPercentNormal = cashPercent; - scorePercentNormal = scorePercent; - } - } - } } /** 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 a29e916..e4348c8 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 @@ -107,16 +107,16 @@ throw new FebsException("邀请码不存在"); } /** - * 设置成普通会员,则不允许推广 + * 设置成粉丝,则不允许推广 */ if(inviteMember.getLevel().equals(MemberLevelEnum.FANS.getType())){ throw new FebsException("邀请码不能推广"); } //购买套餐产生业绩,才能推广会员 - List<MallAchieveRecord> mallAchieveRecordList = mallAchieveRecordMapper.selectByMemberId(inviteMember.getId()); - if(CollUtil.isEmpty(mallAchieveRecordList)){ - throw new FebsException("邀请码不能推广"); - } +// List<MallAchieveRecord> mallAchieveRecordList = mallAchieveRecordMapper.selectByMemberId(inviteMember.getId()); +// if(CollUtil.isEmpty(mallAchieveRecordList)){ +// throw new FebsException("邀请码不能推广"); +// } mallMember.setReferrerId(registerDto.getInviteId()); diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index fb811d4..f979cc0 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java @@ -326,35 +326,10 @@ orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); orderInfo.setPayTime(new Date()); orderInfo.setPayResult("1"); + this.baseMapper.updateById(orderInfo); + //新增业绩,第一次购买套餐则升级用户为普通会员 - boolean hasTc = false; - BigDecimal achieveAmount = BigDecimal.ZERO; - List<MallOrderItem> orderItems = this.baseMapper.getMallOrderItemByOrderId(orderInfo.getId()); - if (CollUtil.isNotEmpty(orderItems)) { - for (MallOrderItem orderItem : orderItems) { - MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId()); - MallGoodsSku sku = mallGoodsSkuMapper.selectById(orderItem.getSkuId()); - if (mallGoods.getIsNormal() == 2) { - hasTc = true; - achieveAmount = achieveAmount.add(sku.getPresentPrice().multiply(new BigDecimal(orderItem.getCnt()))); - } - } - } - - - if (hasTc){ - if(achieveAmount.compareTo(BigDecimal.ZERO) > 0) { - // 添加业绩 - MallAchieveRecord mallAchieveRecord = new MallAchieveRecord(); - mallAchieveRecord.setMemberId(member.getId()); - mallAchieveRecord.setAmount(achieveAmount); - mallAchieveRecord.setAchieveTime(orderInfo.getPayTime()); - mallAchieveRecord.setOrderId(orderInfo.getId()); - mallAchieveRecord.setIsNormal(2); - mallAchieveRecord.setPayTime(orderInfo.getPayTime()); - mallAchieveRecordMapper.insert(mallAchieveRecord); - } - } + addAchieveAndUpdateLevel(orderInfo.getId(),member.getId()); mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue()); agentProducer.sendAutoLevelUpMsg(member.getId()); @@ -451,6 +426,48 @@ return map; } + /** + * 新增业绩,第一次购买套餐则升级用户为普通会员 + * @param orderId + * @param memberId + */ + private void addAchieveAndUpdateLevel(Long orderId,Long memberId){ + MallOrderInfo orderInfo = this.baseMapper.selectById(orderId); + MallMember member = memberMapper.selectById(memberId); + + boolean hasTc = false; + BigDecimal achieveAmount = BigDecimal.ZERO; + List<MallOrderItem> orderItems = this.baseMapper.getMallOrderItemByOrderId(orderId); + if (CollUtil.isNotEmpty(orderItems)) { + for (MallOrderItem orderItem : orderItems) { + MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId()); + MallGoodsSku sku = mallGoodsSkuMapper.selectById(orderItem.getSkuId()); + if (mallGoods.getIsNormal() == 2) { + hasTc = true; + achieveAmount = achieveAmount.add(sku.getPresentPrice().multiply(new BigDecimal(orderItem.getCnt()))); + } + } + } + + if (hasTc){ + if(achieveAmount.compareTo(BigDecimal.ZERO) > 0) { + // 添加业绩 + MallAchieveRecord mallAchieveRecord = new MallAchieveRecord(); + mallAchieveRecord.setMemberId(memberId); + mallAchieveRecord.setAmount(achieveAmount); + mallAchieveRecord.setAchieveTime(orderInfo.getPayTime()); + mallAchieveRecord.setOrderId(orderInfo.getId()); + mallAchieveRecord.setIsNormal(2); + mallAchieveRecord.setPayTime(orderInfo.getPayTime()); + mallAchieveRecordMapper.insert(mallAchieveRecord); + } + if(member.getLevel().equals(MemberLevelEnum.FANS.getType())){ + member.setLevel(MemberLevelEnum.NORMAL.getType()); + memberMapper.updateById(member); + } + } + } + public static void main(String[] args) { String str = "{\"biz_code\":\"JS000000\",\"biz_msg\":\"成功\",\"data\":\"{\\\"order_status\\\":\\\"P2000\\\",\\\"jp_order_no\\\":\\\"100120220826446740396081496064\\\",\\\"err_msg\\\":\\\"短信验证码不符\\\",\\\"err_code\\\":\\\"CP110026\\\",\\\"sign_no\\\":\\\"\\\",\\\"mch_order_no\\\":\\\"NO_2022082618263952399\\\"}\",\"mch_no\":\"888118000001971\",\"rand_str\":\"an2w7ulf5ru6upkk5bdg441kdi3gnpvu\",\"resp_code\":\"SUCCESS\",\"sec_key\":\"\",\"sign\":\"NiJXRTSIZ9xZMUOwEHiEHdZXmgL2cHUU5WUa1NbMRRzui0DIiuZSW4e31LjnBxwVwmy3uuPMP+tqhY8VLyC8uCFOdGdZI7e72VuRvyvaiW7/sqCrsfgPOBEjiGE/CmSMRoEXv9HmqCyNBF6iHSEhQJql5Yge30dQdyB6xFfqjk0=\",\"sign_type\":\"2\"}"; diff --git a/src/main/resources/mapper/modules/MallMemberMapper.xml b/src/main/resources/mapper/modules/MallMemberMapper.xml index 6dbbd6c..62396d3 100644 --- a/src/main/resources/mapper/modules/MallMemberMapper.xml +++ b/src/main/resources/mapper/modules/MallMemberMapper.xml @@ -388,7 +388,7 @@ <where> 1=1 <if test="type == 1"> - and director = 1 + and level= 'V_DIRECTOR' </if> <if test="type == 2"> and store_master = 1 diff --git a/src/main/resources/mapper/modules/MallMemberWalletMapper.xml b/src/main/resources/mapper/modules/MallMemberWalletMapper.xml index 1556a5c..35bbcb1 100644 --- a/src/main/resources/mapper/modules/MallMemberWalletMapper.xml +++ b/src/main/resources/mapper/modules/MallMemberWalletMapper.xml @@ -3,7 +3,7 @@ <mapper namespace="cc.mrbird.febs.mall.mapper.MallMemberWalletMapper"> <select id="selectWalletByMemberId" resultType="cc.mrbird.febs.mall.entity.MallMemberWallet"> - select * from mall_member_wallet where member_id=#{memberId} for update + select * from mall_member_wallet where member_id=#{memberId} </select> <update id="updateBalanceWithVersion"> diff --git a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml index 32503ab..7fecd36 100644 --- a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml +++ b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml @@ -122,7 +122,7 @@ <select id="selectCommissionIncome" resultType="java.math.BigDecimal"> select ifnull(sum(amount),0) from mall_money_flow - where flow_type = #{flowType} and member_id = #{memberId} + where flow_type = #{flowType} and member_id = #{memberId} and amount > 0 <if test="type == 1"> and date_format(created_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d') </if> diff --git a/src/test/java/cc/mrbird/febs/ProfitTest.java b/src/test/java/cc/mrbird/febs/ProfitTest.java index 2530112..2785e7f 100644 --- a/src/test/java/cc/mrbird/febs/ProfitTest.java +++ b/src/test/java/cc/mrbird/febs/ProfitTest.java @@ -42,7 +42,8 @@ @Test public void dynamicProfit() { - memberProfitService.dynamicProfit(21L); +// agentService.returnMoneyToAgent(578L); + agentService.autoUpAgentLevel(640L); } @Test public void agentProfit() { -- Gitblit v1.9.1