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/enumerate/FundFlowEnum.java             |    4 
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java |   87 +++++++++++-
 src/main/resources/templates/febs/views/dapp/member.html                  |    8 +
 src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java          |    2 
 src/main/resources/mapper/dapp/DappMemberDao.xml                          |    3 
 src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java       |   15 ++
 src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java          |    5 
 src/main/java/cc/mrbird/febs/job/BnbTransferJob.java                      |   11 +
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java |  248 +++++++++++++++++++++++++++++++++++
 src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java        |    6 
 src/main/resources/templates/febs/views/dapp/money-change-flow.html       |    7 
 11 files changed, 382 insertions(+), 14 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java b/src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java
index d9623b5..9920b8c 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java
+++ b/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("操作成功");
+    }
+
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
index 71685f2..2080552 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
+++ b/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"),
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
index 588626d..b2c2689 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
+++ b/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),
     //充值
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
index 0d6a11e..0c6f445 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
@@ -98,4 +98,6 @@
     void updateAddress(CreateAddressDto createAddressDto);
 
     List<MallGoodsCategory> categoryList();
+
+    FebsResponse balanceSystem();
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
index 84acd89..8e6a81d 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
+++ b/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);
 }
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();
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
index 7e6a312..e22ec08 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
+++ b/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,
diff --git a/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java b/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
index 5558ded..ebb9723 100644
--- a/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
+++ b/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);
+        }
     }
 
 }
diff --git a/src/main/resources/mapper/dapp/DappMemberDao.xml b/src/main/resources/mapper/dapp/DappMemberDao.xml
index ceee706..6c5db4e 100644
--- a/src/main/resources/mapper/dapp/DappMemberDao.xml
+++ b/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">
diff --git a/src/main/resources/templates/febs/views/dapp/member.html b/src/main/resources/templates/febs/views/dapp/member.html
index 3265952..932eb31 100644
--- a/src/main/resources/templates/febs/views/dapp/member.html
+++ b/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) {
diff --git a/src/main/resources/templates/febs/views/dapp/money-change-flow.html b/src/main/resources/templates/febs/views/dapp/money-change-flow.html
index 4d06370..773111d 100644
--- a/src/main/resources/templates/febs/views/dapp/money-change-flow.html
+++ b/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()
             };
         }
 

--
Gitblit v1.9.1