|  |  |  | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 升级到董事就无法升级了 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | String nextLevelName = MemberLevelEnum.NORMAL.getNextLevel(parent.getLevel()); | 
|---|
|  |  |  | int levelCode = MemberLevelEnum.NORMAL.getLevelCode(nextLevelName); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DataDictionaryCustom newLevelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("AGENT_PERK_SET", nextLevelName); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|