Administrator
2025-05-19 9b51a95fa8bc9b3a86108c6900e17fc55f8db467
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%
@@ -190,6 +192,7 @@
            }else{
                apiMallAwardDetailsVo.setAwardName("未中奖");
            }
            apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY);
        }else if(new BigDecimal(randomInt).compareTo(failureScope) > 0
                && new BigDecimal(randomInt).compareTo(failureScope.add(maxProbability.multiply(new BigDecimal(100)))) <= 0){
            //大于failureScope.add(maxProbability.multiply(new BigDecimal(100)))这个数字,则中奖
@@ -225,6 +228,7 @@
                        }else{
                            apiMallAwardDetailsVo.setAwardName("未中奖");
                        }
                        apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY);
                    }else{
                        List<MallActAwardSet> idList = new ArrayList();
                        for(MallActAwardSet mallActAwardSet : mallActAwardSets){
@@ -293,6 +297,7 @@
                    }else{
                        apiMallAwardDetailsVo.setAwardName("未中奖");
                    }
                    apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY);
                }
            }else{
                //获取活动下该类别的奖品
@@ -315,6 +320,7 @@
                    }else{
                        apiMallAwardDetailsVo.setAwardName("未中奖");
                    }
                    apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY);
                }else{
                    List<MallActAwardSet> idList = new ArrayList();
                    for(MallActAwardSet mallActAwardSet : mallActAwardSets){
@@ -400,6 +406,7 @@
                        }else{
                            apiMallAwardDetailsVo.setAwardName("未中奖");
                        }
                        apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY);
                    }else{
                        List<MallActAwardSet> idList = new ArrayList();
                        for(MallActAwardSet mallActAwardSet : mallActAwardSets){
@@ -468,6 +475,7 @@
                    }else{
                        apiMallAwardDetailsVo.setAwardName("未中奖");
                    }
                    apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY);
                }
            }else{
                //获取活动下该类别的奖品
@@ -490,6 +498,7 @@
                    }else{
                        apiMallAwardDetailsVo.setAwardName("未中奖");
                    }
                    apiMallAwardDetailsVo.setAwardType(MallActAwardSet.AWARD_TYPE_XXCY);
                }else{
                    List<MallActAwardSet> idList = new ArrayList();
                    for(MallActAwardSet mallActAwardSet : mallActAwardSets){
@@ -552,15 +561,41 @@
        // 消耗积分
        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
        );
        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());
        } else if (apiMallAwardDetailsVo.getAwardType() == 2) {
            mallMemberWalletService.add(prize, wallet.getMemberId(), "commission");
            mallMoneyFlowService.addMoneyFlow(wallet.getMemberId(), prize, MoneyFlowTypeEnum.PRIZE.getValue(), null, FlowTypeEnum.COMMISSION.getValue());
        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,
                        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,
                        ScoreFlowTypeEnum.LUCKY_DRAW_COMMISSION.getValue(),
                        MallUtils.getOrderNum(),
                        FlowTypeEnum.COMMISSION.getValue(),
                        StrUtil.format(ScoreFlowTypeEnum.LUCKY_DRAW_COMMISSION.getDesc(),prize),
                        2
                );
            }
        }
        return apiMallAwardDetailsVo;
    }