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 | 171 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 137 insertions(+), 34 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..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; @@ -287,8 +276,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 +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; @@ -363,18 +383,101 @@ 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); }); } 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