From 16b9e8b2690e8cc2b7f2262d1fa2ec65ee5dc590 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Mon, 17 Apr 2023 16:27:34 +0800
Subject: [PATCH] 只针对一星会员做修改: 按购买业绩(不按权益积分)每天静态释0.6%~1.2%

---
 src/main/java/cc/mrbird/febs/common/enumerates/GreenScoreEnum.java        |    4 +
 src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java   |   20 ++++++
 src/main/resources/templates/febs/views/modules/system/hlmAchieveSet.html |   68 ++++++++++++++++++++++
 src/main/resources/mapper/modules/MallAchieveRecordMapper.xml             |    6 ++
 src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java      |   45 +++++++++++++++
 src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java    |   20 ++++++
 src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java            |    2 
 src/main/java/cc/mrbird/febs/mall/mapper/MallAchieveRecordMapper.java     |    2 
 src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherButtonDto.java            |    2 
 src/main/resources/mapper/modules/MallMemberMapper.xml                    |    5 +
 src/main/java/cc/mrbird/febs/mall/service/IAgentService.java              |    6 ++
 11 files changed, 180 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/GreenScoreEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/GreenScoreEnum.java
index 5ce7247..10e9fa0 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/GreenScoreEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/GreenScoreEnum.java
@@ -8,6 +8,10 @@
 @Getter
 public enum GreenScoreEnum {
     /**
+     * 一星每日业绩每日释放业绩到余额的千分比
+     */
+    JOB_ACHIEVE_RELEASE_PERCENT("GREEN_SCORE", "JOB_ACHIEVE_RELEASE_PERCENT"),
+    /**
      * 每日业绩固定释放凭证数量
      */
     ACHIEVE_RELEASE("GREEN_SCORE", "ACHIEVE_RELEASE"),
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 053e4d1..c005101 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
@@ -6,10 +6,12 @@
 import cc.mrbird.febs.mall.dto.*;
 import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
 import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
+import cc.mrbird.febs.mall.service.IAgentService;
 import cc.mrbird.febs.mall.service.ICommonService;
 import cc.mrbird.febs.mall.service.IMemberProfitService;
 import cc.mrbird.febs.mall.service.ISystemService;
 import cc.mrbird.febs.rabbit.producter.AgentProducer;
+import cn.hutool.core.util.ObjectUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,6 +42,9 @@
     private final AgentProducer agentProducer;
 
     private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
+
+    @Autowired
+    private IAgentService agentService;
 
     @PostMapping(value = "/bonusSystemSetting")
     public FebsResponse bonusSystemSetting(@RequestBody Map<String, Object> map) {
@@ -200,4 +205,19 @@
         agentProducer.sendForceVoucherSaleMsg(scorePriceDic.getValue());
         return new FebsResponse().success();
     }
+
+    @PostMapping(value = "/hlmAchieveSet")
+    public FebsResponse hlmAchieveSet(HlmVoucherButtonDto hlmVoucherButtonDto) {
+        BigDecimal jobAchieveReleasePercent = new BigDecimal(hlmVoucherButtonDto.getJobAchieveReleasePercent());
+        if(jobAchieveReleasePercent.compareTo(BigDecimal.ZERO) <= 0){
+            return new FebsResponse().fail().message("请输入合理的数字");
+        }
+        commonService.updateDataDic(
+                GreenScoreEnum.JOB_ACHIEVE_RELEASE_PERCENT.getType(),
+                GreenScoreEnum.JOB_ACHIEVE_RELEASE_PERCENT.getCode(),
+                hlmVoucherButtonDto.getJobAchieveReleasePercent());
+
+        agentService.achieveReleasePercent();
+        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 fa0d6bb..50115fe 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
@@ -342,4 +342,24 @@
         model.addAttribute("hlmVoucherButtonDto", hlmVoucherButtonDto);
         return FebsUtil.view("modules/system/hlmVoucherButton");
     }
+
+    /**
+     * 一键释放业绩
+     * @param model
+     * @return
+     */
+    @GetMapping("hlmAchieveSetButton")
+    @RequiresPermissions("hlmAchieveSetButton:view")
+    public String hlmAchieveSetButton(Model model) {
+        HlmVoucherButtonDto hlmVoucherButtonDto = new HlmVoucherButtonDto();
+        DataDictionaryCustom jobAchieveReleasePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                GreenScoreEnum.JOB_ACHIEVE_RELEASE_PERCENT.getType(),
+                GreenScoreEnum.JOB_ACHIEVE_RELEASE_PERCENT.getCode());
+        if (jobAchieveReleasePercentDic != null) {
+            String jobAchieveReleasePercent = ObjectUtil.isEmpty(jobAchieveReleasePercentDic.getValue()) ? "0" : jobAchieveReleasePercentDic.getValue();
+            hlmVoucherButtonDto.setJobAchieveReleasePercent(jobAchieveReleasePercent);
+        }
+        model.addAttribute("hlmAchieveSet", hlmVoucherButtonDto);
+        return FebsUtil.view("modules/system/hlmAchieveSet");
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherButtonDto.java b/src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherButtonDto.java
index 5de70cf..c8734c3 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherButtonDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/HlmVoucherButtonDto.java
@@ -19,4 +19,6 @@
      * 余额提现需要绿色凭证比例
      */
     private String voucherPercent;
+
+    private String jobAchieveReleasePercent;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallAchieveRecordMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallAchieveRecordMapper.java
index f2a20f3..d374a96 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallAchieveRecordMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallAchieveRecordMapper.java
@@ -20,4 +20,6 @@
     BigDecimal selectSumAchieveByMemberIds(@Param("list")List<Long> mallMembersOffLinePerkIds, @Param("date") Date date);
 
     List<MallAchieveRecord> selectListByDate(@Param("date")Date profitDate);
+
+    BigDecimal selectSumAchieveByMemberId(@Param("memberId")Long id);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
index 60f30cd..8318cac 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
@@ -101,4 +101,6 @@
      * @return
      */
     List<MallMember> selectByRole(@Param("type") int type, @Param("state")int state);
+
+    List<MallMember> selectByLevel( @Param("level")String type);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
index aadf0cc..53c62d4 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
@@ -31,4 +31,10 @@
      * @param totalScore 补贴额度
      */
     void reduceStar(Long memberId,BigDecimal totalScore);
+
+    /**
+     * 只针对一星会员做修改:
+     * 按购买业绩(不按权益积分)每天静态释0.6%~1.2%
+     */
+    void achieveReleasePercent();
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
index b61b090..9190cce 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -1,6 +1,7 @@
 package cc.mrbird.febs.mall.service.impl;
 
 import cc.mrbird.febs.common.enumerates.*;
+import cc.mrbird.febs.common.utils.AppContants;
 import cc.mrbird.febs.common.utils.MallUtils;
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
@@ -9,6 +10,7 @@
 import cc.mrbird.febs.mall.vo.AdminTeamEqualsPerkVo;
 import cc.mrbird.febs.system.mapper.UserMapper;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.math.MathUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
@@ -39,6 +41,7 @@
 
     private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
     private final MallMemberMapper memberMapper;
+    private final MallAchieveRecordMapper mallAchieveRecordMapper;
     private final MallOrderInfoMapper mallOrderInfoMapper;
 
     private final IApiMallMemberWalletService iApiMallMemberWalletService;
@@ -580,5 +583,47 @@
         }
     }
 
+    @Override
+    public void achieveReleasePercent() {
+        DataDictionaryCustom jobAchieveReleasePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                GreenScoreEnum.JOB_ACHIEVE_RELEASE_PERCENT.getType(),
+                GreenScoreEnum.JOB_ACHIEVE_RELEASE_PERCENT.getCode()
+        );
+
+        List<MallMember> mallMembers = memberMapper.selectByLevel(MemberLevelEnum.SECOND_LEVEL.getType());
+        if(CollUtil.isNotEmpty(mallMembers)){
+            for(MallMember mallMember : mallMembers){
+                //总业绩
+                BigDecimal sumAchieve = mallAchieveRecordMapper.selectSumAchieveByMemberId(mallMember.getId());
+                BigDecimal jobAchieveReleasePercent = new BigDecimal(jobAchieveReleasePercentDic.getValue())
+                        .multiply(new BigDecimal(0.001));
+                //每个人的补贴额度
+                BigDecimal multiply = sumAchieve.multiply(jobAchieveReleasePercent);
+                if(multiply.compareTo(new BigDecimal(50)) < 0){
+                    MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMember.getId());
+                    BigDecimal totalScore = mallMemberWallet.getTotalScore();
+                    if(BigDecimal.ZERO.compareTo(totalScore) < 0){
+                        if(totalScore.compareTo(multiply) < 0){
+                            multiply = totalScore;
+                        }
+                        //减少补贴额度
+                        mallMemberWalletMapper.reduceTotalScoreById(multiply, mallMemberWallet.getId());
+
+                        reduceStar(mallMember.getId(),multiply);
+
+                        mallMemberWalletMapper.addBalanceById(multiply, mallMemberWallet.getId());
+
+                        mallMoneyFlowService.addMoneyFlow(
+                                mallMember.getId(),
+                                multiply,
+                                MoneyFlowTypeEnum.STATIC_BONUS.getValue(),
+                                MallUtils.getOrderNum(),
+                                FlowTypeEnum.BALANCE.getValue());
+                    }
+                }
+            }
+        }
+    }
+
 
 }
diff --git a/src/main/resources/mapper/modules/MallAchieveRecordMapper.xml b/src/main/resources/mapper/modules/MallAchieveRecordMapper.xml
index 116720c..d123506 100644
--- a/src/main/resources/mapper/modules/MallAchieveRecordMapper.xml
+++ b/src/main/resources/mapper/modules/MallAchieveRecordMapper.xml
@@ -28,4 +28,10 @@
         where date_format(achieve_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d');
     </select>
 
+    <select id="selectSumAchieveByMemberId" resultType="java.math.BigDecimal">
+        select IFNULL(sum(IFNULL(amount,0)),0)
+        from mall_achieve_record
+        where  member_id = #{memberId};
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallMemberMapper.xml b/src/main/resources/mapper/modules/MallMemberMapper.xml
index f0ab081..9a6e4ed 100644
--- a/src/main/resources/mapper/modules/MallMemberMapper.xml
+++ b/src/main/resources/mapper/modules/MallMemberMapper.xml
@@ -445,4 +445,9 @@
             </if>
         </where>
     </select>
+
+    <select id="selectByLevel" resultType="cc.mrbird.febs.mall.entity.MallMember">
+        select * from mall_member
+        where level = #{level}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/system/hlmAchieveSet.html b/src/main/resources/templates/febs/views/modules/system/hlmAchieveSet.html
new file mode 100644
index 0000000..6af0adc
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/system/hlmAchieveSet.html
@@ -0,0 +1,68 @@
+<div class="layui-fluid layui-anim febs-anim" id="hlm-achieve-set" lay-title="一星释放">
+    <div class="layui-row layui-col-space8 febs-container">
+        <form class="layui-form" action="" lay-filter="hlm-achieve-set-form">
+            <div class="layui-card">
+                <div class="layui-card-body">
+                    <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="jobAchieveReleasePercent" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" >
+                            <div class="layui-word-aux">设置1,则一星用户释放千分之一的业绩到余额。</div>
+                        </div>
+                    </div>
+                    <div class="layui-card-footer">
+                        <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="hlm-achieve-set-submit" id="submit">保存</button>
+                    </div>
+                </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', 'febs', 'form', 'eleTree'], function () {
+        var $ = layui.jquery,
+            febs = layui.febs,
+            form = layui.form,
+            hlmAchieveSet = [[${hlmAchieveSet}]],
+            $view = $('#hlm-achieve-set');
+
+        form.verify({
+            integer: [
+                /^[1-9]\d*$/
+                , '只能输入正整数'
+            ]
+        });
+
+        initHlmAchieveSetValue();
+
+        form.render();
+
+        function initHlmAchieveSetValue() {
+            form.val("hlm-achieve-set-form", {
+                "jobAchieveReleasePercent": hlmAchieveSet.jobAchieveReleasePercent
+            });
+        }
+
+        form.on('submit(hlm-achieve-set-submit)', function (data) {
+            febs.post(ctx + 'admin/system/hlmAchieveSet', data.field, function (res) {
+                febs.alert.success('设置成功');
+                return ;
+            });
+            return false;
+        });
+    });
+</script>
\ No newline at end of file

--
Gitblit v1.9.1