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