From d920824c3a0c237cb6e59bb088b3ed444bacedfd Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 17 Mar 2023 14:55:06 +0800
Subject: [PATCH] 后台修改
---
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java | 192 ++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 184 insertions(+), 8 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 1003999..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;
}
@@ -500,6 +503,13 @@
@Override
public void scorePool() {
log.info("#####==积分池==start==######");
+
+ String redisKey = "scorePool";
+// List<MallOrderInfo> mallOrderInfos = mallOrderInfoMapper.selectList(new QueryWrapper<>());
+// if(CollUtil.isEmpty(mallOrderInfos)){
+// redisUtils.set(redisKey,0,0L);
+// return;
+// }
/**
* 后一天2点,结算前一天的所有消费
* 积分池增加每日消费的10%
@@ -517,8 +527,6 @@
Date date = DateUtil.offsetDay(new Date(), -1);
BigDecimal totalAmount = mallOrderInfoMapper.selectTotalAmountByPayDoneAndDataString(1, date);
BigDecimal multiplyTotalAmount = totalAmount.multiply(everydayRatio);
-
- String redisKey = "scorePool";
String scorePoolRedis = redisUtils.getString(redisKey);
if(StrUtil.isBlank(scorePoolRedis)){
redisUtils.set(redisKey,0,0L);
@@ -569,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