xiaoyong931011
2023-04-06 ceb5d9d416cb0ea9bf8736a6f6aeb6281fd3a8c0
测试环境
4 files modified
1 files added
191 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java 36 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/utils/AppContants.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java 125 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallMemberWalletMapper.xml 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
@@ -93,7 +93,22 @@
    /**
     * 积分池收益
     */
    SCORE_POOL(18);
    SCORE_POOL(18),
    /**
     * 购买人购买套餐获取积分补贴
     */
    BUY_SET_MEAL_PERK(19),
    /**
     * 直推现金补贴
     */
    DIRECT_CASH_PERK(20),
    /**
     * 直推积分补贴
     */
    DIRECT_SCORE_PERK(21);
    private final int value;
src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java
New file
@@ -0,0 +1,36 @@
package cc.mrbird.febs.common.enumerates;
import lombok.Getter;
/**
 * 补贴的枚举值
 */
@Getter
public enum PerkEnum {
    /**
     * 董事享受全公司入单分红2%加权(现金)
     */
    DIRECTOR_CASH_PERK_PERCENT("PERK_SET", "DIRECTOR_CASH_PERK_PERCENT"),
    /**
     * 直推固定比例 积分比例
     */
    DIRECT_SCORE_PERK_PERCENT("PERK_SET", "DIRECT_SCORE_PERK_PERCENT"),
    /**
     * 直推固定比例 现金比例
     */
    DIRECT_CASH_PERK_PERCENT("PERK_SET", "DIRECT_CASH_PERK_PERCENT"),
    /**
     * 固定比例
     *     购买套餐,给购买人固定比例的积分 = 购买套餐的金额 * 固定比例
     */
    BUY_SET_MEAL_PERK_PERCENT("PERK_SET", "BUY_SET_MEAL_PERK_PERCENT");
    private String type;
    private String code;
    PerkEnum(String type, String code) {
        this.type = type;
        this.code = code;
    }
}
src/main/java/cc/mrbird/febs/common/utils/AppContants.java
@@ -61,6 +61,12 @@
    public static final int DEL_FLAG_Y = 1;
    public static final int DEL_FLAG_N = 2;
    /**
     * 资金流水记录 是否执行、返还完毕
     *  is_return 1:是 2:否
     */
    public static final int IS_RETURN_YES = 1;
    public static final int IS_RETURN_NO = 2;
    public static final String REDIS_ORDER_OVERTIME_PREFIX = "order_overtime_";
    public static final String REDIS_ORDER_OVERTIME = "order_overtime_{}_{}";
@@ -68,4 +74,9 @@
    public static final String AGENT_LEVEL = "AGENT_LEVEL";
    public static final String AGENT_LEVEL_REQUIRE = "AGENT_LEVEL_REQUIRE";
    /**
     * 百分比
     */
    public static final BigDecimal PERCENTAGE = new BigDecimal("0.01");
}
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -1,18 +1,15 @@
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.utils.AppContants;
import cc.mrbird.febs.mall.entity.AgentInfo;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.IAgentService;
import cc.mrbird.febs.mall.service.IApiMallMemberService;
import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
import cc.mrbird.febs.mall.service.IMallAchieveService;
import cc.mrbird.febs.mall.service.*;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import jdk.nashorn.internal.ir.IfNode;
@@ -27,6 +24,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @author wzy
@@ -39,6 +37,11 @@
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    private final MallMemberMapper memberMapper;
    private final MallOrderInfoMapper mallOrderInfoMapper;
    private final MallOrderItemMapper mallOrderItemMapper;
    private final IApiMallMemberWalletService iApiMallMemberWalletService;
    private final IMallMoneyFlowService mallMoneyFlowService;
    private final MallMemberMapper mallMemberMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -136,7 +139,7 @@
    /**
     * 团队业绩是否达标
     *
     * @param mallMember
     * @param
     * @param agentInfo
     * @return
     */
@@ -155,8 +158,112 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void returnMoneyToAgent(Long orderId) {
        /**
         * 1、购买人获得固定比例的积分
         * 2、直推获取8%的现金->余额,4%的积分->积分
         * 3、不同代理级别获取不用的比例的现金和积分
         * 4、董事享受全公司入单分红2%加权(现金)
         * 5、合伙人享全公司入单分红5%加权(现金)
         */
        //获取当前订单子表信息
        List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectbyOrderId(orderId);
        if(CollUtil.isEmpty(mallOrderItemList)){
            return;
        }
        //获取订单中套餐的信息
        List<MallOrderItem> mallOrderItemIsTCs = mallOrderItemList.stream().filter(mallOrderItem -> mallOrderItem.getIsNormal() == 2).collect(Collectors.toList());
        if(CollUtil.isEmpty(mallOrderItemIsTCs)){
            return;
        }
        //获取订单中套餐总数金额
        BigDecimal amountTC = mallOrderItemIsTCs.stream().map(MallOrderItem::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
        if(BigDecimal.ZERO.compareTo(amountTC) >= 0){
            return;
        }
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId);
        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);
        }
        /**
         * 2、直推获取8%的现金->余额,4%的积分->积分
         */
        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);
            }
        }
        /**
         * 4、董事享受全公司入单分红2%加权(现金)
         */
//        mallMemberMapper.selectMemberWithLevel()
    }
    @Override
    public void rankReturnMoney(Long orderId) {
src/main/resources/mapper/modules/MallMemberWalletMapper.xml
@@ -3,7 +3,7 @@
<mapper namespace="cc.mrbird.febs.mall.mapper.MallMemberWalletMapper">
    <select id="selectWalletByMemberId" resultType="cc.mrbird.febs.mall.entity.MallMemberWallet">
        select * from mall_member_wallet where member_id=#{memberId}
        select * from mall_member_wallet where member_id=#{memberId} for update
    </select>
    <update id="updateBalanceWithVersion">