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