From 413a57e2524cb0b839d5d83d961de3b59814eb6e Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 24 Oct 2025 16:53:11 +0800
Subject: [PATCH] feat(ai): 实现产品依赖解锁功能 - 在AiMemberAnswerServiceImpl中注入AiProductDependencyService和AiMemberProductUnlockService - 修改insure方法,根据答题分数解锁符合条件的产品 - 新增selectListByProductIds和insertList方法到AiMemberProductUnlockService - 实现产品依赖关系查询方法selectListByProductId到AiProductDependencyService- 在AiProductServiceImpl中增加产品状态判断逻辑,支持锁定和解锁状态显示 - 添加memberId字段到ApiProductPageDto用于查询用户已解锁产品 - 在ApiProductVo中新增state字段表示产品锁定/解锁状态
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java | 36 +++++++++++++++++++++++++++++++-----
1 files changed, 31 insertions(+), 5 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java
index 137e07b..9246e4e 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java
@@ -3,8 +3,10 @@
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
+import cc.mrbird.febs.common.enumerates.ScoreFlowTypeEnum;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.LoginUserUtil;
+import cc.mrbird.febs.common.utils.MallUtils;
import cc.mrbird.febs.mall.dto.ApiMallActListDto;
import cc.mrbird.febs.mall.dto.ApiMallActWinDetailsDto;
import cc.mrbird.febs.mall.entity.*;
@@ -134,7 +136,7 @@
BigDecimal prizeScore = wallet.getPrizeScore();
Integer actScoreCnt = mallActSet.getActScoreCnt();
if(prizeScore.compareTo(new BigDecimal(actScoreCnt))<0){
- throw new FebsException("竞猜积分不足");
+ throw new FebsException("积分不足");
}
/**
* 中奖概率 20%
@@ -150,7 +152,7 @@
DataDictionaryEnum.WIN_CASH.getCode());
String scoreDicValue = scoreDic.getValue() == null? "0":scoreDic.getValue();
String cashDicValue = cashDic.getValue() == null? "0":cashDic.getValue();
- BigDecimal totalProbability = new BigDecimal(scoreDicValue).add(new BigDecimal(cashDicValue));
+ BigDecimal totalProbability = new BigDecimal(scoreDicValue).multiply(new BigDecimal(cashDicValue));
//获取那个更大一点的几率
BigDecimal maxProbability = BigDecimal.ZERO;
BigDecimal minProbability = BigDecimal.ZERO;
@@ -559,16 +561,40 @@
// 消耗积分
BigDecimal useScore = new BigDecimal(actScoreCnt);
mallMemberWalletService.reduce(useScore, wallet.getMemberId(), "prizeScore");
- mallMoneyFlowService.addMoneyFlow(wallet.getMemberId(), useScore.negate(), MoneyFlowTypeEnum.PRIZE.getValue(), null, FlowTypeEnum.PRIZE_SCORE.getValue());
+ mallMoneyFlowService.addMoneyFlow(
+ wallet.getMemberId(),
+ useScore.negate(),
+ ScoreFlowTypeEnum.LUCKY_DRAW.getValue(),
+ MallUtils.getOrderNum(),
+ FlowTypeEnum.PRIZE_SCORE.getValue(),
+ StrUtil.format(ScoreFlowTypeEnum.LUCKY_DRAW.getDesc(),useScore),
+ 2
+ );
if (apiMallAwardDetailsVo.getAwardType() != 3) {
BigDecimal prize = new BigDecimal(apiMallAwardDetailsVo.getAwardValue());
if (apiMallAwardDetailsVo.getAwardType() == 1) {
mallMemberWalletService.add(prize, wallet.getMemberId(), "prizeScore");
- mallMoneyFlowService.addMoneyFlow(wallet.getMemberId(), prize, MoneyFlowTypeEnum.PRIZE.getValue(), null, FlowTypeEnum.PRIZE_SCORE.getValue());
+ mallMoneyFlowService.addMoneyFlow(
+ wallet.getMemberId(),
+ prize,
+ ScoreFlowTypeEnum.LUCKY_DRAW_SCORE.getValue(),
+ MallUtils.getOrderNum(),
+ FlowTypeEnum.PRIZE_SCORE.getValue(),
+ StrUtil.format(ScoreFlowTypeEnum.LUCKY_DRAW_SCORE.getDesc(),apiMallAwardDetailsVo.getAwardName()),
+ 2
+ );
} else if (apiMallAwardDetailsVo.getAwardType() == 2) {
mallMemberWalletService.add(prize, wallet.getMemberId(), "commission");
- mallMoneyFlowService.addMoneyFlow(wallet.getMemberId(), prize, MoneyFlowTypeEnum.PRIZE.getValue(), null, FlowTypeEnum.COMMISSION.getValue());
+ mallMoneyFlowService.addMoneyFlow(
+ wallet.getMemberId(),
+ prize,
+ ScoreFlowTypeEnum.LUCKY_DRAW_COMMISSION.getValue(),
+ MallUtils.getOrderNum(),
+ FlowTypeEnum.COMMISSION.getValue(),
+ StrUtil.format(ScoreFlowTypeEnum.LUCKY_DRAW_COMMISSION.getDesc(),apiMallAwardDetailsVo.getAwardName()),
+ 2
+ );
}
}
return apiMallAwardDetailsVo;
--
Gitblit v1.9.1