xiaoyong931011
2023-08-08 2abf40714b49234e0111389f0651b5c5f7c22029
数据修改
6 files modified
152 ■■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/entity/TeamLevelPerk.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java 3 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java 114 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/job/BnbTransferJob.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/entity/TeamLevelPerk.java
@@ -5,18 +5,13 @@
import java.math.BigDecimal;
/**
 * shareSpeedPercent 共享区加速百分比
 * shareMaxPercent 共享区加速最大值
 * smallAchieve    升级要求业绩
 * teamPercent      团队静态收益
 * orderSalePercent 全网销售额加权平分分红
 *  {"shareMinPercent":"0.00004","shareMaxPercent":"0.01","smallAchieve":"20000","teamPercent":"0.15","orderSalePercent":"0"}
 *  {"shareMinPercent":"0.00005","shareMaxPercent":"0.012","smallAchieve":"60000","teamPercent":"0.3","orderSalePercent":"0"}
 *  {"shareMinPercent":"0.00006","shareMaxPercent":"0.014","smallAchieve":"200000","teamPercent":"0.45","orderSalePercent":"0"}
 *  {"shareMinPercent":"0.00007","shareMaxPercent":"0.016","smallAchieve":"600000","teamPercent":"0.60","orderSalePercent":"0"}
 *  {"shareMinPercent":"0.00008","shareMaxPercent":"0.018","smallAchieve":"2000000","teamPercent":"0.75","orderSalePercent":"0.02"}
 *  {"shareMinPercent":"0.00009","shareMaxPercent":"0.020","smallAchieve":"6000000","teamPercent":"0.90","orderSalePercent":"0.02"}
 *  {"shareMinPercent":"0.0001","shareMaxPercent":"0.022","smallAchieve":"20000000","teamPercent":"1","orderSalePercent":"0.02"}
 *  {"shareMinPercent":"0.00004","shareMaxPercent":"0.01","smallAchieve":"20000","teamPercent":"0.15","orderSalePercent":"0","lastAgentCnt":"0","buyMaxAmount","3000"}
 *  {"shareMinPercent":"0.00005","shareMaxPercent":"0.012","smallAchieve":"60000","teamPercent":"0.3","orderSalePercent":"0","lastAgentCnt":"2","buyMaxAmount","3000"}
 *  {"shareMinPercent":"0.00006","shareMaxPercent":"0.014","smallAchieve":"200000","teamPercent":"0.45","orderSalePercent":"0","lastAgentCnt":"2","buyMaxAmount","3000"}
 *  {"shareMinPercent":"0.00007","shareMaxPercent":"0.016","smallAchieve":"600000","teamPercent":"0.60","orderSalePercent":"0","lastAgentCnt":"2","buyMaxAmount","3000"}
 *  {"shareMinPercent":"0.00008","shareMaxPercent":"0.018","smallAchieve":"2000000","teamPercent":"0.75","orderSalePercent":"0.02","lastAgentCnt":"2","buyMaxAmount","3000"}
 *  {"shareMinPercent":"0.00009","shareMaxPercent":"0.020","smallAchieve":"6000000","teamPercent":"0.90","orderSalePercent":"0.02","lastAgentCnt":"2","buyMaxAmount","3000"}
 *  {"shareMinPercent":"0.0001","shareMaxPercent":"0.022","smallAchieve":"20000000","teamPercent":"1","orderSalePercent":"0.02","lastAgentCnt":"2","buyMaxAmount","3000"}
 */
@Data
public class TeamLevelPerk {
src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
@@ -8,7 +8,19 @@
@Getter
public enum FundFlowEnum {
    //团队静态收益
    TEAM_PERK("TEAM_PERK", 7),
    TEAM_PERK_V7("TEAM_PERK_V7", 13),
    //团队静态收益
    TEAM_PERK_V6("TEAM_PERK_V6", 12),
    //团队静态收益
    TEAM_PERK_V5("TEAM_PERK_V5", 11),
    //团队静态收益
    TEAM_PERK_V4("TEAM_PERK_V4", 10),
    //团队静态收益
    TEAM_PERK_V3("TEAM_PERK_V3", 9),
    //团队静态收益
    TEAM_PERK_V2("TEAM_PERK_V2", 8),
    //团队静态收益
    TEAM_PERK_V1("TEAM_PERK_V1", 7),
    //直推
    DIRECT_AMOUNT("DIRECT_AMOUNT", 6),
    //增加余额
src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java
@@ -4,6 +4,7 @@
import cc.mrbird.febs.dapp.entity.MallOrderInfo;
import cc.mrbird.febs.dapp.vo.AdminMallMoneyFlowVo;
import cc.mrbird.febs.dapp.vo.DappFundFlowVo;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -56,5 +57,5 @@
    IPage<AdminMallMoneyFlowVo> selectOrderMoneyFlowInPage(Page<AdminMallMoneyFlowVo> page, @Param("record")MallOrderInfo mallOrder);
    List<DappFundFlowEntity> selectListByMemberIdAndTypeAndDate(@Param("memberId")Long memberId, @Param("type")int code, @Param("dateStr")String now);
    List<DappFundFlowEntity> selectListByMemberIdAndTypeAndDate(@Param("memberId")Long memberId, @Param("type")int code, @Param("dateStr") DateTime now);
}
src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -116,4 +116,5 @@
    void speedDirectPerkMsg(Long memberId);
    void teamStaticPerk();
}
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -2764,10 +2764,7 @@
                Long directMemberId = directMember.getId();
                chainProducer.sendDirectPerkMsg(directMemberId);
            }
        }
    }
    @Override
@@ -2793,7 +2790,7 @@
         * 获取用户前一天的所有返利记录
         */
        List<DappFundFlowEntity> dappFundFlowEntities = dappFundFlowDao.selectListByMemberIdAndTypeAndDate(memberId,
                FundFlowEnum.STATIC_RELEASE.getCode(),DateUtil.now());
                FundFlowEnum.STATIC_RELEASE.getCode(),DateUtil.offsetHour(DateUtil.date(),12));
        for(DappFundFlowEntity dappFundFlowEntity : dappFundFlowEntities){
            BigDecimal staticReleaseAmount = dappFundFlowEntity.getAmount();
            BigDecimal directReleaseAmount = staticReleaseAmount.multiply(directRelease).setScale(2, BigDecimal.ROUND_DOWN);
@@ -2803,11 +2800,6 @@
    @Override
    public void teamStaticPerk() {
        List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V1.getType());
        if(CollUtil.isEmpty(dappMemberEntities)){
            return;
        }
        //平级
        DataDictionaryCustom teamPerkEqualsDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.TEAM_PERK_LEVEL_EQUALS.getType(),
@@ -2818,42 +2810,69 @@
                DataDictionaryEnum.STATIC_RELEASE.getCode());
        BigDecimal staticRelease = new BigDecimal(ObjectUtil.isEmpty(staticReleaseDic) ? "0.006" : staticReleaseDic.getValue());
        List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V1.getType());
        teamStaticPerkMemberLevel(dappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V1.getCode());
        List<DappMemberEntity> v2DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V2.getType());
        teamStaticPerkMemberLevel(v2DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V2.getCode());
        List<DappMemberEntity> v3DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V3.getType());
        teamStaticPerkMemberLevel(v3DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V3.getCode());
        List<DappMemberEntity> v4DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V4.getType());
        teamStaticPerkMemberLevel(v4DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V4.getCode());
        List<DappMemberEntity> v5DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V5.getType());
        teamStaticPerkMemberLevel(v5DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V5.getCode());
        List<DappMemberEntity> v6DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V6.getType());
        teamStaticPerkMemberLevel(v6DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V6.getCode());
        List<DappMemberEntity> v7DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V7.getType());
        teamStaticPerkMemberLevel(v7DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V7.getCode());
    }
    public void shareStaticPerk(List<DappMemberEntity> dappMemberEntities,int code) {
        if(CollUtil.isEmpty(dappMemberEntities)){
            return;
        }
        for(DappMemberEntity dappMemberEntity : dappMemberEntities){
            if(StrUtil.isNotEmpty(dappMemberEntity.getRefererIds())){
                String referrerIds = dappMemberEntity.getRefererIds();
                List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ",");
                if(CollUtil.isNotEmpty(referrerIdList)){
                    List<DappMemberEntity> mallMemberTeamPerk = dappMemberDao.selectByInviteIds(referrerIdList);
        }
    }
                    if(CollUtil.isNotEmpty(mallMemberTeamPerk)){
                        String levelNormal = MemberLevelEnum.V1.getType();
                        BigDecimal cashPercentNormal = BigDecimal.ZERO;
                        for(DappMemberEntity teamPerkMember : mallMemberTeamPerk){
    public void teamStaticPerkMemberLevel(List<DappMemberEntity> dappMemberEntities,
                                          BigDecimal teamPerkEquals,
                                          BigDecimal staticRelease,
                                          int code) {
        if(CollUtil.isEmpty(dappMemberEntities)){
            return;
        }
        for(DappMemberEntity teamPerkMember : dappMemberEntities){
                            String level = teamPerkMember.getAccountType();
                            //比较两个级别的大小,level大于levelNormal返回1
                            int compareMin = MemberLevelEnum.V1.compareLevel(level, levelNormal);
            int compareMin = MemberLevelEnum.V1.compareLevel(level, MemberLevelEnum.V1.getType());
                            int compareMax = MemberLevelEnum.V1.compareLevel(MemberLevelEnum.V7.getType(), level);
                            if(compareMin >= 1 && compareMax >= 1){
                                DataDictionaryCustom teamPerkMemberDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                                        "TEAM_LEVEL", level);
                                TeamLevelPerk adminAgentInfo = JSONObject.parseObject(teamPerkMemberDic.getValue(), TeamLevelPerk.class);
                                BigDecimal cashPercent = adminAgentInfo.getTeamPercent();
                                //极差
                                if(MemberLevelEnum.V1.compareLevel(levelNormal, level) == 0){
                                    //平级
                                    cashPercent = cashPercent.subtract(teamPerkEquals);
                                }else{
                                    cashPercent = cashPercent.subtract(cashPercentNormal);
                                }
                                //总业绩
                                BigDecimal teamIncomeMax = BigDecimal.ZERO;
                                //所有直推团队,就是这个会员的所有区域的业绩。
                                // 直推用户
                                List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(teamPerkMember.getInviteId());
                List<DappMemberEntity> collect = childs.stream()
                        .filter(dappMemberEntity -> dappMemberEntity.getAccountType() == MemberLevelEnum.V1.getType())
                        .collect(Collectors.toList());
                //极差
                if(CollUtil.isNotEmpty(collect)){
                    //平级
                    cashPercent = teamPerkEquals;
                }
                //所有直推团队,就是这个会员的所有区域的业绩。
                                List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList());
                //总业绩
                BigDecimal teamIncomeMax = BigDecimal.ZERO;
                                for(String inviteId : childsInviteIds){
                                    BigDecimal totalIncomeMember = dappMemberDao.selectAllAchieveByInviteId(inviteId);
                                    teamIncomeMax = teamIncomeMax.add(totalIncomeMember);
@@ -2864,22 +2883,39 @@
                                //V1加速团队静态收益的15%=每日静态的20000*6‰*15%=18元的额外释放加速
                                BigDecimal cashAmount = teamIncomeMax.multiply(cashPercent).multiply(staticRelease).setScale(2, BigDecimal.ROUND_DOWN);
                                BigDecimal bigDecimal = sendPerk(teamPerkMember, cashAmount, null, FundFlowEnum.TEAM_PERK.getCode());
                                levelNormal = level;
                                cashPercentNormal = adminAgentInfo.getTeamPercent();
                BigDecimal bigDecimal = sendPerk(teamPerkMember, cashAmount, null, code);
                            }
                        }
                    }
                }
            }
        }
    }
    private BigDecimal sendPerk(DappMemberEntity parentMember,BigDecimal directReleaseAmount,Long orderId
                ,Integer fundFlowEnumType){
        BigDecimal realScoreReduce = BigDecimal.ZERO;
        //用户减少赠送积分
        if(BigDecimal.ZERO.compareTo(directReleaseAmount) >= 0){
            return realScoreReduce;
        }
        /**
         * 减少业绩
         */
        List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(parentMember.getId());
        if(CollUtil.isEmpty(mallAchieveRecords)){
            return realScoreReduce;
        }
        BigDecimal totalAchieve = mallAchieveRecords.stream().map(MallAchieveRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
        if(directReleaseAmount.compareTo(totalAchieve) >= 0){
            realScoreReduce = totalAchieve;
            for(MallAchieveRecord mallAchieveRecord : mallAchieveRecords){
                mallAchieveRecord.setAmount(BigDecimal.ZERO);
                mallAchieveRecord.setIsNormal(2);
                mallAchieveRecordMapper.updateById(mallAchieveRecord);
            }
        }
        /**
         * 用户减少赠送积分
         */
        DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(parentMember.getId());
        BigDecimal totalScore = dappWalletMineEntity.getTotalAmount();
        BigDecimal availableScore = dappWalletMineEntity.getAvailableAmount();
src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
@@ -56,5 +56,4 @@
        dappSystemService.teamStaticPerk();
    }
}