From 9dfb2a22680a768400fdef99a16acffca87ace8c Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Mon, 13 Mar 2023 16:10:00 +0800
Subject: [PATCH] 贡献点设置

---
 src/main/java/cc/mrbird/febs/mall/dto/HlmScoreSetDto.java                       |    4 +
 src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java         |    4 +
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java        |    3 
 src/main/resources/templates/febs/views/modules/system/hlmScoreSet.html         |   26 ++++----
 src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java         |    2 
 src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java          |    7 ++
 src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java          |    4 +
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |   82 +++++++++++++++++++++------
 8 files changed, 98 insertions(+), 34 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
index 2ceea29..f0cafc8 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -6,6 +6,10 @@
 @Getter
 public enum DataDictionaryEnum {
     /**
+     * 贡献点设置-购买商品获得
+     */
+    STAR_GET("PERK_SET","STAR_GET"),
+    /**
      * 商城每天新增业绩×本级别占比÷级别的总贡献值×个人贡献值数量=个人每天补贴
      * 举例:假如您购买了礼包六1万元的产品(20个贡献值),身份是三星合伙人,同级别总共有50个贡献值,今天全网新增业绩50万,
      * 当天补贴:500000×6%=30000÷50=600×20=12000
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
index a8e9d18..92a3cb7 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
@@ -71,6 +71,10 @@
                 DataDictionaryEnum.SCORE_CHANGE.getType(),
                 DataDictionaryEnum.SCORE_CHANGE.getCode(),
                 hlmScoreSetDto.getScoreChange());
+        commonService.updateDataDic(
+                DataDictionaryEnum.STAR_GET.getType(),
+                DataDictionaryEnum.STAR_GET.getCode(),
+                hlmScoreSetDto.getStarGet());
         return new FebsResponse().success();
     }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
index f3145df..69dda1d 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
@@ -46,9 +46,8 @@
     @ApiOperation(value = "判断是否允许创建订单", notes = "判断是否允许创建订单")
     @PostMapping(value = "/judgeCreateOrder")
     public FebsResponse judgeCreateOrder(@RequestBody AddOrderDto addOrderDto) {
-        boolean result = mallOrderInfoService.judgeCreateOrder(addOrderDto);
 
-        return new FebsResponse().success().data(result);
+        return mallOrderInfoService.judgeCreateOrder(addOrderDto);
     }
 
     @ApiOperation(value = "创建订单", notes = "创建订单")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
index 35ad3da..30abf20 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
@@ -90,6 +90,13 @@
             String scoreChange = ObjectUtil.isEmpty(scoreChangeDic.getValue()) ? "0" : scoreChangeDic.getValue();
             hlmScoreSetDto.setScoreChange(scoreChange);
         }
+        DataDictionaryCustom starGetDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.STAR_GET.getType(),
+                DataDictionaryEnum.STAR_GET.getCode());
+        if (starGetDic != null) {
+            String starGet = ObjectUtil.isEmpty(starGetDic.getValue()) ? "0" : starGetDic.getValue();
+            hlmScoreSetDto.setStarGet(starGet);
+        }
         model.addAttribute("hlmScoreSet", hlmScoreSetDto);
         return FebsUtil.view("modules/system/hlmScoreSet");
     }
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/HlmScoreSetDto.java b/src/main/java/cc/mrbird/febs/mall/dto/HlmScoreSetDto.java
index 1845ae3..7b75920 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/HlmScoreSetDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/HlmScoreSetDto.java
@@ -10,6 +10,10 @@
 @ApiModel(value = "HlmScoreSetDto", description = "积分设置")
 public class HlmScoreSetDto {
     /**
+     * 贡献点设置-购买商品获得
+     */
+    private String starGet;
+    /**
      * 签到设置-签到积分
      */
     private String signScore;
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java
index a4e5b90..00d995d 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java
@@ -37,7 +37,7 @@
 
     FebsResponse bangCardSign(BangCardSignDto bangCardSignDto);
 
-    boolean judgeCreateOrder(AddOrderDto addOrderDto);
+    FebsResponse judgeCreateOrder(AddOrderDto addOrderDto);
 
     ApiScoreSetVo myScoreSet();
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 7004685..7b2941a 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -465,13 +465,40 @@
              * 增加贡献值,增加流水
              */
             if (starSum.compareTo(BigDecimal.ZERO) > 0) {
-                mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId);
-                mallMoneyFlowService.addMoneyFlow(
-                        memberId,
-                        starSum,
-                        MoneyFlowTypeEnum.STAR.getValue(),
-                        orderInfo.getOrderNo(),
-                        FlowTypeEnum.STAR.getValue());
+                //系统设置的个人贡献点最大值
+                DataDictionaryCustom starGetDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                        DataDictionaryEnum.STAR_GET.getType(),
+                        DataDictionaryEnum.STAR_GET.getCode());
+                if(ObjectUtil.isNotEmpty(starGetDic)){
+                    String starGetStr = StrUtil.isEmpty(starGetDic.getValue()) ? "0" : starGetDic.getValue();
+                    BigDecimal starGet = new BigDecimal(starGetStr);
+
+                    MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
+                    BigDecimal star = new BigDecimal(mallMemberWallet.getStar());
+                    if(starGet.compareTo(star.add(starSum)) < 0){
+                        if(starGet.compareTo(star) > 0){
+                            BigDecimal subtract = starGet.subtract(star);
+                            if(subtract.compareTo(starSum) < 0){
+                                starSum = subtract;
+                            }
+                            mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId);
+                            mallMoneyFlowService.addMoneyFlow(
+                                    memberId,
+                                    starSum,
+                                    MoneyFlowTypeEnum.STAR.getValue(),
+                                    orderInfo.getOrderNo(),
+                                    FlowTypeEnum.STAR.getValue());
+                        }
+                    }else{
+                        mallMemberWalletMapper.addStarByMemberId(starSum.intValue(), memberId);
+                        mallMoneyFlowService.addMoneyFlow(
+                                memberId,
+                                starSum,
+                                MoneyFlowTypeEnum.STAR.getValue(),
+                                orderInfo.getOrderNo(),
+                                FlowTypeEnum.STAR.getValue());
+                    }
+                }
             }
             /**
              * 增加补贴额度
@@ -806,18 +833,41 @@
     }
 
     @Override
-    public boolean judgeCreateOrder(AddOrderDto addOrderDto) {
-        boolean flag = false;
-
+    public FebsResponse judgeCreateOrder(AddOrderDto addOrderDto) {
+        Long memberId = LoginUserUtil.getLoginUser().getId();
         if (CollUtil.isEmpty(addOrderDto.getItems())) {
-            return false;
+            throw new FebsException("请选择购买商品");
         }
 
+        boolean hasTc = false;
         BigDecimal total = BigDecimal.ZERO;
         for (AddOrderItemDto item : addOrderDto.getItems()) {
                 MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
+                MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+                /**
+                 * 贡献点判断
+                 */
+                if (mallGoods.getIsNormal() == 2) {
+                    hasTc = true;
+                }
                 BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
                 total = total.add(amount);
+        }
+        if(hasTc){
+            //系统设置的个人贡献点最大值
+            DataDictionaryCustom starGetDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                    DataDictionaryEnum.STAR_GET.getType(),
+                    DataDictionaryEnum.STAR_GET.getCode());
+            if(ObjectUtil.isNotEmpty(starGetDic)){
+                String starGetStr = StrUtil.isEmpty(starGetDic.getValue()) ? "0" : starGetDic.getValue();
+                BigDecimal starGet = new BigDecimal(starGetStr);
+
+                MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
+                BigDecimal star = new BigDecimal(mallMemberWallet.getStar());
+                if(starGet.compareTo(star) <= 0){
+                    throw new FebsException("无法购买套餐");
+                }
+            }
         }
         /**
          * 使用积分折扣现金
@@ -840,16 +890,12 @@
             if(ObjectUtil.isNotEmpty(scoreChangeDic)){
                 scoreChange = new BigDecimal(scoreChangeDic.getValue()).abs().setScale(2,BigDecimal.ROUND_DOWN);
             }
-            scorePercentMaxAmount = scorePercentMaxAmount.multiply(scoreChange);
+            scorePercentMaxAmount = scorePercentMaxAmount.multiply(scoreChange).setScale(2,BigDecimal.ROUND_DOWN);
             if(scorePercentMaxAmount.compareTo(score) < 0){
-                flag = false;
-            }else{
-                flag = true;
+                throw new FebsException("最多可使用"+scorePercentMaxAmount+"积分");
             }
-        }else{
-            flag = true;
         }
-        return flag;
+        return new FebsResponse().success();
     }
 
     @Override
diff --git a/src/main/resources/templates/febs/views/modules/system/hlmScoreSet.html b/src/main/resources/templates/febs/views/modules/system/hlmScoreSet.html
index b1c44b2..38e532f 100644
--- a/src/main/resources/templates/febs/views/modules/system/hlmScoreSet.html
+++ b/src/main/resources/templates/febs/views/modules/system/hlmScoreSet.html
@@ -3,7 +3,6 @@
         <form class="layui-form" action="" lay-filter="hlm-score-set-form">
             <div class="layui-card">
                 <div class="layui-card-body">
-
                     <blockquote class="layui-elem-quote blue-border">签到</blockquote>
                     <div class="layui-form-item">
                         <div class="layui-inline">
@@ -25,14 +24,6 @@
                         </div>
                     </div>
 
-<!--                    <blockquote class="layui-elem-quote blue-border">签到</blockquote>-->
-<!--                    <div class="layui-form-item">-->
-<!--                        <label class="layui-form-label febs-form-item-require">签到积分:</label>-->
-<!--                        <div class="layui-input-block">-->
-<!--                            <input type="text" name="signScore" lay-verify="required|integer" placeholder="请输入数字" autocomplete="off" class="layui-input" >-->
-<!--                            <div class="layui-word-aux">每次签到赠送积分数量,填写整数,如【35】</div>-->
-<!--                        </div>-->
-<!--                    </div>-->
                     <blockquote class="layui-elem-quote blue-border">积分与现金</blockquote>
                     <div class="layui-form-item">
                         <label class="layui-form-label febs-form-item-require">抵扣现金(%):</label>
@@ -47,12 +38,20 @@
                             <input type="text" name="scoreChange" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
                             <div class="layui-word-aux">设置1,则1积分等于1元,设置2,则2积分等于1元,填写整数,如【1】</div>
                         </div>
-
                     </div>
-                </div>
 
-                <div class="layui-card-footer">
-                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="hlm-score-set-submit" id="submit">保存</button>
+                    <blockquote class="layui-elem-quote blue-border">贡献点</blockquote>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label febs-form-item-require">个人最大值:</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="starGet" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
+                            <div class="layui-word-aux">设置50,则购买商品,则赠送贡献点,超过50,则不再增加,设置为0,则没有限制,填写整数,如【50】</div>
+                        </div>
+                    </div>
+                    <div class="layui-card-footer">
+                        <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="hlm-score-set-submit" id="submit">保存</button>
+                    </div>
+                    </div>
                 </div>
             </div>
         </form>
@@ -92,6 +91,7 @@
 
         function initHlmScoreSetValue() {
             form.val("hlm-score-set-form", {
+                "starGet": hlmScoreSet.starGet,
                 "signScore": hlmScoreSet.signScore,
                 "signScoreDays": hlmScoreSet.signScoreDays,
                 "signScoreCnt": hlmScoreSet.signScoreCnt,

--
Gitblit v1.9.1