| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | |
| | | 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("###订单分红消息结束执行###"); |
| | | } |
| | | } |