From 3e39512dfde0035f556f177dac58052baf686853 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Tue, 30 Jan 2024 15:38:42 +0800 Subject: [PATCH] 一代5%是他入金额的5% 团队5%是团队收益的5% --- src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 159 +++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 118 insertions(+), 41 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 eb22f3b..2640d2a 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 @@ -20,6 +20,7 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -862,9 +863,10 @@ mallProductBuy.setMateState(ProductEnum.PRODUCT_BUY_MATE_STATE_SUCCESS.getValue()); mallProductBuyMapper.updateById(mallProductBuy); BigDecimal nftTotal = mallProductBuy.getNftTotal(); - insertSell(mallProductBuy.getMemberId(),nftTotal,nftTotal,BigDecimal.ZERO,BigDecimal.ZERO); BigDecimal profit = nftTotal.multiply(profitPercent.multiply(new BigDecimal(0.01))); - insertSell(mallProductBuy.getMemberId(),profit,profit,BigDecimal.ZERO,BigDecimal.ZERO); + BigDecimal add = nftTotal.add(profit); + insertSell(mallProductBuy.getMemberId(),add,add,BigDecimal.ZERO,BigDecimal.ZERO); +// insertSell(mallProductBuy.getMemberId(),profit,profit,BigDecimal.ZERO,BigDecimal.ZERO); /** * 更新用户上级收益,冻结7天,7天时间到期自动释放到动态钱包 @@ -880,7 +882,8 @@ DataDictionaryEnum.BASIC_PERK_DIRECT.getType(), DataDictionaryEnum.BASIC_PERK_DIRECT.getCode() ).getValue()).multiply(new BigDecimal("0.01")); - BigDecimal basicPerkDirect = profit.multiply(basicPerkDirectPercent).setScale(2, BigDecimal.ROUND_DOWN); +// BigDecimal basicPerkDirect = profit.multiply(basicPerkDirectPercent).setScale(2, BigDecimal.ROUND_DOWN); + BigDecimal basicPerkDirect = nftTotal.multiply(basicPerkDirectPercent).setScale(2, BigDecimal.ROUND_DOWN); /** * 先插入流水记录,然后定时器每小时,循环一次找寻对应的数据执行 */ @@ -914,46 +917,51 @@ while (!flag) { MallMember mallMemberRef = memberMapper.selectInfoByInviteId(parentId); String levelRef = mallMemberRef.getLevel(); - int compareLevel = MemberLevelNewEnum.ZERO_LEVEL.compareLevel(level, levelRef); - DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( - levelRef, levelRef - ); - TeamPerkDto teamPerkDto = JSONObject.parseObject(dataDictionaryCustom.getValue(), TeamPerkDto.class); - if(compareLevel == 0){//团队奖励 - BigDecimal PerkPercent = new BigDecimal(teamPerkDto.getPerkPercent()); - BigDecimal teamPerk = PerkPercent.multiply(profit).setScale(2,BigDecimal.ROUND_DOWN); - /** - * 先插入流水记录,然后定时器循环,找寻对应的数据执行 - */ - String orderNo = MallUtils.getOrderNum("TNFT"); + //会员等级为ZERO_LEVEL,则不参与团队返佣 + if(!MemberLevelNewEnum.ZERO_LEVEL.getType().equals(levelRef)){ + int compareLevel = MemberLevelNewEnum.ZERO_LEVEL.compareLevel(level, levelRef); + DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + levelRef, levelRef + ); + TeamPerkDto teamPerkDto = JSONObject.parseObject(dataDictionaryCustom.getValue(), TeamPerkDto.class); + if(compareLevel == 0){//团队奖励 + BigDecimal PerkPercent = new BigDecimal(teamPerkDto.getPerkPercent()) + .multiply(new BigDecimal("0.01")); + BigDecimal teamPerk = PerkPercent.multiply(profit).setScale(2,BigDecimal.ROUND_DOWN); + /** + * 先插入流水记录,然后定时器循环,找寻对应的数据执行 + */ + String orderNo = MallUtils.getOrderNum("TNFT"); - if(teamPerk.compareTo(BigDecimal.ZERO) > 0){ - insertFlowUpdateFrozenNft( - orderNo, - mallMemberRef.getId(), - teamPerk, - MoneyFlowTypeNewEnum.TEAM_PERK_DIRECT.getValue(), - FlowTypeNewEnum.NFT.getValue(), - MoneyFlowTypeNewEnum.TEAM_PERK_DIRECT.getDescrition(), - AppContants.MEMBER_FLOW_ING); + if(teamPerk.compareTo(BigDecimal.ZERO) > 0){ + insertFlowUpdateFrozenNft( + orderNo, + mallMemberRef.getId(), + teamPerk, + MoneyFlowTypeNewEnum.TEAM_PERK_DIRECT.getValue(), + FlowTypeNewEnum.NFT.getValue(), + MoneyFlowTypeNewEnum.TEAM_PERK_DIRECT.getDescrition(), + AppContants.MEMBER_FLOW_ING); + } + equalsPerkBasic = teamPerk; + level = levelRef; + }else if(compareLevel == 2){//平级奖励 + BigDecimal equalsPerkPercent = new BigDecimal(teamPerkDto.getEqualsPerkPercent()) + .multiply(new BigDecimal("0.01")); + BigDecimal equalsPerk = equalsPerkPercent.multiply(equalsPerkBasic).setScale(2,BigDecimal.ROUND_DOWN); + String orderNo = MallUtils.getOrderNum("PJNFT"); + if(equalsPerk.compareTo(BigDecimal.ZERO) > 0){ + insertFlowUpdateFrozenNft( + orderNo, + mallMemberRef.getId(), + equalsPerk, + MoneyFlowTypeNewEnum.TEAM_PERK_EQUALS.getValue(), + FlowTypeNewEnum.NFT.getValue(), + MoneyFlowTypeNewEnum.TEAM_PERK_EQUALS.getDescrition(), + AppContants.MEMBER_FLOW_ING); + } + equalsPerkBasic = equalsPerk; } - equalsPerkBasic = teamPerk; - level = levelRef; - }else if(compareLevel == 2){//平级奖励 - BigDecimal equalsPerkPercent = new BigDecimal(teamPerkDto.getEqualsPerkPercent()); - BigDecimal equalsPerk = equalsPerkPercent.multiply(equalsPerkBasic).setScale(2,BigDecimal.ROUND_DOWN); - String orderNo = MallUtils.getOrderNum("PJNFT"); - if(equalsPerk.compareTo(BigDecimal.ZERO) > 0){ - insertFlowUpdateFrozenNft( - orderNo, - mallMemberRef.getId(), - equalsPerk, - MoneyFlowTypeNewEnum.TEAM_PERK_EQUALS.getValue(), - FlowTypeNewEnum.NFT.getValue(), - MoneyFlowTypeNewEnum.TEAM_PERK_EQUALS.getDescrition(), - AppContants.MEMBER_FLOW_ING); - } - equalsPerkBasic = equalsPerk; } parentId = mallMemberRef.getReferrerId(); if (StrUtil.isBlank(mallMemberRef.getReferrerId())) { @@ -1345,6 +1353,75 @@ } } + @Override + public void memberLevelUp() { + /** + * 获取当前所有的已完成、未转换的买单的用户 + */ + QueryWrapper<MallProductBuy> query = new QueryWrapper<>(); + query.eq("state",ProductEnum.PRODUCT_BUY_SUCCESS.getValue()); + query.eq("mate_state",ProductEnum.PRODUCT_BUY_MATE_STATE_FAIL.getValue()); + List<MallProductBuy> mallProductBuys = mallProductBuyMapper.selectList(query); + if(CollUtil.isEmpty(mallProductBuys)){ + return; + } + + Set<Long> collect = mallProductBuys.stream().map(MallProductBuy::getMemberId).collect(Collectors.toSet()); + if(CollUtil.isEmpty(collect)){ + return; + } + for(Long memberId : collect){ + MallMember mallMember = memberMapper.selectById(memberId); + if(ObjectUtil.isEmpty(mallMember)){ + continue; + } + //上级 + String referrerId = mallMember.getReferrerId(); + MallMember mallMemberRef = memberMapper.selectInfoByInviteId(referrerId); + List<MallMember> mallMembersAll = memberMapper.selectAllChildAgentListByInviteId(referrerId); + + List<MallMember> mallMembers = memberMapper.selectByRefererId(referrerId); + Set<Long> mallMembersSet = mallMembers.stream().map(MallMember::getId).collect(Collectors.toSet()); + mallMembersSet.retainAll(collect); + List<Long> intersection = new ArrayList<>(mallMembersSet);//上级直推有效人数 + if(CollUtil.isEmpty(intersection)){ + mallMemberRef.setLevel(MemberLevelNewEnum.ZERO_LEVEL.getType()); + memberMapper.updateById(mallMemberRef); + continue; + } + /** + * 从会员等级最低到最高,比较intersection与会员设置的直推人数directCntLevel比较 + * directCntLevel >= intersection.size(),则满足升级会员等级条件,跳出循环 + * teamCnt >= mallMembersAll.size(),则满足升级会员等级条件,跳出循环 + * 达到最高级别后,升级会员等级,跳出循环 + */ + String level = MemberLevelNewEnum.ZERO_LEVEL.getType(); + boolean flag = false; + while (!flag){ + DataDictionaryCustom levelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + level, level + ); + TeamPerkDto teamPerkDto = JSONObject.parseObject(levelDic.getValue(), TeamPerkDto.class); + Integer directCntLevel = teamPerkDto.getDirectCnt(); + Integer teamCnt = teamPerkDto.getTeamCnt(); + if(directCntLevel >= intersection.size() && + teamCnt >= mallMembersAll.size()){ + mallMemberRef.setLevel(level); + memberMapper.updateById(mallMemberRef); + flag = true; + } + String nextLevel = MemberLevelNewEnum.ZERO_LEVEL.getNextLevel(level); + level = nextLevel; + if(level.equals(MemberLevelNewEnum.WU_LEVEL.getType()) && + nextLevel.equals(MemberLevelNewEnum.WU_LEVEL.getType()) ){ + mallMemberRef.setLevel(level); + memberMapper.updateById(mallMemberRef); + flag = true; + } + } + } + } + public void insertSell(Long memberId,BigDecimal nftCnt,BigDecimal nftCntAva, BigDecimal nftFee,BigDecimal fcmFeeCnt){ String orderNo = MallUtils.getOrderNum("NFT"); -- Gitblit v1.9.1