From e6be1946f0a669385d5c27743c3d96113af6bf5a Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Tue, 14 Jan 2025 09:43:21 +0800 Subject: [PATCH] fix(mall): 修复直推成员缓存逻辑 --- src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java | 67 +++++++++++++++++++-------------- 1 files changed, 39 insertions(+), 28 deletions(-) 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..d46432f 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 @@ -33,7 +33,6 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -105,10 +104,12 @@ .orderByDesc(RunVipGrow::getId) ).stream().findFirst().orElse(null); if(runVipGrow != null){ - BigDecimal amountNow = runVipGrow.getAmountNow(); - reduceAmount = reduceAmount.add(amountNow); + reduceAmount = runVipGrow.getAmountNow(); } presentAmount = presentAmount.subtract(reduceAmount); + if(BigDecimal.ZERO.compareTo(presentAmount) >= 0){ + throw new FebsException("支付异常,请刷新页面重试"); + } Long addressId = apiGoChargeDto.getAddressId(); MallMemberPayment mallMemberPayment = mallMemberPaymentMapper.selectById(addressId); @@ -202,10 +203,12 @@ .orderByDesc(RunVipGrow::getId) ).stream().findFirst().orElse(null); if(runVipGrow != null){ - BigDecimal amountNow = runVipGrow.getAmountNow(); - reduceAmount = reduceAmount.add(amountNow); + reduceAmount = runVipGrow.getAmountNow(); } presentAmount = presentAmount.subtract(reduceAmount); + if(BigDecimal.ZERO.compareTo(presentAmount) >= 0){ + throw new FebsException("支付异常,请刷新页面重试"); + } MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); if(mallMemberWallet.getCommission().compareTo(BigDecimal.ZERO) <= 0){ @@ -493,7 +496,7 @@ if(runVipNext == null){ throw new FebsException("无法升级会员权益"); } - if(runVip.getOrderNumber() < runVipNext.getOrderNumber()){ + if(runVip.getOrderNumber() >= runVipNext.getOrderNumber()){ throw new FebsException("用户无法升级"); } @@ -535,40 +538,32 @@ BigDecimal subtract = amountAll.subtract(amountNow); if(subtract.compareTo(amount) <= 0){ - runVipGrow.setAmountNow(amountAll); - mallCharge.setVipCode(runVipGrow.getLevelNext()); }else{ - runVipGrow.setAmountNow(amountNow.add(amount).setScale(2, RoundingMode.DOWN)); - mallCharge.setVipCode(memberLevel); } - runVipGrow.setAmount(amount); - runVipGrowMapper.updateById(runVipGrow); }else{ - runVipGrow = new RunVipGrow(); - runVipGrow.setMemberId(memberId); - runVipGrow.setLevelNow(memberLevel); - runVipGrow.setLevelNext(runVipNext.getVipCode()); - runVipGrow.setAmountAll(runVipNext.getPresentPrice()); - runVipGrow.setAmount(amount); - runVipGrow.setAmountNow(amount); - runVipGrowMapper.insert(runVipGrow); - if(runVipGrow.getAmountAll().compareTo(amount) <= 0){ - mallCharge.setVipCode(runVipGrow.getLevelNext()); + BigDecimal presentPrice = runVip.getPresentPrice(); + BigDecimal add = presentPrice.add(amount); + + BigDecimal presentPriceNext = runVipNext.getPresentPrice(); + if(presentPriceNext.compareTo(add) <= 0){ + mallCharge.setVipCode(runVipNext.getVipCode()); } } mallChargeMapper.insert(mallCharge); agentProducer.sendBuyVipSuccessMsg(mallCharge.getId()); - return new FebsResponse().success().data("操作成功"); + return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse growCharge(ApiGrowChargeDto apiGrowChargeDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); + + ApiGoChargeVo apiGoChargeVo = new ApiGoChargeVo(); BigDecimal amount = apiGrowChargeDto.getAmount(); if(BigDecimal.ZERO.compareTo(amount) >= 0){ @@ -595,7 +590,7 @@ if(runVipNext == null){ throw new FebsException("无法升级会员权益"); } - if(runVip.getOrderNumber() < runVipNext.getOrderNumber()){ + if(runVip.getOrderNumber() >= runVipNext.getOrderNumber()){ throw new FebsException("用户无法升级"); } @@ -661,13 +656,29 @@ mallCharge.setVipCode(runVipGrow.getLevelNext()); } }else{ - if(runVipGrow.getAmountAll().compareTo(amount) <= 0){ - mallCharge.setVipCode(runVipGrow.getLevelNext()); + BigDecimal add = runVip.getPresentPrice().add(amount); + if(runVipNext.getPresentPrice().compareTo(add) <= 0){ + mallCharge.setVipCode(runVipNext.getVipCode()); } } mallChargeMapper.insert(mallCharge); - return new FebsResponse().success().data("操作成功"); + + apiGoChargeVo.setFailTime(mallCharge.getFailTime()); + apiGoChargeVo.setAddress(mallCharge.getAddress()); + apiGoChargeVo.setAmount(mallCharge.getAmount()); + apiGoChargeVo.setSysAddress(mallCharge.getSysAddress()); + apiGoChargeVo.setSysAddressType(mallCharge.getType()); + + /** + * 充值接口调用后,发送一个延时队列 + * 功能:延迟时间为【failMinutes】后,更新充值记录为失败。 + */ + ApiMemberChargeFailDto apiMemberChargeFailDto = new ApiMemberChargeFailDto(); + apiMemberChargeFailDto.setChargeId(mallCharge.getId()); + apiMemberChargeFailDto.setFailTime(Integer.parseInt(failMinutes) * 60L* 1000L); + agentProducer.sendMemberChargeFailMsg(apiMemberChargeFailDto); + return new FebsResponse().success().data(apiGoChargeVo); } @Override @@ -686,7 +697,7 @@ ).stream().findFirst().orElse(null); if(runVipGrow != null){ BigDecimal amountNow = runVipGrow.getAmountNow(); - reduceAmount = reduceAmount.add(amountNow); + reduceAmount = amountNow; } apiReduceAmountVo.setReduceAmount(reduceAmount); return new FebsResponse().success().data(apiReduceAmountVo); -- Gitblit v1.9.1