From 13a83a82de868164ba4eb7d109e978d386df8ffa Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Mon, 24 Apr 2023 22:24:48 +0800
Subject: [PATCH] fix

---
 src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java |  134 ++++++++++++++++++++++++++++++++++----------
 1 files changed, 103 insertions(+), 31 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 9290189..d5d226e 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,17 @@
 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.RandomUtil;
 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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -31,7 +20,6 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * @author wzy
@@ -45,21 +33,9 @@
     private final MallMemberMapper mallMemberMapper;
     private final MallOrderInfoMapper mallOrderInfoMapper;
     private final MallOrderItemMapper mallOrderItemMapper;
-    private final MallGoodsMapper mallGoodsMapper;
     private final IApiMallMemberWalletService walletService;
     private final IMallMoneyFlowService moneyFlowService;
     private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
-    private final MallMoneyFlowMapper mallMoneyFlowMapper;
-    private final MallAchieveRecordMapper mallAchieveRecordMapper;
-    private final RedisUtils redisUtils;
-    private final MallMemberWalletMapper mallMemberWalletMapper;
-    private final IAgentService iAgentService;
-    private final IMallMoneyFlowService mallMoneyFlowService;
-    private final MallMqRecordMapper mallMqRecordMapper;
-    private final AgentProducer agentProducer;
-    private final MallScoreRecordMapper mallScoreRecordMapper;
-    private final MallScoreAchieveReleaseMapper mallScoreAchieveReleaseMapper;
-    private final MallScoreVoucherMapper mallScoreVoucherMapper;
 
     private final MallSystemSettingMapper mallSystemSettingMapper;
 
@@ -73,6 +49,7 @@
      * @param orderId
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void directProfit(Long orderId) {
         log.info("######直推奖励, 订单ID:{}######", orderId);
         MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(orderId);
@@ -80,16 +57,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;
@@ -128,7 +113,7 @@
                     isSameLevel = 1;
                     // 非代理推代理/非股东推股东
                 } else {
-                    profitPer = BigDecimal.valueOf(0.1);
+                    profitPer = BigDecimal.valueOf(10);
                     isSameLevel = 2;
                 }
             }
@@ -150,6 +135,10 @@
 
             // 非代理推代理
             if (isSameLevel == 2) {
+                if (StrUtil.isBlank(parentMember.getReferrerIds())) {
+                    continue;
+                }
+
                 List<MallMember> mallMembers = mallMemberMapper.selectParentMemberList(StrUtil.split(parentMember.getReferrerIds(), ','), parentMember.getReferrerId(), 2);
                 if (CollUtil.isEmpty(mallMembers)) {
                     continue;
@@ -358,7 +347,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;
@@ -408,4 +397,87 @@
 
         log.info("###全网分红执行--end--###");
     }
+
+    @Override
+    public void orderBonus(Long orderId) {
+        log.info("###订单分红消息开始执行###");
+        MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(orderId);
+        if (orderInfo.getOrderType() == 2) {
+            log.info("积分订单无返利");
+            return;
+        }
+
+        List<MallOrderItem> items = mallOrderInfoMapper.getMallOrderItemByOrderId(orderId);
+
+        if (CollUtil.isEmpty(items)) {
+            return;
+        }
+
+
+        DataDictionaryCustom allInternetBonusDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.ALL_INTERNET_BONUS.getType(), DataDictionaryEnum.ALL_INTERNET_BONUS.getCode());
+        DataDictionaryCustom agentBonusDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.AGENT_ALL_BONUS.getType(), DataDictionaryEnum.AGENT_ALL_BONUS.getCode());
+        DataDictionaryCustom partnerBonusDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.PARNER_ALL_BONUS.getType(), DataDictionaryEnum.PARNER_ALL_BONUS.getCode());
+
+        String id = RandomUtil.randomNumbers(16);
+
+        // 全网分红
+        BigDecimal totalBonus = BigDecimal.ZERO;
+
+        // 代理/股东分红
+        BigDecimal agentTotalBonus = BigDecimal.ZERO;
+        BigDecimal hundred = new BigDecimal(100);
+        for (MallOrderItem item : items) {
+            // 减去成本后算收益
+            BigDecimal amount = item.getPrice().subtract(item.getCostPrice()).multiply(BigDecimal.valueOf(item.getCnt()));
+            if (amount.compareTo(BigDecimal.ZERO) < 1) {
+                continue;
+            }
+
+            if (item.getIsNormal() == 2) {
+                BigDecimal bonus = amount.multiply(BigDecimal.valueOf(item.getNormalBonus()).divide(hundred, 2, RoundingMode.HALF_UP));
+                log.info("{}-普通商品分红:{}, 明细ID:{}", id, bonus, item.getId());
+
+                totalBonus = totalBonus.add(bonus);
+            } else {
+                BigDecimal bonus = amount.multiply(new BigDecimal(allInternetBonusDic.getValue()).divide(hundred, 2, RoundingMode.HALF_UP));
+                log.info("{}-套餐全网分红:{}, 明细ID:{}", id,  bonus, item.getId());
+
+                totalBonus = totalBonus.add(bonus);
+
+
+                BigDecimal agentBonus = amount.multiply(new BigDecimal(agentBonusDic.getValue()).divide(hundred, 2, RoundingMode.HALF_UP));
+                log.info("{}-套餐代理分红:{}, 明细ID:{}", id,  agentBonus, item.getId());
+
+                BigDecimal partnerBonus = amount.multiply(new BigDecimal(partnerBonusDic.getValue()).divide(hundred, 2, RoundingMode.HALF_UP));
+                log.info("{}-套餐股东分红:{}, 明细ID:{}", id,  partnerBonus, item.getId());
+
+                agentTotalBonus = agentTotalBonus.add(agentBonus).add(partnerBonus);
+            }
+        }
+
+        boolean flag = false;
+
+        int index = 0;
+        while (!flag) {
+            MallSystemSetting setting = mallSystemSettingMapper.selectById(1L);
+            if (setting == null) {
+                return;
+            }
+
+            setting.setAllBonus(setting.getAllBonus().add(totalBonus));
+            setting.setAgentBonus(setting.getAgentBonus().add(agentTotalBonus));
+            setting.setRevision(setting.getRevision() + 1);
+
+            LambdaQueryWrapper<MallSystemSetting> update = new LambdaQueryWrapper<>();
+            update.eq(MallSystemSetting::getId, setting.getId())
+                    .eq(MallSystemSetting::getRevision, setting.getRevision());
+            int i = mallSystemSettingMapper.update(setting, update);
+            if (i > 0 || index > 2) {
+                flag = true;
+            }
+            index++;
+        }
+
+        log.info("###订单分红消息结束执行###");
+    }
 }

--
Gitblit v1.9.1