From d83a4cf0935d2dbcdf87ff670f26b574a1de2a49 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Wed, 12 Mar 2025 11:46:49 +0800
Subject: [PATCH] refactor(mall): 优化团队人数检查逻辑
---
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 138 +++++++++++++++++++++++++++++++++++++++------
1 files changed, 118 insertions(+), 20 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
index 2aea39f..7a5a0a9 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -1,17 +1,11 @@
package cc.mrbird.febs.mall.service.impl;
-import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
-import cc.mrbird.febs.common.enumerates.RunVipDataDictionaryEnum;
-import cc.mrbird.febs.common.enumerates.YesOrNoEnum;
+import cc.mrbird.febs.common.enumerates.*;
+import cc.mrbird.febs.common.utils.MallUtils;
import cc.mrbird.febs.mall.dto.ApiMemberChargeFailDto;
import cc.mrbird.febs.mall.entity.*;
-import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
-import cc.mrbird.febs.mall.mapper.MallChargeMapper;
-import cc.mrbird.febs.mall.mapper.MallMemberMapper;
-import cc.mrbird.febs.mall.mapper.RunVipMapper;
-import cc.mrbird.febs.mall.service.IAgentService;
-import cc.mrbird.febs.mall.service.IApiMallMemberService;
-import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
+import cc.mrbird.febs.mall.mapper.*;
+import cc.mrbird.febs.mall.service.*;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
@@ -25,10 +19,8 @@
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
+import java.math.RoundingMode;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -47,11 +39,15 @@
private final IApiMallMemberWalletService walletService;
private final IApiMallMemberService mallMemberService;
private final AgentProducer agentProducer;
+ private final RunNodeSetMapper runNodeSetMapper;
+ private final AsyncService asyncService;
+ private final RunVipGrowMapper runVipGrowMapper;
+ private final IMallMoneyFlowService mallMoneyFlowService;
@Override
@Transactional(rollbackFor = Exception.class)
public void autoUpAgentLevel(Long memberId) {
- MallMember member = mallMemberMapper.selectById(memberId);
+ MallMember member =mallMemberMapper.selectById(memberId);
if(StrUtil.isBlank(member.getReferrerIds())) {
return;
}
@@ -247,16 +243,20 @@
return;
}
- // 检查直推人数
+ // 检查直推人数(有效的直推人数)
long directCount = allMembers.stream()
- .filter(member -> mallMember.getInviteId().equals(member.getReferrerId()))
+ .filter(member -> mallMember.getInviteId().equals(member.getReferrerId())
+ && !"YOUKE".equals(member.getLevel()))
.count();
if (directCount < directCnt) {
return;
}
- // 检查团队人数
- if (allMembers.size() < teamCnt) {
+ // 检查团队人数(有效的团队人数)
+ long allMembersCount = allMembers.stream()
+ .filter(member -> !"YOUKE".equals(member.getLevel()))
+ .count();
+ if (allMembersCount < teamCnt) {
return;
}
@@ -269,6 +269,7 @@
new LambdaQueryWrapper<MallCharge>()
.in(MallCharge::getMemberId, memberIds)
.eq(MallCharge::getState, YesOrNoEnum.YES.getValue())
+ .ge(MallCharge::getCreatedTime, mallMember.getDirectorTime())
);
BigDecimal totalCharge = mallCharges.stream()
@@ -282,19 +283,92 @@
mallMember.setDirector(YesOrNoEnum.YES.getValue());
mallMember.setDirectorTime(DateUtil.date());
mallMemberMapper.updateById(mallMember);
+
+ //获取节点设置
+ List<RunNodeSet> runNodeSets = runNodeSetMapper.selectList(null);
+ //获取总业绩
+ BigDecimal nodePercent = getNodePercent(runNodeSets, totalCharge);
+ if(nodePercent.compareTo(BigDecimal.ZERO) >= 0){
+ asyncService.releaseNodeCoin(totalCharge,nodePercent,memberId);
+ }
} catch (Exception e) {
// 记录日志并处理异常
log.error("会员升级节点失败: {}", memberId, e);
throw new RuntimeException("会员升级节点失败", e);
}
}
+
+ private BigDecimal getNodePercent(List<RunNodeSet> runNodeSets, BigDecimal directAchieve) {
+ BigDecimal percent = BigDecimal.ZERO;
+ //获取directAchieve在runNodeSets中哪一个位置
+ for(RunNodeSet item : runNodeSets){
+ BigDecimal minAchieve = item.getMinAchieve();
+ BigDecimal maxAchieve = item.getMaxAchieve();
+ BigDecimal nodePercent = new BigDecimal(item.getNodePercent());
+ if(directAchieve.compareTo(minAchieve) >= 0 && directAchieve.compareTo(maxAchieve) < 0){
+ percent = nodePercent;
+ break;
+ }
+ }
+ return percent;
+ }
@Override
public void buyVipSuccessMsg(Long chargeId) {
MallCharge mallCharge = mallChargeMapper.selectById(chargeId);
- //更新会员的等级和会员升级的时间
+
Long memberId = mallCharge.getMemberId();
String vipCode = mallCharge.getVipCode();
+
+ //判断mallCharge.getVipName()的最后两个字符是否等于“权益”
+ if("权益".equals(mallCharge.getVipName().substring(mallCharge.getVipName().length()-2,mallCharge.getVipName().length()))){
+ MallMember mallMember = mallMemberMapper.selectById(memberId);
+
+ RunVipGrow runVipGrow = runVipGrowMapper.selectOne(
+ new LambdaQueryWrapper<RunVipGrow>()
+ .eq(RunVipGrow::getMemberId, memberId)
+ .eq(RunVipGrow::getLevelNow, mallMember.getLevel())
+ );
+ BigDecimal amount = mallCharge.getAmount();
+ //有升级权益的记录
+ if(runVipGrow != null){
+ //判断金额是否满足升级条件
+ BigDecimal amountNow = runVipGrow.getAmountNow();
+ BigDecimal amountAll = runVipGrow.getAmountAll();
+ BigDecimal subtract = amountAll.subtract(amountNow);
+
+ if(subtract.compareTo(amount) <= 0){
+ runVipGrow.setAmountNow(amountAll);
+ }else{
+ runVipGrow.setAmountNow(amountNow.add(amount).setScale(2, RoundingMode.DOWN));
+ }
+ runVipGrow.setAmount(amount);
+ runVipGrowMapper.updateById(runVipGrow);
+ }else{
+ List<RunVip> runVips = runVipMapper.selectList(null);
+ Map<String, RunVip> runVipMap = runVips.stream()
+ .collect(Collectors.toMap(RunVip::getVipCode, runVip -> runVip));
+
+ RunVip runVipNow = runVipMap.get(mallMember.getLevel());
+ RunVip runVipNext = runVips.stream().filter(runVip -> runVip.getOrderNumber() == runVipNow.getOrderNumber() + 1).findFirst().orElse(null);
+ if(null != runVipNext){
+ BigDecimal add = runVipNow.getPresentPrice().add(amount);
+
+ runVipGrow = new RunVipGrow();
+ runVipGrow.setMemberId(memberId);
+ runVipGrow.setLevelNow(mallMember.getLevel());
+ runVipGrow.setLevelNext(runVipNext.getVipCode());
+ runVipGrow.setAmountAll(runVipNext.getPresentPrice());
+ runVipGrow.setAmount(add);
+ runVipGrow.setAmountNow(add);
+ runVipGrowMapper.insert(runVipGrow);
+ }
+ }
+ }
+ //更新会员的等级和会员升级的时间
mallMemberMapper.updateVipLevelTimeAndLevel(memberId,DateUtil.date(),vipCode);
+
+ //直推权益
+ asyncService.directCoin(mallCharge.getAmount(),memberId);
agentProducer.sendNodeUpMsg(memberId);
}
@@ -329,4 +403,28 @@
MallMember graMember = mallMemberMapper.selectInfoByInviteId(parentMember.getReferrerId());
NodeUp(graMember.getId(),directCnt,teamCnt,achieveCnt);
}
+
+ @Override
+ public void chargeSuccessMsg(Long chargeId) {
+
+ MallCharge mallCharge = mallChargeMapper.selectById(chargeId);
+ if(null == mallCharge){
+ return;
+ }
+ Long memberId = mallCharge.getMemberId();
+ BigDecimal amount = mallCharge.getAmount();
+
+ walletService.addCommission(amount, memberId);
+ String orderNo = MallUtils.getOrderNum("C");
+ mallMoneyFlowService.runVipMoneyFlowAdd(
+ memberId,
+ memberId,
+ orderNo,
+ FlowTypeEnum.COMMISSION.getValue(),
+ RunVipMoneyFlowTypeEnum.COMMISSION_PAY_CHARGE.getValue(),
+ amount,
+ StrUtil.format(RunVipMoneyFlowTypeEnum.COMMISSION_PAY_CHARGE.getDescription(),amount),
+ YesOrNoEnum.YES.getValue()
+ );
+ }
}
--
Gitblit v1.9.1