xiaoyong931011
2023-08-29 eac9127fec0c66863b54a3801e093335d69a55b1
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -18,6 +18,7 @@
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cc.mrbird.febs.system.entity.User;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@@ -71,6 +72,7 @@
    private final MallGoodsCategoryMapper mallGoodsCategoryMapper;
    private final PlatformBannerMapper platformBannerMapper;
    private final MallGoodsImagesMapper goodsImagesMapper;
    private final MemberCoinWithdrawDao memberCoinWithdrawDao;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -211,17 +213,29 @@
            member.setCurrentUser(currentUser.getUserId());
        }
        IPage<DappMemberEntity> dappMemberEntityIPage = dappMemberDao.selectInPage(member, page);
//        List<DappMemberEntity> records = dappMemberEntityIPage.getRecords();
//        if(CollUtil.isNotEmpty(records)){
//            for(DappMemberEntity memberEntity : records){
//                Long memberId = memberEntity.getId();
//                DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId);
//                memberEntity.setCoinAmount(ObjectUtil.isEmpty(dappWalletCoinEntity) ? BigDecimal.ZERO : dappWalletCoinEntity.getAvailableAmount());
//
//                DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(memberId);
//                memberEntity.setScoreAmount(ObjectUtil.isEmpty(dappWalletMineEntity) ? BigDecimal.ZERO : dappWalletMineEntity.getAvailableAmount());
//            }
//        }
        List<DappMemberEntity> records = dappMemberEntityIPage.getRecords();
        if(CollUtil.isNotEmpty(records)){
            for(DappMemberEntity memberEntity : records){
                Long memberId = memberEntity.getId();
//                List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(memberId);
                List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberIdAndScore(memberId);
                BigDecimal myShareAchieve = BigDecimal.ZERO;
                if(CollUtil.isNotEmpty(mallAchieveRecords)){
                    Date payTime = mallAchieveRecords.get(0).getPayTime();
                    //下第一单之后的共享区全部业绩
                    myShareAchieve = mallAchieveRecordMapper.selectAchieveTotalByCreateTime(payTime);
                }
                memberEntity.setMyShareAchieve(myShareAchieve);
                BigDecimal totalIncomeMember = dappMemberDao.selectAllAchieveByRefId(memberEntity.getInviteId());
                memberEntity.setMyTeamAchieve(totalIncomeMember);
                BigDecimal withdrawAmount = memberCoinWithdrawDao.selectByMemberIdAndStatus(memberId, MemberCoinWithdrawEntity.STATUS_YES);
                memberEntity.setWithdrawAmount(withdrawAmount);
            }
        }
        return dappMemberEntityIPage;
    }
@@ -531,6 +545,16 @@
        dappMemberInfoVo.setWaitPayCnt(waitPayCnt);
        dappMemberInfoVo.setPayCnt(payCnt);
        dappMemberInfoVo.setCancelCnt(cancelCnt);
//        List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(member.getId());
        List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberIdAndScore(member.getId());
        BigDecimal myShareAchieve = BigDecimal.ZERO;
        if(CollUtil.isNotEmpty(mallAchieveRecords)){
            Date payTime = mallAchieveRecords.get(0).getPayTime();
            //下第一单之后的共享区全部业绩
            myShareAchieve = mallAchieveRecordMapper.selectAchieveTotalByCreateTime(payTime);
        }
        dappMemberInfoVo.setMyShareAchieve(myShareAchieve);
        return new FebsResponse().success().data(dappMemberInfoVo);
    }
@@ -752,7 +776,7 @@
        }
        BigDecimal totalAmount = orderInfo.getAmount();
        if(achieveAva.compareTo(totalAmount) < 0){
            throw new FebsException("用户最多购买"+achieveAva.setScale(2,BigDecimal.ROUND_DOWN)+"USDT");
            throw new FebsException("用户最多购买"+achieveAva.setScale(2,BigDecimal.ROUND_DOWN));
        }
        DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(member.getId());
@@ -997,28 +1021,42 @@
        List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectAllMemberForInCome();
        if(CollUtil.isNotEmpty(dappMemberEntities)){
            //总划入
            BigDecimal totalAdd = BigDecimal.ZERO;
            //资产包卖出划入底池比例
            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);
            //资产包积分价格
            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);
            //卖出积分直接销毁。
            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);
            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);
            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);
                    //实际获取的金额
@@ -1039,47 +1077,27 @@
                            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);
                    totalAdd = totalAdd.add(poorAmount);
                }
                return new FebsResponse().success();
            }
            List<MallAchieveRecord> mallAchieveRecordList = new ArrayList<>();
            for(DappMemberEntity dappMemberEntity : dappMemberEntities){
                //获取每个人的业绩
                //业绩集合
                List<BigDecimal> list = new ArrayList<>();
                //所有直推团队,就是这个会员的所有区域的业绩。
            }else{
                List<MallAchieveRecord> mallAchieveRecordList = new ArrayList<>();
                for(DappMemberEntity dappMemberEntity : dappMemberEntities){
                    //获取每个人的业绩
                    //业绩集合
                    List<BigDecimal> list = new ArrayList<>();
                    //所有直推团队,就是这个会员的所有区域的业绩。
                BigDecimal teamIncomeMax = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(dappMemberEntity.getId(),
                        FundFlowEnum.ADD_AMOUNT_REAL.getCode(),
                        DappFundFlowEntity.WITHDRAW_STATUS_AGREE);
                if(BigDecimal.ZERO.compareTo(teamIncomeMax) >= 0){
                    continue;
                }
                    BigDecimal teamIncomeMax = dappFundFlowDao.selectSumAmountByMemberIdAndTypeAndStatus(dappMemberEntity.getId(),
                            FundFlowEnum.ADD_AMOUNT_REAL.getCode(),
                            DappFundFlowEntity.WITHDRAW_STATUS_AGREE);
                    if(BigDecimal.ZERO.compareTo(teamIncomeMax) >= 0){
                        continue;
                    }
                MallAchieveRecord mallAchieveRecord = new MallAchieveRecord();
                mallAchieveRecord.setMemberId(dappMemberEntity.getId());
                mallAchieveRecord.setAmount(teamIncomeMax);
                mallAchieveRecordList.add(mallAchieveRecord);
                    MallAchieveRecord mallAchieveRecord = new MallAchieveRecord();
                    mallAchieveRecord.setMemberId(dappMemberEntity.getId());
                    mallAchieveRecord.setAmount(teamIncomeMax);
                    mallAchieveRecordList.add(mallAchieveRecord);
//                // 直推用户
//                List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(dappMemberEntity.getInviteId());
//                List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList());
@@ -1093,153 +1111,115 @@
//                    BigDecimal bigMax = list.stream().max(BigDecimal::compareTo).get();
//                    teamIncomeMax = teamIncomeMax.subtract(bigMax);
//                }
            }
            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);
                    }
                }
                if(CollUtil.isNotEmpty(mallAchieveRecordList)){
                    //按照小区业绩的多少排名
                    List<MallAchieveRecord> collect = mallAchieveRecordList
                            .stream()
                            .sorted(Comparator.comparing(MallAchieveRecord::getAmount))
                            .collect(Collectors.toList());
                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();
                    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;
                        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);
                            BigDecimal cnt = balance.divide(new BigDecimal(2) , 2 ,BigDecimal.ROUND_DOWN);
                            dappMemberEntity.setBalance(balance.subtract(cnt));
                            dappMemberDao.updateById(dappMemberEntity);
                            //卖出资产乘以价格获取到预期获取的总额
                            BigDecimal totalAmount = cnt.multiply(packageScorePrice).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);
                            totalAdd = totalAdd.add(poorAmount);
                        }
                    }
                        //卖出积分回收。
                        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);
                            //卖出资产乘以价格获取到预期获取的总额
                            BigDecimal totalAmount = cnt.multiply(packageScorePrice).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);
                            totalAdd = totalAdd.add(poorAmount);
                        }
                    }
                }
            }
            BigDecimal avaPackagePoor = packagePoor.add(totalAdd);
            packagePoorDic.setValue(avaPackagePoor.toString());
            dataDictionaryCustomMapper.updateById(packagePoorDic);
            //计算当前价格
            BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 8, BigDecimal.ROUND_DOWN);
            packageScorePriceDic.setValue(divide.toString());
            dataDictionaryCustomMapper.updateById(packageScorePriceDic);
            DappFundFlowEntity backFlow = new DappFundFlowEntity(
                    1L,
                    totalAdd,
                    FundFlowEnum.SYSTEM_SALE_PACKAGE_BACK.getCode(),
                    DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                    BigDecimal.ZERO);
            dappFundFlowDao.insert(backFlow);
            DappAKlineEntity dappAKlineEntity = new DappAKlineEntity();
            dappAKlineEntity.setOpenPrice(divide);
            dappAKlineEntity.setType(1);
            dappAKlineMapper.insert(dappAKlineEntity);
        }
        return new FebsResponse().success();
    }
@@ -1298,6 +1278,32 @@
        return mallAddressInfo;
    }
    @Override
    public List<PackageRecordVo> packageRecord(PackageRecordDto packageRecordDto) {
        List<PackageRecordVo> packageRecordVos = new ArrayList<>();
        Integer type = packageRecordDto.getType();
        if(2 == type){
            packageRecordVos = dappMemberDao.selectPackageRecordWeekInPage(DateUtil.beginOfWeek(DateUtil.date()));
        }else if(3 == type){
            packageRecordVos = dappMemberDao.selectPackageRecordMonthInPage(DateUtil.date());
        }else{
            packageRecordVos = dappMemberDao.selectPackageRecordDayInPage(DateUtil.date());
        }
        if(CollUtil.isNotEmpty(packageRecordVos)){
            Integer packageNum = 0;
            for(PackageRecordVo packageRecordVo : packageRecordVos){
                packageNum = packageNum + 1;
                packageRecordVo.setPackageNum(packageNum);
            }
        }
        return packageRecordVos;
    }
    @Override
    public List<AKLineLimitVo> packageKline() {
        return dappAKlineMapper.selectListByTypeAndLimit(2, 30);
    }
    public static List<List<String>> partitionList(List<String> originalList, int partitionSize) {
        List<List<String>> partitionedList = new ArrayList<>();
        int size = originalList.size();