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 |   60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 60 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 37fad9e..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();

--
Gitblit v1.9.1