From 13e710cac7ce8ac3438aee3123d964cfe0ad4055 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 06 Apr 2023 17:11:40 +0800
Subject: [PATCH] 测试环境

---
 src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java |   12 +
 src/main/java/cc/mrbird/febs/mall/entity/MallMember.java              |    9 +
 src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java          |    4 
 src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java  |  179 +++++++++++++++++--------
 src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java        |    5 
 src/main/resources/mapper/modules/MallMemberMapper.xml                |    3 
 src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java   |  101 ++++++++++++++
 src/main/resources/templates/febs/views/modules/system/perkSet.html   |   75 ++++++++++
 8 files changed, 325 insertions(+), 63 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java
new file mode 100644
index 0000000..767691e
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java
@@ -0,0 +1,101 @@
+package cc.mrbird.febs.common.enumerates;
+
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Getter
+public enum MemberLevelEnum {
+    /**
+     * 合伙人
+     */
+    V_PARTNER("V_PARTNER",8),
+    /**
+     * 董事
+     */
+    V_DIRECTOR("V_DIRECTOR",7),
+    /**
+     * v1-v6
+     */
+    V6("V6",6),
+    V5("V5",5),
+    V4("V4",4),
+    V3("V3",3),
+    V2("V2",2),
+    V1("V1",1),
+    //普通用户
+    NORMAL("NORMAL",0);
+
+
+    private String type;
+
+    private Integer code;
+
+    MemberLevelEnum(String type, Integer code) {
+        this.type = type;
+        this.code = code;
+    }
+
+    public List<String> getLevelType(){
+        List<String> strs = new ArrayList<>();
+        for (MemberLevelEnum value : MemberLevelEnum.values()) {
+            strs.add(value.type);
+        }
+        return strs;
+    }
+
+    public int getLevelCode(String Level){
+        int codeOne = 0;
+        for (MemberLevelEnum value : MemberLevelEnum.values()) {
+            if(value.type.equals(Level)){
+                codeOne = value.code;
+            }
+        }
+        return codeOne;
+    }
+
+    public String getNextLevel(String Level){
+        String levelNext = Level;
+        int codeOne = 0;
+        for (MemberLevelEnum value : MemberLevelEnum.values()) {
+            if(value.type.equals(Level)){
+                codeOne = value.code;
+                break;
+            }
+        }
+        codeOne = codeOne + 1;
+        for (MemberLevelEnum value : MemberLevelEnum.values()) {
+            if(value.code == (codeOne)){
+                levelNext = value.type;
+                break;
+            }
+        }
+        return levelNext;
+    }
+
+//    public static void main(String[] args) {
+//        String zero_level = MemberLevelEnum.SECOND_LEVEL.getNextLevel("SIX_LEVEL");
+//        System.out.println(zero_level);
+//    }
+
+    /**
+     * 比较两个级别的大小,levelOne大于levelTwo返回1,否则返回0
+     */
+    public int compareLevel(String levelOne ,String levelTwo) {
+        int codeOne = 0;
+        int codeTwo = 0;
+        for (MemberLevelEnum value : MemberLevelEnum.values()) {
+            if(value.type.equals(levelOne)){
+                codeOne = value.code;
+            }
+            if(value.type.equals(levelTwo)){
+                codeTwo = value.code;
+            }
+        }
+        if(codeOne > codeTwo){
+            return 1;
+        }
+        return 0;
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
index 3729d8f..6df75e1 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
@@ -108,7 +108,17 @@
     /**
      * 直推积分补贴
      */
-    DIRECT_SCORE_PERK(21);
+    DIRECT_SCORE_PERK(21),
+
+    /**
+     * 董事现金补贴
+     */
+    DIRECTOR_CASH_PERK(22),
+
+    /**
+     * 董事现金补贴
+     */
+    PARTNER_CASH_PERK(23);
 
     private final int value;
 
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java
index deb0c89..7f0e8e3 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java
@@ -8,6 +8,10 @@
 @Getter
 public enum PerkEnum {
     /**
+     * 合伙人享全公司入单分红5%加权(现金)
+     */
+    PARTNER_CASH_PERK_PERCENT("PERK_SET", "PARTNER_CASH_PERK_PERCENT"),
+    /**
      * 董事享受全公司入单分红2%加权(现金)
      */
     DIRECTOR_CASH_PERK_PERCENT("PERK_SET", "DIRECTOR_CASH_PERK_PERCENT"),
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java
index 61a5590..4de7ccb 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java
@@ -125,13 +125,18 @@
     private String levelName;
 
     /**
-     * 董事
+     * 董事1:是 2:否
      */
     private Integer director;
 
     /**
-     * 店长
+     * 店长1:是 2:否
      */
     private Integer storeMaster;
 
+    /**
+     * 是否是合伙人 1:是 2:否
+     */
+    private Integer partner;
+
 }
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 5c4787a..0e75d37 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
@@ -82,6 +82,11 @@
 
     List<MallMember> selectMemberDirectForHasLevel(@Param("inviteId") String inviteId);
 
+    /**
+     * 根据type获取用户集合
+     * @param type 1:董事 2:店主 3:合伙人
+     * @return
+     */
     List<MallMember> selectDirectorsOrStoreMaster(@Param("type") Integer type);
 
     List<MallMember> selectMemberWithLevel(String level);
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 d6c09a6..7d568b7 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,9 +1,6 @@
 package cc.mrbird.febs.mall.service.impl;
 
-import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
-import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
-import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
-import cc.mrbird.febs.common.enumerates.PerkEnum;
+import cc.mrbird.febs.common.enumerates.*;
 import cc.mrbird.febs.common.utils.AppContants;
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
@@ -184,85 +181,147 @@
         String orderNo = mallOrderInfo.getOrderNo();
         //购买人
         Long memberId = mallOrderInfo.getMemberId();
-        MallMember mallMember = mallMemberMapper.selectById(memberId);
 
         /**
          * 1、购买人获得固定比例的积分
          *      = amountTC * 固定比例
          */
-        DataDictionaryCustom buySetMealPerkPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                PerkEnum.BUY_SET_MEAL_PERK_PERCENT.getType(),
-                PerkEnum.BUY_SET_MEAL_PERK_PERCENT.getCode());
-        if(ObjectUtil.isNotEmpty(buySetMealPerkPercentDic)){
-            BigDecimal buySetMealPerkPercent = new BigDecimal(buySetMealPerkPercentDic.getValue() == null ? "0" : buySetMealPerkPercentDic.getValue());
-            //购买人获得的积分数量
-            BigDecimal buySetMealPerk = buySetMealPerkPercent.multiply(AppContants.PERCENTAGE).multiply(amountTC).setScale(2, BigDecimal.ROUND_DOWN);
-            //增加积分
-            iApiMallMemberWalletService.add(buySetMealPerk,memberId,"score");
-            //增加一个获得积分的流水记录
-            mallMoneyFlowService.addMoneyFlow(
-                    memberId,
-                    buySetMealPerk,
-                    MoneyFlowTypeEnum.BUY_SET_MEAL_PERK.getValue(),
-                    orderNo,
-                    FlowTypeEnum.SCORE.getValue(),
-                    AppContants.IS_RETURN_YES);
-        }
+        perkMember(memberId,
+                PerkEnum.BUY_SET_MEAL_PERK_PERCENT,
+                amountTC,
+                "score",
+                MoneyFlowTypeEnum.BUY_SET_MEAL_PERK.getValue(),
+                FlowTypeEnum.SCORE.getValue(),
+                orderNo);
 
         /**
          * 2、直推获取8%的现金->余额,4%的积分->积分
          */
+        MallMember mallMember = mallMemberMapper.selectById(memberId);
         if(ObjectUtil.isNotEmpty(mallMember.getReferrerId())){
             String referrerId = mallMember.getReferrerId();
             MallMember mallMemberDirect = mallMemberMapper.selectInfoByInviteId(referrerId);
             Long directMemberId = mallMemberDirect.getId();
-            DataDictionaryCustom directCashPerkPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                    PerkEnum.DIRECT_CASH_PERK_PERCENT.getType(),
-                    PerkEnum.DIRECT_CASH_PERK_PERCENT.getCode());
-            if(ObjectUtil.isNotEmpty(directCashPerkPercentDic)){
-                BigDecimal directCashPerkPercent = new BigDecimal(directCashPerkPercentDic.getValue() == null ? "0" : directCashPerkPercentDic.getValue());
-                //获得的现金数量
-                BigDecimal directCashPerk = directCashPerkPercent.multiply(AppContants.PERCENTAGE).multiply(amountTC).setScale(2, BigDecimal.ROUND_DOWN);
-                //增加余额
-                iApiMallMemberWalletService.add(directCashPerk,directMemberId,"balance");
-                //增加一个获得现金的流水记录
-                mallMoneyFlowService.addMoneyFlow(
-                        directMemberId,
-                        directCashPerk,
-                        MoneyFlowTypeEnum.DIRECT_CASH_PERK.getValue(),
-                        orderNo,
-                        FlowTypeEnum.BALANCE.getValue(),
-                        AppContants.IS_RETURN_YES);
-            }
-            DataDictionaryCustom directScorePerkPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                    PerkEnum.DIRECT_SCORE_PERK_PERCENT.getType(),
-                    PerkEnum.DIRECT_SCORE_PERK_PERCENT.getCode());
-            if(ObjectUtil.isNotEmpty(directScorePerkPercentDic)){
-                BigDecimal directScorePerkPercent = new BigDecimal(directScorePerkPercentDic.getValue() == null ? "0" : directScorePerkPercentDic.getValue());
-                //获得的积分数量
-                BigDecimal directScorePerk = directScorePerkPercent.multiply(AppContants.PERCENTAGE).multiply(amountTC).setScale(2, BigDecimal.ROUND_DOWN);
-                //增加余额
-                iApiMallMemberWalletService.add(directScorePerk,directMemberId,"score");
-                //增加一个获得积分的流水记录
-                mallMoneyFlowService.addMoneyFlow(
-                        directMemberId,
-                        directScorePerk,
-                        MoneyFlowTypeEnum.DIRECT_SCORE_PERK.getValue(),
-                        orderNo,
-                        FlowTypeEnum.SCORE.getValue(),
-                        AppContants.IS_RETURN_YES);
-            }
+
+            perkMember(directMemberId,
+                    PerkEnum.DIRECT_CASH_PERK_PERCENT,
+                    amountTC,
+                    "balance",
+                    MoneyFlowTypeEnum.DIRECT_CASH_PERK.getValue(),
+                    FlowTypeEnum.BALANCE.getValue(),
+                    orderNo);
+
+            perkMember(directMemberId,
+                    PerkEnum.DIRECT_SCORE_PERK_PERCENT,
+                    amountTC,
+                    "score",
+                    MoneyFlowTypeEnum.DIRECT_SCORE_PERK.getValue(),
+                    FlowTypeEnum.SCORE.getValue(),
+                    orderNo);
         }
 
         /**
          * 4、董事享受全公司入单分红2%加权(现金)
          */
-//        mallMemberMapper.selectMemberWithLevel()
+        List<MallMember> mallMembersDirectors = mallMemberMapper.selectDirectorsOrStoreMaster(1);
+        if(CollUtil.isNotEmpty(mallMembersDirectors)){
+            perkMembersLevel(mallMembersDirectors,
+                    PerkEnum.DIRECTOR_CASH_PERK_PERCENT,
+                    amountTC,
+                    "balance",
+                    MoneyFlowTypeEnum.DIRECTOR_CASH_PERK.getValue(),
+                    FlowTypeEnum.BALANCE.getValue(),
+                    orderNo);
+        }
 
+        /**
+         * 5、合伙人享全公司入单分红5%加权(现金)
+         */
+        List<MallMember> mallMemberPartners = mallMemberMapper.selectDirectorsOrStoreMaster(3);
+        if(CollUtil.isNotEmpty(mallMemberPartners)){
+            perkMembersLevel(mallMemberPartners,
+                    PerkEnum.PARTNER_CASH_PERK_PERCENT,
+                    amountTC,
+                    "balance",
+                    MoneyFlowTypeEnum.PARTNER_CASH_PERK.getValue(),
+                    FlowTypeEnum.BALANCE.getValue(),
+                    orderNo);
+        }
+
+        /**
+         *
+         */
 
     }
 
+    /**
+     * 给某一个用户根据订单金额去加权平分
+     * @param memberId 用户ID
+     * @param perkEnum 比例的枚举值
+     * @param amountTC 总金额
+     * @param walletField 类型:score:积分 balance:余额
+     * @param type 流水类型
+     * @param flowType 流水分类
+     * @param orderNo 订单编号
+     */
+    private void perkMember(Long memberId,PerkEnum perkEnum,BigDecimal amountTC,String walletField,int type,int flowType,String orderNo){
+        DataDictionaryCustom perkEnumDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                perkEnum.getType(),
+                perkEnum.getCode());
+        if(ObjectUtil.isNotEmpty(perkEnumDic)){
+            BigDecimal perkEnumDicPercent = new BigDecimal(perkEnumDic.getValue() == null ? "0" : perkEnumDic.getValue());
+            //获得数量
+            BigDecimal perkEnumDicPercentPerk = perkEnumDicPercent.multiply(AppContants.PERCENTAGE).multiply(amountTC).setScale(2, BigDecimal.ROUND_DOWN);
+            //增加
+            iApiMallMemberWalletService.add(perkEnumDicPercentPerk,memberId,walletField);
+            //增加一个流水记录
+            mallMoneyFlowService.addMoneyFlow(
+                    memberId,
+                    perkEnumDicPercentPerk,
+                    type,
+                    orderNo,
+                    flowType,
+                    AppContants.IS_RETURN_YES);
+        }
+    }
 
+    /**
+     *  按照级别,根据订单金额去加权平分
+     * @param mallMembers 用户
+     * @param perkEnum  比例的枚举值
+     * @param amountTC  总金额
+     * @param walletField   类型:score:积分 balance:余额
+     * @param type  流水类型
+     * @param flowType  流水分类
+     * @param orderNo   订单编号
+     */
+    private void perkMembersLevel(List<MallMember> mallMembers,PerkEnum perkEnum,BigDecimal amountTC,String walletField,int type,int flowType,String orderNo){
+        DataDictionaryCustom perkEnumDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                perkEnum.getType(),
+                perkEnum.getCode());
+        if(ObjectUtil.isNotEmpty(perkEnumDic)){
+            BigDecimal perkEnumDicPercent = new BigDecimal(perkEnumDic.getValue() == null ? "0" : perkEnumDic.getValue());
+            //获得的现金
+            BigDecimal perkEnumDicPercentPerkSum = perkEnumDicPercent.multiply(AppContants.PERCENTAGE).multiply(amountTC).setScale(2, BigDecimal.ROUND_DOWN);
+            //然后董事平分
+            BigDecimal perkEnumDicPercentPerk = perkEnumDicPercentPerkSum.divide(new BigDecimal(mallMembers.size()), 2, BigDecimal.ROUND_DOWN);
+            if(perkEnumDicPercentPerk.compareTo(BigDecimal.ZERO) > 0){
+                for(MallMember mallMember : mallMembers){
+                    Long memberId = mallMember.getId();
+                    //增加余额
+                    iApiMallMemberWalletService.add(perkEnumDicPercentPerk,memberId,walletField);
+                    //增加一个获得现金的流水记录
+                    mallMoneyFlowService.addMoneyFlow(
+                            memberId,
+                            perkEnumDicPercentPerk,
+                            type,
+                            orderNo,
+                            flowType,
+                            AppContants.IS_RETURN_YES);
+                }
+            }
+        }
+    }
 
     @Override
     public void rankReturnMoney(Long orderId) {
diff --git a/src/main/resources/mapper/modules/MallMemberMapper.xml b/src/main/resources/mapper/modules/MallMemberMapper.xml
index 060eb78..c8b88e2 100644
--- a/src/main/resources/mapper/modules/MallMemberMapper.xml
+++ b/src/main/resources/mapper/modules/MallMemberMapper.xml
@@ -393,6 +393,9 @@
             <if test="type == 2">
                 and store_master = 1
             </if>
+            <if test="type == 3">
+                and partner = 1
+            </if>
         </where>
     </select>
 
diff --git a/src/main/resources/templates/febs/views/modules/system/perkSet.html b/src/main/resources/templates/febs/views/modules/system/perkSet.html
new file mode 100644
index 0000000..a5a8f86
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/system/perkSet.html
@@ -0,0 +1,75 @@
+<div class="layui-fluid layui-anim febs-anim" id="perk-set" lay-title="补贴设置">
+    <div class="layui-row layui-col-space8 febs-container">
+        <form class="layui-form" action="" lay-filter="perk-set-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="perk-set-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 = $('#perk-set');
+
+        form.verify(validate);
+
+        initCashoutValue();
+
+        form.render();
+
+        function initCashoutValue() {
+            form.val("perk-set-form", {
+                "everydayRatio": scorePoor.everydayRatio,
+                "dividEquallyRatio": scorePoor.dividEquallyRatio
+            });
+        }
+
+        form.on('submit(perk-set-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