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 |   79 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 78 insertions(+), 1 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 57cae47..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
@@ -9,6 +9,7 @@
 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;
@@ -19,7 +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;
@@ -47,6 +50,7 @@
     private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao;
     private final DappWalletService dappWalletService;
     private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
+    private final DappSystemProfitDao dappSystemProfitDao;
 
 
     @Override
@@ -273,7 +277,7 @@
         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), 2, RoundingMode.HALF_DOWN);
+        BigDecimal perProfit = totalProfit.divide(BigDecimal.valueOf(size), 8, RoundingMode.HALF_DOWN);
 
         memberList.forEach(item -> {
             dappWalletService.updateWalletMineWithLock(perProfit, item.getId(), 1);
@@ -282,4 +286,77 @@
             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