xiaoyong931011
2023-04-06 ceb5d9d416cb0ea9bf8736a6f6aeb6281fd3a8c0
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) {