Administrator
2025-05-15 5c3e9863d44697dc904812af2dad8393d3a8b6a1
feat(mall): 更新积分流动相关功能

- 优化积分不足提示信息
- 新增积分流动类型枚举
- 完善积分流动记录信息
- 修复抽奖功能中的积分扣除和奖励逻辑
2 files modified
40 ■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java 6 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java 34 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java
@@ -5,9 +5,13 @@
@Getter
public enum ScoreFlowTypeEnum {
    /**
     *
     * 抽奖
     */
    LUCKY_DRAW_COMMISSION(13, "幸运获得{}佣金"),
    LUCKY_DRAW_SCORE(12, "幸运获得{}积分"),
    LUCKY_DRAW(11, "使用{}积分"),
    MEMBER_INFO_GIFT(10, "完善个人信息,获得{}积分"),
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%
@@ -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.getValue(),
                        MallUtils.getOrderNum(),
                        FlowTypeEnum.PRIZE_SCORE.getValue(),
                        StrUtil.format(ScoreFlowTypeEnum.LUCKY_DRAW.getDesc(),prize),
                        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(),prize),
                        2
                );
            }
        }
        return apiMallAwardDetailsVo;