From 3afcc72b898f91d808ba81f9620730e4665d6890 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 11 Aug 2022 14:16:12 +0800
Subject: [PATCH] 20220810

---
 src/main/java/cc/mrbird/febs/mall/dto/ScorePoorDto.java                      |   19 ++++++
 src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java      |    7 ++
 src/main/resources/templates/febs/views/modules/system/scorePoorSetting.html |   75 +++++++++++++++++++++++++
 src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java       |   11 +++
 src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java       |    3 +
 src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java  |   25 +++++++-
 6 files changed, 137 insertions(+), 3 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 ae23dd7..2c105ef 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,9 @@
 @Getter
 public enum DataDictionaryEnum {
 
+    //积分池设置{"everydayRatio":10,"dividEquallyRatio":1}每日订单的百分之几,增加到积分池;每日平分百分比
+    SCORE_POOR_RADIO("SCORE_POOR", "SCORE_POOR_RADIO"),
+
     SCORE_SIGN_SETTING("SCORE_SETTING", "SCORE_SIGN_SETTING"),
     STATIC_BONUS("BONUS_TYPE", "STATIC_BONUS"),
     DYNAMIC_BONUS("BONUS_TYPE", "DYNAMIC_BONUS"),
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 03153f4..61acaa9 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
@@ -3,6 +3,7 @@
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
 import cc.mrbird.febs.mall.dto.CashOutSettingDto;
+import cc.mrbird.febs.mall.dto.ScorePoorDto;
 import cc.mrbird.febs.mall.service.ICommonService;
 import cc.mrbird.febs.mall.service.ISystemService;
 import lombok.RequiredArgsConstructor;
@@ -39,4 +40,10 @@
         commonService.addDataDic(DataDictionaryEnum.CASHOUT_SETTING.getType(), DataDictionaryEnum.CASHOUT_SETTING.getCode(), cashOutSettingDto, "提现设置");
         return new FebsResponse().success();
     }
+
+    @PostMapping(value = "/scorePoor")
+    public FebsResponse scorePoor(ScorePoorDto scorePoorDto) {
+        commonService.addDataDic(DataDictionaryEnum.SCORE_POOR_RADIO.getType(), DataDictionaryEnum.SCORE_POOR_RADIO.getCode(), scorePoorDto, "积分池设置");
+        return new FebsResponse().success();
+    }
 }
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 aee528c..37732cd 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
@@ -4,6 +4,7 @@
 import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
 import cc.mrbird.febs.common.utils.FebsUtil;
 import cc.mrbird.febs.mall.dto.CashOutSettingDto;
+import cc.mrbird.febs.mall.dto.ScorePoorDto;
 import cc.mrbird.febs.mall.dto.ScoreSettingDto;
 import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
 import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
@@ -37,4 +38,14 @@
         }
         return FebsUtil.view("modules/system/cashOutSetting");
     }
+
+    @GetMapping("scorePoorSetting")
+    @RequiresPermissions("scorePoorSetting:update")
+    public String scorePoor(Model model) {
+        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SCORE_POOR_RADIO.getType(), DataDictionaryEnum.SCORE_POOR_RADIO.getCode());
+        if (dic != null) {
+            model.addAttribute("scorePoor", JSONObject.parseObject(dic.getValue(), ScorePoorDto.class));
+        }
+        return FebsUtil.view("modules/system/scorePoorSetting");
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ScorePoorDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ScorePoorDto.java
new file mode 100644
index 0000000..3e17b62
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/ScorePoorDto.java
@@ -0,0 +1,19 @@
+package cc.mrbird.febs.mall.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ *积分池设置{"everydayRatio":10,"dividEquallyRatio":1}每日订单的百分之几,增加到积分池;每日平分百分比
+ */
+@Data
+public class ScorePoorDto {
+
+    //每日订单的百分之几,增加到积分池
+    private BigDecimal everydayRatio;
+
+    //每日平分百分比
+    private BigDecimal dividEquallyRatio;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
index 525a3fc..3b7de3a 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -6,6 +6,7 @@
 import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
 import cc.mrbird.febs.common.utils.AppContants;
 import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.mall.dto.ScorePoorDto;
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
 import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
@@ -17,7 +18,9 @@
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUnit;
 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.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -503,9 +506,17 @@
          * 每天释放1%,给全体用户
          */
         //前一天的所有消费的10%
+        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SCORE_POOR_RADIO.getType(), DataDictionaryEnum.SCORE_POOR_RADIO.getCode());
+        if(ObjectUtil.isEmpty(dic)){
+            return;
+        }
+        ScorePoorDto scorePoorDto = JSONUtil.toBean(dic.getValue(), ScorePoorDto.class);
+        BigDecimal everydayRatio = scorePoorDto.getEverydayRatio().multiply(new BigDecimal(0.01));
+        BigDecimal dividEquallyRatio = scorePoorDto.getDividEquallyRatio().multiply(new BigDecimal(0.01));
+
         Date date = DateUtil.offsetDay(new Date(), -1);
         BigDecimal totalAmount = mallOrderInfoMapper.selectTotalAmountByPayDoneAndDataString(1, date);
-        BigDecimal multiplyTotalAmount = totalAmount.multiply(new BigDecimal(0.1));
+        BigDecimal multiplyTotalAmount = totalAmount.multiply(everydayRatio);
 
         String redisKey = "scorePool";
         String scorePoolRedis = redisUtils.getString(redisKey);
@@ -517,13 +528,14 @@
         BigDecimal scorePoolNew = scorePoolOld.add(multiplyTotalAmount);
 
         //每天释放1%给全体用户
-        BigDecimal scorePoolToDay = scorePoolNew.multiply(new BigDecimal(0.01));
+        BigDecimal scorePoolToDay = scorePoolNew.multiply(dividEquallyRatio);
 
         redisUtils.set(redisKey,scorePoolNew.subtract(scorePoolToDay).intValue(),0L);
 
         QueryWrapper<MallMember> formalMember = new QueryWrapper<>();
         formalMember.ne("level", AgentLevelEnum.ZERO_LEVEL.name());
         List<MallMember> mallMembers = mallMemberMapper.selectList(formalMember);
+        int cnt = 0;
         if(CollUtil.isNotEmpty(mallMembers)){
             BigDecimal income = new BigDecimal(scorePoolToDay.divide(new BigDecimal(mallMembers.size()), 2, RoundingMode.HALF_UP).intValue());
             if(income.compareTo(BigDecimal.ZERO) < 1){
@@ -536,6 +548,9 @@
                  */
                 BigDecimal outCome = BigDecimal.ZERO;
                 MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMember.getId());
+                if(mallMemberWallet.getScore().compareTo(BigDecimal.ZERO) < 1){
+                    continue;
+                }
                 if(mallMemberWallet.getScore().compareTo(income) < 0){
                     outCome = new BigDecimal(mallMemberWallet.getScore().intValue());
                 }else{
@@ -545,9 +560,13 @@
                 walletService.reduce(outCome, mallMember.getId(), "score");
                 moneyFlowService.addMoneyFlow(mallMember.getId(), outCome, MoneyFlowTypeEnum.SCORE_POOL.getValue(), null, FlowTypeEnum.COMMISSION.getValue());
                 moneyFlowService.addMoneyFlow(mallMember.getId(), outCome.negate(), MoneyFlowTypeEnum.SCORE_POOL.getValue(), null, FlowTypeEnum.SCORE.getValue());
+                cnt ++;
             }
         }
-        log.info("#####==积分池==end==######");
+        log.info("#####==积分池==end==######;" +
+                "今日新增积分:" + multiplyTotalAmount.setScale(2, RoundingMode.HALF_UP)
+                +";平分积分数量:"+scorePoolToDay.setScale(2, RoundingMode.HALF_UP)
+                +";人数:"+cnt);
     }
 
 }
diff --git a/src/main/resources/templates/febs/views/modules/system/scorePoorSetting.html b/src/main/resources/templates/febs/views/modules/system/scorePoorSetting.html
new file mode 100644
index 0000000..6948c6a
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/system/scorePoorSetting.html
@@ -0,0 +1,75 @@
+<div class="layui-fluid layui-anim febs-anim" id="scorePoor-setting" lay-title="积分池设置">
+    <div class="layui-row layui-col-space8 febs-container">
+        <form class="layui-form" action="" lay-filter="scorePoor-setting-form">
+            <div class="layui-card">
+                <div class="layui-card-body">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label ">增加到积分池比例:</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="everydayRatio" data-th-id="${scorePoor.everydayRatio}"
+                                   lay-verify="number" autocomplete="off" class="layui-input" >
+                        </div>
+                        <div class="layui-word-aux" style="margin-left: 150px;">【填写整数】每日订单金额的百分之几,增加到积分池:直接输入百分比,例如25%,直接输入25</div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label ">每日平分百分比:</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="dividEquallyRatio" data-th-id="${scorePoor.dividEquallyRatio}"
+                                   lay-verify="number" autocomplete="off" class="layui-input" >
+                        </div>
+                        <div class="layui-word-aux" style="margin-left: 150px;">【填写整数】积分池每日平分百分比:直接输入百分比,例如25%,直接输入25</div>
+                    </div>
+                </div>
+
+                <div class="layui-card-footer">
+                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="scorePoor-setting-form-submit" id="submit">保存</button>
+                </div>
+            </div>
+        </form>
+    </div>
+</div>
+<style>
+    .layui-form-label {
+        width: 120px;
+    }
+
+    .layui-form-item .layui-input-block {
+        margin-left: 150px;
+    }
+
+    .layui-table-form .layui-form-item {
+        margin-bottom: 20px !important;
+    }
+</style>
+<script data-th-inline="javascript" type="text/javascript">
+    layui.use(['dropdown', 'jquery', 'validate', 'febs', 'form', 'eleTree'], function () {
+        var $ = layui.jquery,
+            febs = layui.febs,
+            form = layui.form,
+            scorePoor = [[${scorePoor}]],
+            validate = layui.validate,
+            $view = $('#scorePoor-setting');
+
+        form.verify(validate);
+
+        initCashoutValue();
+
+        form.render();
+
+        function initCashoutValue() {
+            form.val("scorePoor-setting-form", {
+                "everydayRatio": scorePoor.everydayRatio,
+                "dividEquallyRatio": scorePoor.dividEquallyRatio
+            });
+        }
+
+        form.on('submit(scorePoor-setting-form-submit)', function (data) {
+            console.log(data);
+            febs.post(ctx + 'admin/system/scorePoor', data.field, function (res) {
+                febs.alert.success('设置成功');
+            });
+            window.location.reload();
+            return false;
+        });
+    });
+</script>
\ No newline at end of file

--
Gitblit v1.9.1