From 836e019db92b9871cba9d440c8159b35f79e1726 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 30 Mar 2023 09:32:42 +0800 Subject: [PATCH] 根据补贴记录,减少用户贡献值 --- src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java | 227 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 221 insertions(+), 6 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 b40eef9..b71bb06 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 @@ -5,14 +5,14 @@ import cc.mrbird.febs.common.enumerates.FlowTypeEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; 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.IApiMallMemberWalletService; -import cc.mrbird.febs.mall.service.IMallAchieveService; -import cc.mrbird.febs.mall.service.IMallMoneyFlowService; -import cc.mrbird.febs.mall.service.IMemberProfitService; +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; @@ -33,6 +33,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; +import java.util.stream.Collectors; /** * @author wzy @@ -54,6 +55,10 @@ 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; @Override @Transactional(rollbackFor = Exception.class) @@ -146,7 +151,8 @@ @Override public void dynamicProfit(Long orderId) { - dynamicProfit(orderId, 2); + return; +// dynamicProfit(orderId, 2); } /** @@ -284,7 +290,7 @@ DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.AGENT_BONUS.getType(), DataDictionaryEnum.AGENT_BONUS.getCode()); BigDecimal profit = totalIncome.multiply(new BigDecimal(dic.getValue()).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP)); - List<MallMember> agentMembers = mallMemberMapper.selectByIdAndNoLevel(null, AgentLevelEnum.FIRST_LEVEL.name()); + List<MallMember> agentMembers = mallMemberMapper.selectByIdAndNoLevel(null, AgentLevelEnum.SECOND_LEVEL.name()); if (CollUtil.isEmpty(agentMembers)) { return; } @@ -574,4 +580,213 @@ +";人数:"+cnt); } + @Override + public void agentPerkJob(Date profitDate) { + /** + * 代理商补贴 + * 全体代理商 + * 前一天全部业绩的百分比用来平分 + */ + log.info("######==代理商补贴==start==####"); + + List<MallMember> mallMembersAgentPerkList = mallMemberMapper.selectMemberByDirector(1); + if (CollUtil.isEmpty(mallMembersAgentPerkList)) { + return; + } + if (profitDate == null) { + profitDate = DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, -1); + } + //前一天的总业绩 + BigDecimal agentPerkAmountSum = mallAchieveRecordMapper.selectAchieveTotal("D", profitDate); + //补贴百分比 + DataDictionaryCustom agentPerkDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.AGENT_PERK.getType(), + DataDictionaryEnum.AGENT_PERK.getCode() + ); + if(ObjectUtil.isEmpty(agentPerkDic)){ + return; + } + BigDecimal agentPerk = new BigDecimal(agentPerkDic.getValue()).multiply(new BigDecimal("0.01")); + agentPerkAmountSum = agentPerkAmountSum.multiply(agentPerk); + + BigDecimal agentPerkAmount = agentPerkAmountSum.divide(new BigDecimal(mallMembersAgentPerkList.size()), BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN); + List<Long> mallMembersAgentPerkIds = mallMembersAgentPerkList.stream().map(MallMember::getId).collect(Collectors.toList()); + List<MallMemberWallet> mallMemberWallets = mallMemberWalletMapper.selectMemberWalletsByIds(mallMembersAgentPerkIds); + iAgentService.flowTotalScoreBalance( + mallMemberWallets, + agentPerkAmount, + MoneyFlowTypeEnum.AGENT_PERK.getValue(), + MallUtils.getOrderNum("AP"), + 1L + ); + + log.info("#####==代理商补贴==end==######" + + "今日总补贴###" + agentPerkAmountSum.setScale(2, RoundingMode.HALF_UP) + +"###人均###"+agentPerkAmount.setScale(2, RoundingMode.HALF_UP) + +"###人数###"+mallMemberWallets.size()); + + + } + + @Override + public void offLinePerkJob(Date profitDate) { + /** + * 线下服务中心补贴 + * 全体线下服务商 + * 前一天团队业绩的百分比用来平分 + */ + log.info("######==线下服务中心补贴==start==####"); + + List<MallMember> mallMembersOffLinePerkList = mallMemberMapper.selectMemberByStoreMaster(1); + if (CollUtil.isEmpty(mallMembersOffLinePerkList)) { + return; + } + + //补贴百分比 + DataDictionaryCustom offLinePerkDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.OFFLINE_PERK.getType(), + DataDictionaryEnum.OFFLINE_PERK.getCode() + ); + if(ObjectUtil.isEmpty(offLinePerkDic)){ + return; + } + BigDecimal offLinePerk = new BigDecimal(offLinePerkDic.getValue()).multiply(new BigDecimal("0.01")); + + if (profitDate == null) { + profitDate = DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, -1); + } + for(MallMember mallMembersOffLinePerk : mallMembersOffLinePerkList){ + String inviteId = mallMembersOffLinePerk.getInviteId(); + //获取团队下所有成员 + List<MallMember> allMallMemberList = mallMemberMapper.selectAllChildAgentListByInviteId(inviteId); + //子团队中是否有线下服务商 + List<MallMember> storeMasterMallMemberList = mallMemberMapper.selectAllChildAgentListByInviteIdAndStoreMaster(inviteId, 1); + if(CollUtil.isNotEmpty(storeMasterMallMemberList)){ + //如果有,该子团队成员不算业绩 + List<MallMember> storeMasterMallMembers = new ArrayList<>(); + for(MallMember storeMasterMallMember : storeMasterMallMemberList){ + List<MallMember> storeMasterList = mallMemberMapper.selectAllChildAgentListByInviteId(storeMasterMallMember.getInviteId()); + storeMasterMallMembers.addAll(storeMasterList); + } + allMallMemberList.removeAll(storeMasterMallMembers); + } + + //团队下所有人的业绩 + List<Long> mallMembersOffLinePerkIds = allMallMemberList.stream().map(MallMember::getId).collect(Collectors.toList()); + + BigDecimal offLinePerkAmountSum = mallAchieveRecordMapper.selectSumAchieveByMemberIds(mallMembersOffLinePerkIds,profitDate); + //该团队产生的业绩金额 + offLinePerkAmountSum = offLinePerkAmountSum.multiply(offLinePerk).setScale(2,BigDecimal.ROUND_DOWN); + + //所有合伙人补贴至消费礼包的三倍额度需要复购一次。 + MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMembersOffLinePerk.getId()); + BigDecimal totalScore = mallMemberWallet.getTotalScore(); + if(totalScore.compareTo(offLinePerkAmountSum) < 0){ + offLinePerkAmountSum = totalScore; + } + if(BigDecimal.ZERO.compareTo(offLinePerkAmountSum) < 0){ + //减少补贴额度 + mallMemberWalletMapper.reduceTotalScoreById(offLinePerkAmountSum, mallMemberWallet.getId()); + + iAgentService.reduceStar(mallMemberWallet.getMemberId(),offLinePerkAmountSum); + + mallMemberWalletMapper.addBalanceById(offLinePerkAmountSum, mallMemberWallet.getId()); + + mallMoneyFlowService.addMoneyFlow( + mallMembersOffLinePerk.getId(), + offLinePerkAmountSum, + MoneyFlowTypeEnum.OFFLINE_PERK.getValue(), + MallUtils.getOrderNum("OLP"), + FlowTypeEnum.BALANCE.getValue()); + } + } + } + + @Override + public void teamEqualsPerkJob(Date profitDate) { + /** + * 全体用户 + * 对象:产生了收益的用户的直属上级 + * 条件:等级和用户等级一样 + * 补贴:每日补贴的10%,例如用户当日的补贴总额为100,直属上级拿100*10%=10, + * 限制:直推收益除外。 + */ + if (profitDate == null) { + profitDate = DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, -1); + } + //平级补贴百分比 + DataDictionaryCustom teamEqualsPerkDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.TEAM_EQUALS_PERK.getType(), + DataDictionaryEnum.TEAM_EQUALS_PERK.getCode()); + BigDecimal teamEqualsPerkPercent = new BigDecimal(teamEqualsPerkDic.getValue()).abs().multiply(BigDecimal.valueOf(0.01)); + + //产生了收益的用户和直属上级 + List<AdminTeamEqualsPerkVo> adminTeamEqualsPerkVos = mallMoneyFlowMapper.selectTeamEqualsMemberByDate(profitDate); + if(CollUtil.isNotEmpty(adminTeamEqualsPerkVos)){ + for(AdminTeamEqualsPerkVo adminTeamEqualsPerkVo : adminTeamEqualsPerkVos){ + BigDecimal sumAmount = adminTeamEqualsPerkVo.getSumAmount(); + //平级补贴 + BigDecimal teamEqualsPerkAmount = teamEqualsPerkPercent.multiply(sumAmount).setScale(2, BigDecimal.ROUND_DOWN); + + MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(adminTeamEqualsPerkVo.getRtMemberId()); + BigDecimal totalScore = mallMemberWallet.getTotalScore(); + if(totalScore.compareTo(teamEqualsPerkAmount) < 0){ + teamEqualsPerkAmount = totalScore; + } + if(BigDecimal.ZERO.compareTo(teamEqualsPerkAmount) < 0){ + //减少补贴额度 + mallMemberWalletMapper.reduceTotalScoreById(teamEqualsPerkAmount, mallMemberWallet.getId()); + + iAgentService.reduceStar(mallMemberWallet.getMemberId(),teamEqualsPerkAmount); + + mallMemberWalletMapper.addBalanceById(teamEqualsPerkAmount, mallMemberWallet.getId()); +// +// mallMoneyFlowService.addMoneyFlow( +// adminTeamEqualsPerkVo.getRtMemberId(), +// teamEqualsPerkAmount, +// MoneyFlowTypeEnum.TEAM_EQUALS_PERK.getValue(), +// MallUtils.getOrderNum("TEP"), +// FlowTypeEnum.BALANCE.getValue()); + + mallMoneyFlowService.addMoneyFlow( + adminTeamEqualsPerkVo.getRtMemberId(), + teamEqualsPerkAmount, + MoneyFlowTypeEnum.TEAM_EQUALS_PERK.getValue(), + MallUtils.getOrderNum("TEP"), + "平级奖励补贴", + "补贴额度:"+mallMemberWallet.getTotalScore(), + adminTeamEqualsPerkVo.getMemberId(), + 2, + FlowTypeEnum.BALANCE.getValue(), + 1); + } + } + } + } + + + @Override + public void mqPerkRetryJob() { + /** + * 每次拿重试次数大于零 + * 按ID asc排序的十条数据 + */ + List<MallMqRecord> mallMqRecords = mallMqRecordMapper.selectByStateLimitTen(2); + if(CollUtil.isEmpty(mallMqRecords)){ + return; + } + for(MallMqRecord mallMqRecord : mallMqRecords){ + Integer retryTimes = mallMqRecord.getRetryTimes(); + if(retryTimes <= 0){ + continue; + } + retryTimes = retryTimes - 1; + mallMqRecord.setRetryTimes(retryTimes); + mallMqRecordMapper.updateById(mallMqRecord); + + Long orderId = mallMqRecord.getOrderId(); + agentProducer.sendPerkMoneyMsg(orderId); + } + } + } -- Gitblit v1.9.1