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