From efbff9ca8ef6bdf2966f80fe05984ed45b1b8519 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 29 Nov 2022 16:29:41 +0800
Subject: [PATCH] 20221124

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java |  119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 116 insertions(+), 3 deletions(-)

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 3d6bb3b..2509a14 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
@@ -8,6 +8,8 @@
 import cc.mrbird.febs.dapp.chain.ChainService;
 import cc.mrbird.febs.dapp.dto.SystemDto;
 import cc.mrbird.febs.dapp.entity.*;
+import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
+import cc.mrbird.febs.dapp.enumerate.LevelProfitEnum;
 import cc.mrbird.febs.dapp.mapper.*;
 import cc.mrbird.febs.dapp.service.DappSystemService;
 import cc.mrbird.febs.dapp.service.DappWalletService;
@@ -18,6 +20,9 @@
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -44,6 +49,8 @@
     private final DappAchieveTreeDao dappAchieveTreeDao;
     private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao;
     private final DappWalletService dappWalletService;
+    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
+    private final DappSystemProfitDao dappSystemProfitDao;
 
 
     @Override
@@ -166,7 +173,7 @@
         DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId());
 
         if (parent != null) {
-            BigDecimal directProfit = new BigDecimal("100").multiply(new BigDecimal("0.15"));
+            BigDecimal directProfit = TreeConstants.PUT_IN_AMOUNT.multiply(new BigDecimal("0.1"));
             dappWalletService.updateWalletCoinWithLock(directProfit, parent.getId(), 1);
 
             DappFundFlowEntity fundFlow = new DappFundFlowEntity(parent.getId(), directProfit, 3, 2, null, null);
@@ -193,8 +200,6 @@
                 } else {
                     amount = TreeConstants.FULL_PROFIT_AMOUNT;
                 }
-
-                dappWalletService.releaseFrozenAmountWithLock(memberId);
 
                 member.setOutCnt(member.getOutCnt() + 1);
                 dappMemberDao.updateById(member);
@@ -246,4 +251,112 @@
         dappAchieveMemberTreeDao.emptyTable();
         dappMemberDao.updateMemberActive();
     }
+
+    @Override
+    public void feeDistribute(String data) {
+        if (StrUtil.isBlank(data)) {
+            return;
+        }
+
+        Long flowId = Long.parseLong(data);
+        DappFundFlowEntity fundFlow = dappFundFlowDao.selectById(flowId);
+        if (fundFlow == null) {
+            return;
+        }
+
+        DataDictionaryCustom memberFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MEMBER_FEE.getType(), DataDictionaryEnum.MEMBER_FEE.getCode());
+        if (memberFeeDic == null) {
+            log.info("未设置手续费返利比例");
+            return;
+        }
+        List<DappMemberEntity> memberList = dappMemberDao.selectMemberListNeedProfit();
+        if (CollUtil.isEmpty(memberList)) {
+            return;
+        }
+
+        BigDecimal feeReturnRatio = new BigDecimal(memberFeeDic.getValue());
+        int size = memberList.size();
+        BigDecimal totalProfit = fundFlow.getFee().multiply(feeReturnRatio.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_DOWN));
+        BigDecimal perProfit = totalProfit.divide(BigDecimal.valueOf(size), 8, RoundingMode.HALF_DOWN);
+
+        memberList.forEach(item -> {
+            dappWalletService.updateWalletMineWithLock(perProfit, item.getId(), 1);
+
+            DappFundFlowEntity profitFlow = new DappFundFlowEntity(item.getId(), perProfit, 12, 2, null, null);
+            dappFundFlowDao.insert(profitFlow);
+        });
+    }
+
+    @Override
+    public void levelProfit(Long id) {
+        DappSystemProfit dappSystemProfit = dappSystemProfitDao.selectById(id);
+        if(ObjectUtil.isEmpty(dappSystemProfit)){
+            return;
+        }
+        Long memberId = dappSystemProfit.getMemberId();
+        //获取用户的上级用户信息
+        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+        if(ObjectUtil.isEmpty(dappMemberEntity)){
+            return;
+        }
+        String refererIds = dappMemberEntity.getRefererIds();
+        if(StrUtil.isEmpty(refererIds)){
+            return;
+        }
+        DataDictionaryCustom levelProfitSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_PROFIT.getType(), DataDictionaryEnum.LEVEL_PROFIT.getCode());
+        BigDecimal levelProfit = new BigDecimal(StrUtil.isEmpty(levelProfitSet.getValue()) ? "0.3" : levelProfitSet.getValue());
+        //投入金额减去技术方收益
+        DataDictionaryCustom systemProfitSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SYSTEM_PROFIT.getType(), DataDictionaryEnum.SYSTEM_PROFIT.getCode());
+        BigDecimal systemProfit = new BigDecimal(StrUtil.isEmpty(systemProfitSet.getValue()) ? "0.05" : systemProfitSet.getValue());
+        BigDecimal amount = dappSystemProfit.getAmount().subtract(systemProfit);
+        //层级奖励总奖金
+        BigDecimal levelProfitTotal = amount.multiply(levelProfit);
+        //实发层级奖励 -- 如果还有剩余给技术方
+        BigDecimal systemProfitTotal = BigDecimal.ZERO;
+        //返回十层
+        List<String> refererIdList = StrUtil.split(refererIds, ',');
+        //i:计数层数,同时i也为对应层数应推广的人数,当达到对应的直推人数时,才能获取对应层级奖励
+        for(int i = 0;i < 10; i++){
+            if(systemProfitTotal.compareTo(levelProfitTotal) < 0){
+                String inviteId = refererIdList.get(i);
+                //获取每层用户的直推人数,判断能否获得这个层级的层级奖励
+                DappMemberEntity refererMember = dappMemberDao.selectMemberInfoByInviteId(inviteId);
+                //获取直推用户数量
+                QueryWrapper<DappMemberEntity> objectQueryWrapper = new QueryWrapper<>();
+                objectQueryWrapper.eq("referer_id",refererMember.getInviteId());
+                Integer selectCount = dappMemberDao.selectCount(objectQueryWrapper);
+                if(i > selectCount){
+                    continue;
+                }
+                //获取对应层级奖励
+                BigDecimal profit = LevelProfitEnum.YI.getProfit(i);
+                BigDecimal memberLevelProfit = levelProfitTotal.multiply(profit);
+
+                DappFundFlowEntity fundFlow = new DappFundFlowEntity(refererMember.getId(), memberLevelProfit, 4, 2, BigDecimal.ZERO,null,dappSystemProfit.getId());
+                dappFundFlowDao.insert(fundFlow);
+                systemProfitTotal = systemProfitTotal.add(memberLevelProfit);
+            }
+        }
+        //如果还有剩余给技术方
+        if(levelProfitTotal.compareTo(systemProfitTotal) > 0){
+            BigDecimal avaProfit = levelProfitTotal.subtract(systemProfit);
+            DappFundFlowEntity fundFlow = new DappFundFlowEntity(memberId, avaProfit, 5, 2, BigDecimal.ZERO,null,dappSystemProfit.getId());
+            dappFundFlowDao.insert(fundFlow);
+        }
+    }
+
+    @Override
+    public void memberOut(Long id) {
+        //获取当前是第几轮队列
+        //判断当前是否符合出局条件
+        //符合则出局,轮数+1
+    }
+
+    public static void main(String[] args) {
+        String refererIds = "1,2,3,4,5," +
+                            "6,7,8,9,10," +
+                            "11,12,13,14,15";
+        List<String> refererIdList = StrUtil.split(refererIds, ',');
+        System.out.println(refererIdList);
+    }
 }

--
Gitblit v1.9.1