xiaoyong931011
2023-08-15 76706e083e2f5d91b4d3346ffead2e6bce2d09c5
后台修改
11 files modified
396 ■■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java 5 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java 248 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java 87 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/job/BnbTransferJob.java 11 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/DappMemberDao.xml 3 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/member.html 8 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/money-change-flow.html 7 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java
@@ -201,4 +201,10 @@
        return new FebsResponse().success().data(dataTable);
    }
    @GetMapping(value = "/balanceSystem")
    public FebsResponse balanceSystem() {
        return dappMemberService.balanceSystem();
//        return new FebsResponse().success().message("操作成功");
    }
}
src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
@@ -6,6 +6,21 @@
public enum DataDictionaryEnum {
    /**
     *  团队产生的收益1%奖励积分
     */
    PACKAGE_TEAM_PERK_PERCENT("PACKAGE_TEAM_PERK_PERCENT","PACKAGE_TEAM_PERK_PERCENT"),
    /**
     *  团队产生的收益1%奖励积分的总数量
     */
    PACKAGE_TEAM_PERK_CNT("PACKAGE_TEAM_PERK_CNT","PACKAGE_TEAM_PERK_CNT"),
    /**
     *  资产包已销毁数量
     */
    PACKAGE_AVA_CNT("PACKAGE_AVA_CNT","PACKAGE_AVA_CNT"),
    /**
     *  提现手续费
     */
    WITHDRAW_FEE("WITHDRAW_FEE","WITHDRAW_FEE"),
src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
@@ -7,6 +7,10 @@
 */
@Getter
public enum FundFlowEnum {
    //资产包增加
    PACKAGE_ADD("PACKAGE_ADD", 42),
    //系统回购
    SYSTEM_PACKAGE_SALE("SYSTEM_PACKAGE_SALE", 41),
    //提现
    WITHDRAW_USDT("WITHDRAW_USDT", 40),
    //充值
src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
@@ -98,4 +98,6 @@
    void updateAddress(CreateAddressDto createAddressDto);
    List<MallGoodsCategory> categoryList();
    FebsResponse balanceSystem();
}
src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -7,6 +7,7 @@
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Set;
public interface DappSystemService {
@@ -117,7 +118,9 @@
    void teamStaticPerk();
    void updateAchieve();
    Set<DappMemberEntity> updateAchieve();
    void speedSalePackageMsg(Long flowId);
    void updatePackage(Set<DappMemberEntity> dappMemberEntities);
}
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -975,6 +975,254 @@
        return mallGoodsCategoryMapper.selectRecommendCategoryList();
    }
    @Override
    public FebsResponse balanceSystem() {
        List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectAllMemberForInCome();
        if(CollUtil.isNotEmpty(dappMemberEntities)){
            if(dappMemberEntities.size() <= 100){
                for(DappMemberEntity dappMemberEntity : dappMemberEntities){
                    Long memberId = dappMemberEntity.getId();
                    BigDecimal balance = dappMemberEntity.getBalance();
                    BigDecimal cnt = balance.divide(new BigDecimal(2) , 2 ,BigDecimal.ROUND_DOWN);
                    dappMemberEntity.setBalance(balance.subtract(cnt));
                    dappMemberDao.updateById(dappMemberEntity);
                    DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                            DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(),
                            DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode()
                    );
                    BigDecimal packageScorePrice = new BigDecimal(ObjectUtil.isEmpty(packageScorePriceDic) ? "0" : packageScorePriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
                    //卖出资产乘以价格获取到预期获取的总额
                    BigDecimal totalAmount = cnt.multiply(packageScorePrice).setScale(2, BigDecimal.ROUND_DOWN);
                    //资产包卖出划入底池比例
                    DataDictionaryCustom packageToPoorPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                            DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getType(),
                            DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getCode()
                    );
                    BigDecimal packageToPoorPercent = new BigDecimal(ObjectUtil.isEmpty(packageToPoorPercentDic) ? "0.1" : packageToPoorPercentDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
                    //划入底池的金额
                    BigDecimal poorAmount = totalAmount.multiply(packageToPoorPercent).setScale(2, BigDecimal.ROUND_DOWN);
                    //实际获取的金额
                    BigDecimal realAmount = totalAmount.subtract(poorAmount);
                    //生成一条资金流水
                    DappFundFlowEntity scoreFlow = new DappFundFlowEntity(
                            memberId,
                            realAmount,
                            FundFlowEnum.SYSTEM_PACKAGE_SALE.getCode(),
                            DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                            BigDecimal.ZERO);
                    dappFundFlowDao.insert(scoreFlow);
                    dappWalletCoinDao.addTotalAndaddAvailableByMemberId(memberId,realAmount);
                    DappFundFlowEntity feeFlow = new DappFundFlowEntity(
                            memberId,
                            poorAmount.negate(),
                            FundFlowEnum.SYSTEM_PACKAGE_SALE.getCode(),
                            DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                            BigDecimal.ZERO);
                    dappFundFlowDao.insert(feeFlow);
                    //卖出积分直接销毁。
                    DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                            DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(),
                            DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode()
                    );
                    BigDecimal avaPackageTotalScore = new BigDecimal(ObjectUtil.isEmpty(packageTotalScoreDic) ? "21000" : packageTotalScoreDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
                    //更新USDT底池
                    DataDictionaryCustom packagePoorDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                            DataDictionaryEnum.PACKAGE_POOR.getType(),
                            DataDictionaryEnum.PACKAGE_POOR.getCode()
                    );
                    BigDecimal packagePoor = new BigDecimal(ObjectUtil.isEmpty(packagePoorDic) ? "0" : packagePoorDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
                    BigDecimal avaPackagePoor = packagePoor.add(poorAmount);
                    packagePoorDic.setValue(avaPackagePoor.toString());
                    dataDictionaryCustomMapper.updateById(packagePoorDic);
                    //计算当前价格
                    BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 8, BigDecimal.ROUND_DOWN);
                    packageScorePriceDic.setValue(divide.toString());
                    dataDictionaryCustomMapper.updateById(packageScorePriceDic);
                }
                return new FebsResponse().success();
            }
            List<MallAchieveRecord> mallAchieveRecordList = new ArrayList<>();
            for(DappMemberEntity dappMemberEntity : dappMemberEntities){
                //获取每个人的业绩
                //业绩集合
                List<BigDecimal> list = new ArrayList<>();
                //总业绩
                BigDecimal teamIncomeMax = BigDecimal.ZERO;
                //所有直推团队,就是这个会员的所有区域的业绩。
                // 直推用户
                List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(dappMemberEntity.getInviteId());
                List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList());
                if(CollUtil.isNotEmpty(childsInviteIds)){
                    for(String inviteId : childsInviteIds){
                        BigDecimal totalIncomeMember = dappMemberDao.selectAchieveRecordByInviteId(inviteId);
                        teamIncomeMax = teamIncomeMax.add(totalIncomeMember);
                        list.add(totalIncomeMember);
                    }
                    //去掉一个最大区的业绩
                    BigDecimal bigMax = list.stream().max(BigDecimal::compareTo).get();
                    teamIncomeMax = teamIncomeMax.subtract(bigMax);
                    MallAchieveRecord mallAchieveRecord = new MallAchieveRecord();
                    mallAchieveRecord.setMemberId(dappMemberEntity.getId());
                    mallAchieveRecord.setAmount(teamIncomeMax);
                    mallAchieveRecordList.add(mallAchieveRecord);
                }
            }
            if(CollUtil.isNotEmpty(mallAchieveRecordList)){
                //按照小区业绩的多少排名
                List<MallAchieveRecord> collect = mallAchieveRecordList
                        .stream()
                        .sorted(Comparator.comparing(MallAchieveRecord::getAmount))
                        .collect(Collectors.toList());
                List<MallAchieveRecord> top100Performances = collect.stream()
                        .limit(100)
                        .collect(Collectors.toList());
                if(CollUtil.isNotEmpty(top100Performances)){
                    for(MallAchieveRecord mallAchieveRecord : top100Performances){
                        Long memberId = mallAchieveRecord.getMemberId();
                        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
                        BigDecimal balance = dappMemberEntity.getBalance();
                        BigDecimal cnt = balance.divide(new BigDecimal(2) , 2 ,BigDecimal.ROUND_DOWN);
                        dappMemberEntity.setBalance(balance.subtract(cnt));
                        dappMemberDao.updateById(dappMemberEntity);
                        DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(),
                                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode()
                        );
                        BigDecimal packageScorePrice = new BigDecimal(ObjectUtil.isEmpty(packageScorePriceDic) ? "0" : packageScorePriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
                        //卖出资产乘以价格获取到预期获取的总额
                        BigDecimal totalAmount = cnt.multiply(packageScorePrice).setScale(2, BigDecimal.ROUND_DOWN);
                        //资产包卖出划入底池比例
                        DataDictionaryCustom packageToPoorPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                                DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getType(),
                                DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getCode()
                        );
                        BigDecimal packageToPoorPercent = new BigDecimal(ObjectUtil.isEmpty(packageToPoorPercentDic) ? "0.1" : packageToPoorPercentDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
                        //划入底池的金额
                        BigDecimal poorAmount = totalAmount.multiply(packageToPoorPercent).setScale(2, BigDecimal.ROUND_DOWN);
                        //实际获取的金额
                        BigDecimal realAmount = totalAmount.subtract(poorAmount);
                        //生成一条资金流水
                        DappFundFlowEntity scoreFlow = new DappFundFlowEntity(
                                memberId,
                                realAmount,
                                FundFlowEnum.SYSTEM_PACKAGE_SALE.getCode(),
                                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                                BigDecimal.ZERO);
                        dappFundFlowDao.insert(scoreFlow);
                        dappWalletCoinDao.addTotalAndaddAvailableByMemberId(memberId,realAmount);
                        DappFundFlowEntity feeFlow = new DappFundFlowEntity(
                                memberId,
                                poorAmount.negate(),
                                FundFlowEnum.SYSTEM_PACKAGE_SALE.getCode(),
                                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                                BigDecimal.ZERO);
                        dappFundFlowDao.insert(feeFlow);
                        //卖出积分直接销毁。
                        DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(),
                                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode()
                        );
                        BigDecimal avaPackageTotalScore = new BigDecimal(ObjectUtil.isEmpty(packageTotalScoreDic) ? "21000" : packageTotalScoreDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
                        //更新USDT底池
                        DataDictionaryCustom packagePoorDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                                DataDictionaryEnum.PACKAGE_POOR.getType(),
                                DataDictionaryEnum.PACKAGE_POOR.getCode()
                        );
                        BigDecimal packagePoor = new BigDecimal(ObjectUtil.isEmpty(packagePoorDic) ? "0" : packagePoorDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
                        BigDecimal avaPackagePoor = packagePoor.add(poorAmount);
                        packagePoorDic.setValue(avaPackagePoor.toString());
                        dataDictionaryCustomMapper.updateById(packagePoorDic);
                        //计算当前价格
                        BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 8, BigDecimal.ROUND_DOWN);
                        packageScorePriceDic.setValue(divide.toString());
                        dataDictionaryCustomMapper.updateById(packageScorePriceDic);
                    }
                }
                List<MallAchieveRecord> remainingUsers = mallAchieveRecordList
                        .stream()
                        .sorted(Comparator.comparing(MallAchieveRecord::getAmount).reversed())
                        .skip(100)
                        .collect(Collectors.toList());
                if(CollUtil.isNotEmpty(remainingUsers)){
                    for(MallAchieveRecord mallAchieveRecord : remainingUsers){
                        Long memberId = mallAchieveRecord.getMemberId();
                        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
                        BigDecimal balance = dappMemberEntity.getBalance();
                        BigDecimal cnt = balance;
                        dappMemberEntity.setBalance(balance.subtract(cnt));
                        dappMemberDao.updateById(dappMemberEntity);
                        DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(),
                                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode()
                        );
                        BigDecimal packageScorePrice = new BigDecimal(ObjectUtil.isEmpty(packageScorePriceDic) ? "0" : packageScorePriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
                        //卖出资产乘以价格获取到预期获取的总额
                        BigDecimal totalAmount = cnt.multiply(packageScorePrice).setScale(2, BigDecimal.ROUND_DOWN);
                        //资产包卖出划入底池比例
                        DataDictionaryCustom packageToPoorPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                                DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getType(),
                                DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getCode()
                        );
                        BigDecimal packageToPoorPercent = new BigDecimal(ObjectUtil.isEmpty(packageToPoorPercentDic) ? "0.1" : packageToPoorPercentDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
                        //划入底池的金额
                        BigDecimal poorAmount = totalAmount.multiply(packageToPoorPercent).setScale(2, BigDecimal.ROUND_DOWN);
                        //实际获取的金额
                        BigDecimal realAmount = totalAmount.subtract(poorAmount);
                        //生成一条资金流水
                        DappFundFlowEntity scoreFlow = new DappFundFlowEntity(
                                memberId,
                                realAmount,
                                FundFlowEnum.SYSTEM_PACKAGE_SALE.getCode(),
                                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                                BigDecimal.ZERO);
                        dappFundFlowDao.insert(scoreFlow);
                        dappWalletCoinDao.addTotalAndaddAvailableByMemberId(memberId,realAmount);
                        DappFundFlowEntity feeFlow = new DappFundFlowEntity(
                                memberId,
                                poorAmount.negate(),
                                FundFlowEnum.SYSTEM_PACKAGE_SALE.getCode(),
                                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                                BigDecimal.ZERO);
                        dappFundFlowDao.insert(feeFlow);
                        //卖出积分回收。
                        DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(),
                                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode()
                        );
                        BigDecimal avaPackageTotalScore = new BigDecimal(ObjectUtil.isEmpty(packageTotalScoreDic) ? "21000" : packageTotalScoreDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
                        //更新USDT底池
                        DataDictionaryCustom packagePoorDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                                DataDictionaryEnum.PACKAGE_POOR.getType(),
                                DataDictionaryEnum.PACKAGE_POOR.getCode()
                        );
                        BigDecimal packagePoor = new BigDecimal(ObjectUtil.isEmpty(packagePoorDic) ? "0" : packagePoorDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
                        BigDecimal avaPackagePoor = packagePoor.add(poorAmount);
                        packagePoorDic.setValue(avaPackagePoor.toString());
                        dataDictionaryCustomMapper.updateById(packagePoorDic);
                        //计算当前价格
                        BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 8, BigDecimal.ROUND_DOWN);
                        packageScorePriceDic.setValue(divide.toString());
                        dataDictionaryCustomMapper.updateById(packageScorePriceDic);
                    }
                }
            }
        }
        return new FebsResponse().success();
    }
    public static List<List<String>> partitionList(List<String> originalList, int partitionSize) {
        List<List<String>> partitionedList = new ArrayList<>();
        int size = originalList.size();
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -2913,13 +2913,15 @@
    }
    @Override
    public void updateAchieve() {
    public Set<DappMemberEntity> updateAchieve() {
        /**
         * 每个人预期获得的总流水
         */
        Set<DappMemberEntity> set = new HashSet<>();
        List<DappFundFlowEntity> dappFundFlowEntities = dappFundFlowDao.selectListByTypeAndDate(FundFlowEnum.ADD_AMOUNT.getCode(), DateUtil.date());
        if(CollUtil.isEmpty(dappFundFlowEntities)){
            return;
            return set;
        }
        for(DappFundFlowEntity dappFundFlowEntity : dappFundFlowEntities){
            Long memberId = dappFundFlowEntity.getMemberId();
@@ -2932,7 +2934,7 @@
            BigDecimal amountMagic = amount;
            List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(memberId);
            if(CollUtil.isEmpty(mallAchieveRecords)){
                return;
                continue;
            }
            //实际获取总收益
            BigDecimal localTotalAchieve = BigDecimal.ZERO;
@@ -3069,8 +3071,10 @@
            //实时更新用户等级
            chainProducer.sendAutoLevelUpTeamMsg(memberId);
        }
            set.add(dappMemberEntity);
        }
        return set;
    }
    @Override
@@ -3107,15 +3111,15 @@
                memberId,
                realAmount,
                FundFlowEnum.SALE_PACKAGE_AMOUNT.getCode(),
                DappFundFlowEntity.WITHDRAW_STATUS_ING,
                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                BigDecimal.ZERO);
        dappFundFlowDao.insert(scoreFlow);
        dappWalletCoinDao.addTotalAndaddAvailableByMemberId(memberId,realAmount);
        DappFundFlowEntity feeFlow = new DappFundFlowEntity(
                memberId,
                poorAmount,
                poorAmount.negate(),
                FundFlowEnum.SALE_PACKAGE_AMOUNT_FEE.getCode(),
                DappFundFlowEntity.WITHDRAW_STATUS_ING,
                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                BigDecimal.ZERO);
        dappFundFlowDao.insert(feeFlow);
@@ -3138,9 +3142,76 @@
        packagePoorDic.setValue(avaPackagePoor.toString());
        dataDictionaryCustomMapper.updateById(packagePoorDic);
        //计算当前价格
        BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 2, BigDecimal.ROUND_DOWN);
        BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 8, BigDecimal.ROUND_DOWN);
        packageScorePriceDic.setValue(divide.toString());
        dataDictionaryCustomMapper.updateById(packageScorePriceDic);
        DataDictionaryCustom packageAvaCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.PACKAGE_AVA_CNT.getType(),
                DataDictionaryEnum.PACKAGE_AVA_CNT.getCode()
        );
        BigDecimal packageAvaCnt = new BigDecimal(ObjectUtil.isEmpty(packageAvaCntDic) ? "0" : packageAvaCntDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
        BigDecimal packageAvaCntScore = packageAvaCnt.add(cnt);
        packageAvaCntDic.setValue(packageAvaCntScore.toString());
        dataDictionaryCustomMapper.updateById(packageAvaCntDic);
    }
    @Override
    public void updatePackage(Set<DappMemberEntity> dappMemberEntities) {
        DataDictionaryCustom packageTeamPerkPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.PACKAGE_TEAM_PERK_PERCENT.getType(),
                DataDictionaryEnum.PACKAGE_TEAM_PERK_PERCENT.getCode()
        );
        BigDecimal packageTeamPerkPercent = new BigDecimal(ObjectUtil.isEmpty(packageTeamPerkPercentDic) ? "0.01" : packageTeamPerkPercentDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
        for(DappMemberEntity dappMemberEntity : dappMemberEntities){
            List<DappFundFlowEntity> dappFundFlowEntities = dappFundFlowDao.selectListByMemberIdAndTypeAndDate(dappMemberEntity.getId()
                    , FundFlowEnum.ADD_AMOUNT_REAL.getCode()
                    , DateUtil.offsetHour(DateUtil.date(), -12));
            //总收益
            BigDecimal totalPerk = dappFundFlowEntities.stream().map(DappFundFlowEntity::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal memberPerk = totalPerk.multiply(packageTeamPerkPercent);
            DataDictionaryCustom packageTeamPerkCntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                    DataDictionaryEnum.PACKAGE_TEAM_PERK_CNT.getType(),
                    DataDictionaryEnum.PACKAGE_TEAM_PERK_CNT.getCode()
            );
            DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                    DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(),
                    DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode()
            );
            BigDecimal packageScorePrice = new BigDecimal(ObjectUtil.isEmpty(packageScorePriceDic) ? "0" : packageScorePriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
            BigDecimal divide = memberPerk.divide(packageScorePrice, 4, BigDecimal.ROUND_DOWN);
            if(BigDecimal.ZERO.compareTo(divide) >= 0){
                continue;
            }
            BigDecimal packageTeamPerkCnt = new BigDecimal(packageTeamPerkCntDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
            if(packageTeamPerkCnt.compareTo(divide) >= 0){
                BigDecimal subtract = packageTeamPerkCnt.subtract(divide);
                packageTeamPerkCntDic.setValue(subtract.toString());
                dataDictionaryCustomMapper.updateById(packageTeamPerkCntDic);
            }
            BigDecimal balance = dappMemberEntity.getBalance();
            balance = balance.add(divide);
            dappMemberEntity.setBalance(balance);
            dappMemberDao.updateById(dappMemberEntity);
            //插入余额流水
            DappFundFlowEntity amountFlow = new DappFundFlowEntity(
                    AccountFlowEnum.AMOUNT.getCode(),
                    dappMemberEntity.getId(),
                    divide,
                    FundFlowEnum.PACKAGE_ADD.getCode(),
                    DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                    BigDecimal.ZERO);
            dappFundFlowDao.insert(amountFlow);
        }
    }
    public void shareStaticPerk(List<DappMemberEntity> dappMemberEntities,
src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
@@ -1,6 +1,8 @@
package cc.mrbird.febs.job;
import cc.mrbird.febs.dapp.entity.DappMemberEntity;
import cc.mrbird.febs.dapp.service.DappSystemService;
import cn.hutool.core.collection.CollUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -8,6 +10,7 @@
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Set;
@Slf4j
@Component
@@ -40,7 +43,13 @@
        /**
         * 实际更新账户业绩余额和积分
         */
        dappSystemService.updateAchieve();
        Set<DappMemberEntity> dappMemberEntities = dappSystemService.updateAchieve();
        if(CollUtil.isNotEmpty(dappMemberEntities)){
            /**
             * 奖励;团队产生的收益1%奖励积分,对标价格
             */
            dappSystemService.updatePackage(dappMemberEntities);
        }
    }
}
src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -44,8 +44,7 @@
    </select>
    <select id="selectAllMemberForInCome" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
        select * from dapp_member
        where account_status=1 and source = 1
        select * from dapp_member where balance > 0
    </select>
    <select id="selectAgentMemberList" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
src/main/resources/templates/febs/views/dapp/member.html
@@ -70,6 +70,7 @@
        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="agentLevel:view" lay-event="coinAmount">拨付余额</button>
        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="agentLevel:view" lay-event="scoreAmount">拨付赠送积分</button>
        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="agentLevel:view" lay-event="balance">拨付资产包</button>
        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="agentLevel:view" lay-event="balanceSystem">资产强制卖出</button>
    </div>
</script>
@@ -230,6 +231,13 @@
                }
                systemPay("资产包", checkData[0].id, 3);
            }
            if (layEvent === 'balanceSystem') {
                febs.get(ctx + 'member/balanceSystem/', null, function () {
                    febs.alert.success('操作成功');
                    $query.click();
                });
            }
        });
        function systemPay(text, id, type) {
src/main/resources/templates/febs/views/dapp/money-change-flow.html
@@ -117,6 +117,9 @@
    35: {title: '全网分红V5', color: 'green'},
    36: {title: '全网分红V6', color: 'green'},
    37: {title: '全网分红V7', color: 'green'},
    39: {title: '充值', color: 'green'},
    40: {title: '提现', color: 'green'},
    41: {title: '系统回购', color: 'green'},
    }[d.type];
    }}
    <span class="layui-badge febs-bg-{{type.color}}">{{ type.title }}</span>
@@ -192,8 +195,8 @@
        function getQueryParams() {
            return {
                address: $searchForm.find('input[name="address"]').val().trim(),
                fromHash: $searchForm.find('input[name="fromHash"]').val().trim(),
                type: $searchForm.find("select[name='type']").val()
                // fromHash: $searchForm.find('input[name="fromHash"]').val().trim(),
                // type: $searchForm.find("select[name='type']").val()
            };
        }