From 575411c3f1abc10184ee2c1b416241246f943226 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Fri, 03 Jan 2025 10:35:58 +0800 Subject: [PATCH] refactor(mall): 修改购买 VIP 接口名称 --- src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java | 87 ++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 80 insertions(+), 7 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 507313d..635c78d 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 @@ -12,6 +12,8 @@ import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; +import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; +import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.service.IRunVipService; import cc.mrbird.febs.mall.vo.*; import cc.mrbird.febs.rabbit.producter.AgentProducer; @@ -48,14 +50,17 @@ private final MallMoneyFlowMapper mallMoneyFlowMapper; private final MallMemberWalletMapper mallMemberWalletMapper; private final MallMemberMapper mallMemberMapper; + private final IApiMallMemberWalletService walletService; + private final IMallMoneyFlowService mallMoneyFlowService; @Override public List<ApiRunVipVo> vipInfo() { - MallMember member = LoginUserUtil.getLoginUser(); + Long memberId = LoginUserUtil.getLoginUser().getId(); List<ApiRunVipVo> apiRunVipVos = new ArrayList<>(); - if (StrUtil.isEmpty(member.getLevel())) { + MallMember mallMember = mallMemberMapper.selectById(memberId); + if (StrUtil.isEmpty(mallMember.getLevel())) { return apiRunVipVos; } - String level = member.getLevel(); + String level = mallMember.getLevel(); //获取当前用户的VIP等级 RunVip runVip = this.baseMapper.selectOne(new LambdaQueryWrapper<RunVip>().eq(RunVip::getVipCode, level)); //获取大于当前用户等级序号的所有的VIP等级 @@ -151,6 +156,62 @@ } @Override + public FebsResponse balanceBuy(ApiBalanceBuyDto apiBalanceBuyDto) { + Long memberId = LoginUserUtil.getLoginUser().getId(); + MallMember mallMember = mallMemberMapper.selectById(memberId); + if (StrUtil.isBlank(mallMember.getTradePassword())) { + throw new FebsException("未设置资金密码"); + } + + if (!mallMember.getTradePassword().equals(SecureUtil.md5(apiBalanceBuyDto.getTradeWord()))) { + throw new FebsException("资金密码错误"); + } + Long runVipId = apiBalanceBuyDto.getRunVipId(); + RunVip runVip = this.baseMapper.selectById(runVipId); + if(runVip.getState() != YesOrNoEnum.YES.getValue()){ + throw new FebsException("会员套餐已下架"); + } + //价格 + BigDecimal presentAmount = runVip.getPresentPrice().setScale(2,BigDecimal.ROUND_DOWN); + MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); + if(mallMemberWallet.getCommission().compareTo(BigDecimal.ZERO) <= 0){ + throw new FebsException("余额不足"); + } + if(mallMemberWallet.getCommission().compareTo(presentAmount) < 0){ + throw new FebsException("余额不足"); + } + + String orderNo = MallUtils.getOrderNum(); + walletService.reduceCommission(presentAmount,memberId); + mallMoneyFlowService.runVipMoneyFlowAdd( + memberId, + memberId, + orderNo, + FlowTypeEnum.COMMISSION.getValue(), + RunVipMoneyFlowTypeEnum.COMMISSION_PAY.getValue(), + presentAmount, + StrUtil.format(RunVipMoneyFlowTypeEnum.COMMISSION_PAY.getDescription(),presentAmount), + YesOrNoEnum.YES.getValue() + ); + + MallCharge mallCharge = new MallCharge(); + mallCharge.setMemberId(memberId); + mallCharge.setOrderNo(orderNo); + mallCharge.setState(YesOrNoEnum.YES.getValue()); + mallCharge.setType(StrUtil.format(RunVipMoneyFlowTypeEnum.COMMISSION_PAY.getDescription(),presentAmount)); + mallCharge.setAddress(mallMember.getPhone()); + mallCharge.setAmount(presentAmount); + mallCharge.setVipCode(runVip.getVipCode()); + mallCharge.setVipName(runVip.getVipName()); + mallCharge.setVipCnt(apiBalanceBuyDto.getVipCnt()); + mallChargeMapper.insert(mallCharge); + + agentProducer.sendBuyVipSuccessMsg(mallCharge.getId()); + + return new FebsResponse().success().message("操作成功"); + } + + @Override public FebsResponse goChargeInfo(ApiGoChargeInfoDto apiGoChargeInfoDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); String orderNo = apiGoChargeInfoDto.getOrderNo(); @@ -161,6 +222,9 @@ MallCharge mallCharge = mallChargeMapper.selectOne(objectLambdaQueryWrapper); ApiGoChargeVo apiGoChargeVo = new ApiGoChargeVo(); + if(null == mallCharge){ + throw new FebsException("记录不存在"); + } apiGoChargeVo.setFailTime(mallCharge.getFailTime()); apiGoChargeVo.setAddress(mallCharge.getAddress()); apiGoChargeVo.setAmount(mallCharge.getAmount()); @@ -304,10 +368,19 @@ ); if(CollUtil.isNotEmpty(mallMoneyFlows)){ BigDecimal reduce = mallMoneyFlows.stream().map(MallMoneyFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); - if(reduce.intValue() > realScore){ - apiRunHealthVo.setScoreUsed(reduce.intValue() - realScore); - apiRunHealthVo.setScoreTotal(reduce.intValue()); - } + apiRunHealthVo.setScoreTotal(reduce.intValue()); + } + List<MallMoneyFlow> mallMoneyFlowScoreOuts = mallMoneyFlowMapper.selectList( + new LambdaQueryWrapper<MallMoneyFlow>() + .eq(MallMoneyFlow::getMemberId, memberId) + .eq(MallMoneyFlow::getFlowType, FlowTypeEnum.SCORE.getValue()) + .eq(MallMoneyFlow::getType, RunVipMoneyFlowTypeEnum.SCORE_OUT_BALANCE.getValue()) + .ge(MallMoneyFlow::getCreatedTime, DateUtil.beginOfDay(DateUtil.date())) + .le(MallMoneyFlow::getCreatedTime, DateUtil.endOfDay(DateUtil.date())) + ); + if(CollUtil.isNotEmpty(mallMoneyFlowScoreOuts)){ + BigDecimal reduce = mallMoneyFlowScoreOuts.stream().map(MallMoneyFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add).abs(); + apiRunHealthVo.setScoreUsed(reduce.intValue()); } return apiRunHealthVo; } -- Gitblit v1.9.1