From c8553669f87a7bc4df3b2279ad4473b6b212a127 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Wed, 15 Mar 2023 14:46:42 +0800 Subject: [PATCH] 后台修改 --- src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java | 183 ++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 177 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..7411b14 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,13 @@ 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 cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; @@ -33,6 +32,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; +import java.util.stream.Collectors; /** * @author wzy @@ -54,6 +54,8 @@ private final MallAchieveRecordMapper mallAchieveRecordMapper; private final RedisUtils redisUtils; private final MallMemberWalletMapper mallMemberWalletMapper; + private final IAgentService iAgentService; + private final IMallMoneyFlowService mallMoneyFlowService; @Override @Transactional(rollbackFor = Exception.class) @@ -146,7 +148,8 @@ @Override public void dynamicProfit(Long orderId) { - dynamicProfit(orderId, 2); + return; +// dynamicProfit(orderId, 2); } /** @@ -284,7 +287,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 +577,172 @@ +";人数:"+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()); + + 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()); + + mallMemberWalletMapper.addBalanceById(teamEqualsPerkAmount, mallMemberWallet.getId()); + + mallMoneyFlowService.addMoneyFlow( + adminTeamEqualsPerkVo.getRtMemberId(), + teamEqualsPerkAmount, + MoneyFlowTypeEnum.TEAM_EQUALS_PERK.getValue(), + MallUtils.getOrderNum("TEP"), + FlowTypeEnum.BALANCE.getValue()); + } + } + } + } + } -- Gitblit v1.9.1