KKSU
2024-01-18 bf3ed43e5e1b981121a97a98b52c7e871755d082
fapiao
2 files modified
253 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java 127 ●●●●● patch | view | raw | blame | history
src/test/java/cc/mrbird/febs/ProfitTest.java 126 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -346,66 +346,63 @@
                String referrerIds = mallMember.getReferrerIds();
                List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ",");
                if(CollUtil.isNotEmpty(referrerIdList)){
                    List<MallMember> mallMemberTeamPerk = mallMemberMapper.selectByInviteIds(referrerIdList);
                    if(CollUtil.isNotEmpty(mallMemberTeamPerk)){
                        String levelNormal = MemberLevelEnum.V1.getType();
                        BigDecimal cashPercentNormal = BigDecimal.ZERO;
                        BigDecimal scorePercentNormal = BigDecimal.ZERO;
                    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);
                    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(String teamPerkMemberInviteId : referrerIdList){
                        MallMember teamPerkMember = mallMemberMapper.selectInfoByInviteId(teamPerkMemberInviteId);
//                    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);
                            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 cashAmount = amountTC.multiply(cashPercent).setScale(2, BigDecimal.ROUND_DOWN);
                                //如果是H金劵,除以当前价格,得到数量。
                                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);
                            //如果是H金劵,除以当前价格,得到数量。
                            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);
                        }
                    }
                }
            }
            /**
@@ -555,28 +552,12 @@
    }
    public static void main(String[] args) {
        BigDecimal total = new BigDecimal(100000);
        BigDecimal amountTotal = BigDecimal.ZERO;
        BigDecimal scoreTotal = BigDecimal.ZERO;
        BigDecimal amountBasic = new BigDecimal(100);
        BigDecimal price = new BigDecimal(0.01);
        BigDecimal amountPercent = new BigDecimal(0.5);
        BigDecimal scorePercent = new BigDecimal(0.35);
        int times = total.divideToIntegralValue(amountBasic).intValue();
        System.out.println("循环次数:"+times);
        for(int i = 0; i < times; i++){
            BigDecimal amount = amountBasic.multiply(amountPercent);
            amountTotal = amountTotal.add(amount);
            BigDecimal score = amountBasic.multiply(scorePercent).divide(price, 2 ,BigDecimal.ROUND_DOWN);
            scoreTotal = scoreTotal.add(score);
            price = amountTotal.divide(scoreTotal, 7 ,BigDecimal.ROUND_DOWN);
            System.out.println("现金池:"+amountTotal+",积分池:"+scoreTotal+",增长现金:"+amount+"增长积分:"+score+",价格:"+price);
        String referrerIds = "23430963,23420267,23330438,23320976,23310921,23290922,23280413,23270439,23250764,23240756,23230123,23210557,23190725,23180251,23170775,23160156,23150596,23130696,23140691,23120183,22990699,22980499,23110722,20656426";
        List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ",");
        for(String reId : referrerIdList){
            System.out.println(reId);
        }
    }
}
src/test/java/cc/mrbird/febs/ProfitTest.java
@@ -1,9 +1,17 @@
package cc.mrbird.febs;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
import cc.mrbird.febs.common.enumerates.MemberLevelEnum;
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
import cc.mrbird.febs.common.enumerates.PerkEnum;
import cc.mrbird.febs.common.utils.AppContants;
import cc.mrbird.febs.common.utils.MallUtils;
import cc.mrbird.febs.mall.entity.AdminAgentInfo;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.MallOrderItem;
import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
import cc.mrbird.febs.mall.mapper.MallOrderItemMapper;
@@ -18,16 +26,14 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * @author wzy
@@ -51,40 +57,96 @@
    @Autowired
    private IApiMallMemberWalletService walletService;
    @Autowired
    private DataDictionaryCustomMapper dataDictionaryCustomMapper;
    @Test
    public void dynamicProfit() {
        List<MallMember> mallMembers = mallMemberMapper.selectList(null);
        if(CollUtil.isEmpty(mallMembers)){
            return;
        }
        for(MallMember mallMember : mallMembers){
            boolean flag = false;
            String parentId = mallMember.getReferrerId();
            if (StrUtil.isBlank(parentId)) {
                flag = true;
            }
            String ids = "";
            while (!flag) {
                if (StrUtil.isBlank(ids)) {
                    ids += parentId;
                } else {
                    ids += ("," + parentId);
                }
                MallMember parentMember = mallMemberMapper.selectInfoByInviteId(parentId);
                if (parentMember == null) {
                    break;
                }
                parentId = parentMember.getReferrerId();
                if (StrUtil.isBlank(parentMember.getReferrerId())) {
                    flag = true;
        BigDecimal amountTC = new BigDecimal("100");
        MallMember mallMember = mallMemberMapper.selectById(921L);
        if(StrUtil.isNotEmpty(mallMember.getReferrerIds())){
            //团队补贴对象
            String referrerIds = mallMember.getReferrerIds();
            List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ",");
            if(CollUtil.isNotEmpty(referrerIdList)){
                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(String teamPerkMemberInviteId : referrerIdList){
                    MallMember teamPerkMember = mallMemberMapper.selectInfoByInviteId(teamPerkMemberInviteId);
                    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);
                        //如果是H金劵,除以当前价格,得到数量。
                        BigDecimal scoreCnt = amountTC.multiply(scorePercent).setScale(2, BigDecimal.ROUND_DOWN);
                        scoreCnt = scoreCnt.divide(poolScorePrice, 2 ,BigDecimal.ROUND_DOWN);
                        MallMember mallMember1 = mallMemberMapper.selectById(teamPerkMemberId);
                        if(cashAmount.compareTo(BigDecimal.ZERO) > 0){
                            System.out.println(mallMember1.getName()+"获得:" + cashAmount);
                        }
                        if(scoreCnt.compareTo(BigDecimal.ZERO) > 0){
                            System.out.println(mallMember1.getName()+"获得:" + scoreCnt);
                        }
                        levelNormal = level;
                        cashPercentNormal = adminAgentInfo.getCashPercent().multiply(AppContants.PERCENTAGE);
                        scorePercentNormal = adminAgentInfo.getScorePercent().multiply(AppContants.PERCENTAGE);
                    }
                }
            }
            if (StrUtil.isNotBlank(ids)) {
                mallMember.setReferrerIds(ids);
            }
            mallMemberMapper.updateById(mallMember);
        }
//        List<MallMember> mallMembers = mallMemberMapper.selectList(null);
//        if(CollUtil.isEmpty(mallMembers)){
//            return;
//        }
//        for(MallMember mallMember : mallMembers){
//            boolean flag = false;
//            String parentId = mallMember.getReferrerId();
//            if (StrUtil.isBlank(parentId)) {
//                flag = true;
//            }
//            String ids = "";
//            while (!flag) {
//                if (StrUtil.isBlank(ids)) {
//                    ids += parentId;
//                } else {
//                    ids += ("," + parentId);
//                }
//                MallMember parentMember = mallMemberMapper.selectInfoByInviteId(parentId);
//                if (parentMember == null) {
//                    break;
//                }
//                parentId = parentMember.getReferrerId();
//                if (StrUtil.isBlank(parentMember.getReferrerId())) {
//                    flag = true;
//                }
//            }
//
//            if (StrUtil.isNotBlank(ids)) {
//                mallMember.setReferrerIds(ids);
//            }
//            mallMemberMapper.updateById(mallMember);
//        }
//        walletService.add(new BigDecimal(2000), 1L, "equityLimit");//减少权益积分