From 7bf5945cdd7560922828f225c882d82f95405648 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Fri, 03 Jan 2025 10:27:31 +0800
Subject: [PATCH] feat(mall): 添加会员购买功能并优化节点助力逻辑
---
src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java | 63 +++++++++++++++++++++++++++++++
1 files changed, 63 insertions(+), 0 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 5ea16a2..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,6 +50,8 @@
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() {
Long memberId = LoginUserUtil.getLoginUser().getId();
@@ -152,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();
@@ -162,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());
--
Gitblit v1.9.1