From 9b51a95fa8bc9b3a86108c6900e17fc55f8db467 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 19 May 2025 17:02:07 +0800
Subject: [PATCH] refactor(vip): 优化积分和返佣计算逻辑

---
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallActServiceImpl.java |   53 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 44 insertions(+), 9 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 42a9dbf..b4722f6 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%
@@ -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;
     }

--
Gitblit v1.9.1