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/rabbit/enumerates/RabbitQueueEnum.java             |    4 +
 src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java              |   21 +++++++
 src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java                 |   10 +++
 src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java            |    9 ++-
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |    2 
 src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java     |   98 ++++++++++++++++++++++++++++----
 src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java               |    1 
 src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java                |    6 ++
 src/main/java/cc/mrbird/febs/mall/entity/MallSystemSetting.java                 |    2 
 src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java             |    2 
 src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java             |    2 
 11 files changed, 141 insertions(+), 16 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java
index 7079411..e1f7784 100644
--- a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java
+++ b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java
@@ -164,4 +164,25 @@
     }
     //强制卖出 end
 
+
+    /**
+     * 订单分红
+     * @return
+     */
+    //订单分红 start
+    @Bean
+    public DirectExchange orderBonusExchange() {
+        return new DirectExchange(RabbitQueueEnum.ORDER_BONUS.getExchange());
+    }
+
+    @Bean
+    public Queue orderBonusQueue() {
+        return new Queue(QueueConstants.ORDER_BONUS);
+    }
+
+    @Bean
+    public Binding orderBonusBind() {
+        return BindingBuilder.bind(orderBonusQueue()).to(orderBonusExchange()).with(RabbitQueueEnum.ORDER_BONUS.getRoute());
+    }
+    //订单分红 end
 }
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java
index 00cdf65..87e697a 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java
@@ -33,7 +33,7 @@
         return strs;
     }
 
-    public int getLevelCode(String Level){
+    public static int getLevelCode(String Level){
         int codeOne = 0;
         for (MemberLevelEnum value : MemberLevelEnum.values()) {
             if(value.type.equals(Level)){
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallSystemSetting.java b/src/main/java/cc/mrbird/febs/mall/entity/MallSystemSetting.java
index 357b52c..be25b12 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallSystemSetting.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallSystemSetting.java
@@ -21,4 +21,6 @@
     private BigDecimal allBonus;
 
     private BigDecimal agentBonus;
+
+    private Integer revision;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java b/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
index d2dbc4c..79605fa 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
@@ -18,4 +18,6 @@
     void agentProfit(Integer type);
 
     void allInternetProfit();
+
+    void orderBonus(Long orderId);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
index 343bd91..a74ef42 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -101,9 +101,12 @@
         }
 
         MallMember parentMember = memberMapper.selectById(parentNode.getMemberId());
-        parentMember.setChildNodeCnt(parentNode.CHILD.size());
-        parentMember.setLevel(dic.getCode());
-        memberMapper.updateById(parentMember);
+        int levelCode = MemberLevelEnum.getLevelCode(parentMember.getLevel());
+        if (Integer.parseInt(dic.getValue()) > levelCode) {
+            parentMember.setChildNodeCnt(parentNode.CHILD.size());
+            parentMember.setLevel(dic.getCode());
+            memberMapper.updateById(parentMember);
+        }
     }
 
     /**
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 571b04f..37608dc 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -374,6 +374,8 @@
                 agentProducer.sendAutoLevelUpMsg(member.getId());
                 //发送直推返利消息
                 agentProducer.sendOrderReturn(orderInfo.getId());
+                // 发送分红消息
+                agentProducer.sendOrderBonus(orderInfo.getId());
                 break;
             case "4":
                 if (orderInfo.getOrderType() != 2) {
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 c755ee4..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
@@ -7,8 +7,11 @@
 import cc.mrbird.febs.mall.service.*;
 import cc.mrbird.febs.rabbit.producter.AgentProducer;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -30,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;
 
@@ -406,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("###订单分红消息结束执行###");
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
index 374da9b..2decbc2 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
@@ -10,6 +10,7 @@
     public static final String AGENT_AUTO_LEVEL_UP = "meye_queue_agent_auto_level_up";
     public static final String AGENT_RETURN_MONEY = "meye_queue_agent_return_money";
     public static final String ORDER_RETURN_MONEY = "meye_queue_order_return_money";
+    public static final String ORDER_BONUS = "meye_queue_order_bonus";
     /**
      * 补贴金额 ,
      *      分享补贴,星级补贴
diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
index dfd775b..8036bf5 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
@@ -58,4 +58,14 @@
         }
     }
 
+    @RabbitListener(queues = QueueConstants.ORDER_BONUS)
+    public void calOrderBonus(String orderId) {
+        log.info("收到订单分红消息:{}", orderId);
+        try {
+            memberProfitService.orderBonus(Long.parseLong(orderId));
+        } catch (Exception e) {
+            log.error("订单分红消息异常:", e);
+        }
+    }
+
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
index 831ca17..8e3e72a 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
@@ -24,6 +24,10 @@
             "meye_route_key_order_return_money",
             "meye_queue_order_return_money"),
 
+    ORDER_BONUS("meye_exchange_order_bonus",
+            "meye_route_key_order_bonus",
+            "meye_queue_order_bonus"),
+
     PERK_MONEY("meye_exchange_perk_money",
             "meye_route_key_perk_money",
             "meye_queue_perk_money"),
diff --git a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
index e44c1a2..a7552a4 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
@@ -86,4 +86,10 @@
         log.info("发送强制卖出消息,价格:{}",value);
         rabbitTemplate.convertAndSend(RabbitQueueEnum.FORCE_VOUCHER_SALE.getExchange(), RabbitQueueEnum.FORCE_VOUCHER_SALE.getRoute(),value);
     }
+
+
+    public void sendOrderBonus(Long orderId) {
+        log.info("发送订单分红消息:{}", orderId);
+        rabbitTemplate.convertAndSend(RabbitQueueEnum.ORDER_BONUS.getExchange(), RabbitQueueEnum.ORDER_BONUS.getRoute(), orderId);
+    }
 }

--
Gitblit v1.9.1