From 76706e083e2f5d91b4d3346ffead2e6bce2d09c5 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 15 Aug 2023 17:00:28 +0800
Subject: [PATCH] 后台修改

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java |  248 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 248 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
index d37bb77..da79277 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
+++ b/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();

--
Gitblit v1.9.1