From 3916de9410192ea8728ebd15c124585d4514825c Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Mon, 24 Apr 2023 00:53:29 +0800
Subject: [PATCH] fix

---
 src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java |   66 ++++++++++++++++++++++----------
 1 files changed, 45 insertions(+), 21 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
index f3b48a0..f428f1b 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -1,28 +1,14 @@
 package cc.mrbird.febs.mall.service.impl;
 
 import cc.mrbird.febs.common.enumerates.*;
-import cc.mrbird.febs.common.utils.AppContants;
-import cc.mrbird.febs.common.utils.MallUtils;
 import cc.mrbird.febs.common.utils.RedisUtils;
-import cc.mrbird.febs.mall.dto.ScorePoorDto;
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
 import cc.mrbird.febs.mall.service.*;
-import cc.mrbird.febs.mall.vo.AdminTeamEqualsPerkVo;
 import cc.mrbird.febs.rabbit.producter.AgentProducer;
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DateField;
-import cn.hutool.core.date.DateTime;
-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 cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.models.auth.In;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -31,7 +17,6 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * @author wzy
@@ -80,16 +65,24 @@
             log.info("积分订单无返利");
             return;
         }
-        BigDecimal indirectPer = BigDecimal.valueOf(0.2);
+        BigDecimal indirectPer = BigDecimal.valueOf(0.25);
         BigDecimal indirectPer2 = BigDecimal.valueOf(0.15);
 
         MallMember member = mallMemberMapper.selectById(orderInfo.getMemberId());
 
         // 父级会员
         MallMember parentMember = mallMemberMapper.selectInfoByInviteId(member.getReferrerId());
+        if (parentMember == null) {
+            return;
+        }
+
+        if (parentMember.getAccountLevel() == 0 || MemberLevelEnum.ZERO_LEVEL.getType().equals(parentMember.getLevel())) {
+            log.info("上级:{}未购买会员套餐,无返利", parentMember.getInviteId());
+            return;
+        }
 
         // 父级会员直推人数
-        Integer directCnt = mallMemberMapper.selectOwnCntByInviteId(parentMember.getInviteId());
+        Integer directCnt = mallMemberMapper.selectOwnCntByInviteIdAndAccountLevel(parentMember.getInviteId(), parentMember.getAccountLevel());
         List<DataDictionaryCustom> dataDices = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.DIRECT_BONUS_SETTING.getType());
 
         directCnt = directCnt == null ? 0 : directCnt;
@@ -287,8 +280,39 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void agentProfit() {
+    public void agentProfit(Integer type) {
         log.info("#####==代理分红==start==#####");
+        if (type == null) {
+            return;
+        }
+        
+        MallSystemSetting systemSetting = mallSystemSettingMapper.selectById(1L);
+        if (systemSetting == null) {
+            log.info("没有系统配置");
+            return;
+        }
+
+        BigDecimal hundred = BigDecimal.valueOf(100);
+        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.AGENT_BONUS_RELEASE.getType(), DataDictionaryEnum.AGENT_BONUS_RELEASE.getCode());
+        if (dic == null || StrUtil.isBlank(dic.getValue()) || Integer.parseInt(dic.getValue()) == 0) {
+            log.info("不进行全网分红");
+            return;
+        }
+
+        // 全网分红
+        BigDecimal waitToBonus = systemSetting.getAllBonus().multiply(new BigDecimal(dic.getValue()).divide(hundred, 2, RoundingMode.HALF_UP));
+
+        // 代理
+        List<MallMember> mallMembers = mallMemberMapper.selectAgentOrPartnetMemberList(type);
+        if (CollUtil.isEmpty(mallMembers) || waitToBonus.compareTo(BigDecimal.ZERO) < 1) {
+            log.info("待分红金额不足或会员不足");
+            return;
+        }
+
+        BigDecimal perBonus = waitToBonus.divide(new BigDecimal(mallMembers.size()), 2, RoundingMode.HALF_UP);
+        mallMembers.forEach(item -> {
+            changeScoreAndCommission(item.getId(), perBonus, type.equals(AccountLevelEnums.VVIP.getLevel()) ? MoneyFlowTypeEnum.AGENT_BONUS.getValue() : MoneyFlowTypeEnum.PARTNER_BONUS.getValue(), null);
+        });
 
         log.info("#####==代理分红==end==#####");
     }
@@ -327,7 +351,7 @@
 
         // 全网分红
         BigDecimal waitToBonus = systemSetting.getAllBonus().multiply(new BigDecimal(dic.getValue()).divide(hundred, 2, RoundingMode.HALF_UP));
-        List<MallMember> mallMembers = mallMemberMapper.selectMemberAfterLevelList(MemberLevelEnums.FIRST_LEVEL_Y.getCode());
+        List<MallMember> mallMembers = mallMemberMapper.selectMemberAfterLevelList(MemberLevelEnum.FIRST_LEVEL.getType());
         if (CollUtil.isEmpty(mallMembers) || waitToBonus.compareTo(BigDecimal.ZERO) < 1) {
             log.info("待分红金额不足或会员不足");
             return;
@@ -363,14 +387,14 @@
         for (Map.Entry<String, List<MallMember>> entry : levelMemberMap.entrySet()) {
             BigDecimal levelBonus = levelBonusMap.get(entry.getKey());
             List<MallMember> memberList = entry.getValue();
-            
+
             if (CollUtil.isEmpty(memberList) || levelBonus.compareTo(BigDecimal.ZERO) < 1) {
                 continue;
             }
 
             BigDecimal perBonus = levelBonus.divide(BigDecimal.valueOf(memberList.size()), 2, RoundingMode.HALF_UP);
             memberList.forEach(item -> {
-                changeScoreAndCommission(item.getId(), perBonus, 2, null);
+                changeScoreAndCommission(item.getId(), perBonus, MoneyFlowTypeEnum.ALL_INTERNET_BONUS.getValue(), null);
             });
         }
 

--
Gitblit v1.9.1