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/vip/service/impl/VipCommonServiceImpl.java |   28 +++++++++++++++++-----------
 1 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java b/src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java
index f6c696c..65b4263 100644
--- a/src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java
@@ -21,6 +21,7 @@
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -93,7 +94,7 @@
                 ScoreFlowTypeEnum.BUY.getValue(),
                 mallOrderInfo.getOrderNo(),
                 FlowTypeEnum.SCORE.getValue(),
-                ScoreFlowTypeEnum.BUY.getDesc(),
+                StrUtil.format(ScoreFlowTypeEnum.BUY.getDesc(),amount),
                 2
         );
         // 更新会员钱包中的分数
@@ -110,11 +111,13 @@
         happyMemberLevelLambdaQueryWrapper.eq(HappyMemberLevel::getCode, director);
         happyMemberLevelLambdaQueryWrapper.last("limit 1");
         HappyMemberLevel happyMemberLevel = happyMemberLevelMapper.selectOne(happyMemberLevelLambdaQueryWrapper);
+        log.info("会员等级信息:{}", JSONUtil.toJsonStr(happyMemberLevel));
         if(ObjectUtil.isNotEmpty(happyMemberLevel)){
             // 计算自己获得的积分
             BigDecimal minePercent = happyMemberLevel.getMinePercent();
-            BigDecimal mineScore = amount.multiply(minePercent.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_DOWN)).setScale(0, RoundingMode.HALF_DOWN);
-            if(BigDecimal.ZERO.compareTo(mineScore) < 0){
+            BigDecimal mineScore = amount.multiply(minePercent).setScale(0, RoundingMode.HALF_DOWN);
+            log.info("下单获得积分:{}", mineScore);
+            if(mineScore.compareTo(BigDecimal.ZERO) > 0){
                 recommendScoreMap.put(memberId, mineScore);
                 recommendTypeScoreMap.put(memberId, ScoreFlowTypeEnum.MINE_RECOMMEND.getValue());
             }
@@ -122,8 +125,9 @@
             if(StrUtil.isNotEmpty(member.getReferrerId())){
                 MallMember refMember = mallMemberMapper.selectInfoByInviteId(member.getReferrerId());
                 BigDecimal otherPercent = happyMemberLevel.getOtherPercent();
-                BigDecimal otherScore = amount.multiply(otherPercent.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_DOWN)).setScale(0, RoundingMode.HALF_DOWN);
-                if(BigDecimal.ZERO.compareTo(otherScore) < 0){
+                BigDecimal otherScore = amount.multiply(otherPercent).setScale(0, RoundingMode.HALF_DOWN);
+                log.info("推荐人获得积分:{}", otherScore);
+                if(otherScore.compareTo(BigDecimal.ZERO) > 0){
                     recommendScoreMap.put(refMember.getId(), otherScore);
                     recommendTypeScoreMap.put(memberId, ScoreFlowTypeEnum.OTHER_RECOMMEND.getValue());
                 }
@@ -139,7 +143,7 @@
                         recommendTypeScoreMap.get(key),
                         mallOrderInfo.getOrderNo(),
                         FlowTypeEnum.PRIZE_SCORE.getValue(),
-                        ScoreFlowTypeEnum.getDescByValue(recommendTypeScoreMap.get(key)),
+                        StrUtil.format(ScoreFlowTypeEnum.getDescByValue(recommendTypeScoreMap.get(key)),value),
                         2);
                 mallMemberWalletService.add(value, key, "prizeScore");
             }
@@ -275,8 +279,9 @@
             return;
         }
         // 计算返佣金额
-        BigDecimal divide = happySaleLevel.getReturnPercent().divide(new BigDecimal(100));
-        BigDecimal multiply = mallOrderInfo.getAmount().multiply(divide).setScale(2, RoundingMode.HALF_DOWN);
+        BigDecimal returnPercent = happySaleLevel.getReturnPercent();
+        BigDecimal multiply = mallOrderInfo.getAmount().multiply(returnPercent).setScale(2, RoundingMode.HALF_DOWN);
+        log.info("团长获得返佣:{}",multiply);
         // 如果返佣金额小于等于0,则直接返回
         if(BigDecimal.ZERO.compareTo(multiply) >=0){
             return;
@@ -291,12 +296,13 @@
                 multiply,
                 ScoreFlowTypeEnum.SALE_RECOMMEND.getValue(),
                 mallOrderInfo.getOrderNo(),
-                FlowTypeEnum.BALANCE.getValue(),
-                ScoreFlowTypeEnum.SALE_RECOMMEND.getDesc(),
+                FlowTypeEnum.COMMISSION.getValue(),
+                StrUtil.format(ScoreFlowTypeEnum.SALE_RECOMMEND.getDesc(),multiply),
                 2
         );
         // 更新会员钱包中的余额
-        mallMemberWalletService.add(multiply, storeMasterMember.getId(), "balance");
+        mallMemberWalletService.add(multiply, storeMasterMember.getId(), "commission");
+        mallMemberWalletService.add(multiply, storeMasterMember.getId(), "total_score");
 
         MallAchieveRecord mallAchieveRecord = new MallAchieveRecord();
         mallAchieveRecord.setMemberId(mallOrderInfo.getMemberId());

--
Gitblit v1.9.1