From d3b5f1f6ac64af873ba200534d39bd31709a1a28 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Fri, 03 Jan 2025 16:28:45 +0800
Subject: [PATCH] feat(mall): 增加会员升级权益功能
---
src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java | 4 ++--
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 54 +++++++++++++++++++++++++++++++++++++++++++++++++-----
2 files changed, 51 insertions(+), 7 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 c9764ef..4596450 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
@@ -23,10 +23,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,6 +45,7 @@
private final AgentProducer agentProducer;
private final RunNodeSetMapper runNodeSetMapper;
private final AsyncService asyncService;
+ private final RunVipGrowMapper runVipGrowMapper;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -315,9 +314,54 @@
@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){
+ runVipGrow = new RunVipGrow();
+ runVipGrow.setMemberId(memberId);
+ runVipGrow.setLevelNow(mallMember.getLevel());
+ runVipGrow.setLevelNext(runVipNext.getVipCode());
+ runVipGrow.setAmountAll(runVipNext.getPresentPrice());
+ runVipGrow.setAmount(amount);
+ runVipGrow.setAmountNow(amount);
+ runVipGrowMapper.insert(runVipGrow);
+ }
+ }
+ }
+ //更新会员的等级和会员升级的时间
mallMemberMapper.updateVipLevelTimeAndLevel(memberId,DateUtil.date(),vipCode);
agentProducer.sendNodeUpMsg(memberId);
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java
index b1ee2da..dd07c6f 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java
@@ -661,8 +661,8 @@
mallCharge.setVipCode(runVipGrow.getLevelNext());
}
}else{
- if(runVipGrow.getAmountAll().compareTo(amount) <= 0){
- mallCharge.setVipCode(runVipGrow.getLevelNext());
+ if(runVipNext.getPresentPrice().compareTo(amount) <= 0){
+ mallCharge.setVipCode(runVipNext.getVipCode());
}
}
--
Gitblit v1.9.1