src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/entity/MallMember.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/modules/MallMemberMapper.xml | ●●●●● patch | view | raw | blame | history | |
src/main/resources/templates/febs/views/modules/system/perkSet.html | ●●●●● patch | view | raw | blame | history |
src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java
New file @@ -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; } } 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; 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"), 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; } 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); 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, perkMember(memberId, PerkEnum.BUY_SET_MEAL_PERK_PERCENT, amountTC, "score", MoneyFlowTypeEnum.BUY_SET_MEAL_PERK.getValue(), orderNo, FlowTypeEnum.SCORE.getValue(), AppContants.IS_RETURN_YES); } 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, perkMember(directMemberId, PerkEnum.DIRECT_CASH_PERK_PERCENT, amountTC, "balance", 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, orderNo); perkMember(directMemberId, PerkEnum.DIRECT_SCORE_PERK_PERCENT, amountTC, "score", MoneyFlowTypeEnum.DIRECT_SCORE_PERK.getValue(), orderNo, FlowTypeEnum.SCORE.getValue(), AppContants.IS_RETURN_YES); } 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) { 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> src/main/resources/templates/febs/views/modules/system/perkSet.html
New file @@ -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>