fix
Hentua
2023-04-24 c910067dc3a65ed90e93d3352ef2b76955cc8905
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -1,28 +1,14 @@
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.common.utils.RedisUtils;
import cc.mrbird.febs.mall.dto.ScorePoorDto;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.*;
import cc.mrbird.febs.mall.vo.AdminTeamEqualsPerkVo;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.models.auth.In;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -31,7 +17,6 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @author wzy
@@ -73,6 +58,7 @@
     * @param orderId
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void directProfit(Long orderId) {
        log.info("######直推奖励, 订单ID:{}######", orderId);
        MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(orderId);
@@ -80,16 +66,24 @@
            log.info("积分订单无返利");
            return;
        }
        BigDecimal indirectPer = BigDecimal.valueOf(0.2);
        BigDecimal indirectPer = BigDecimal.valueOf(0.25);
        BigDecimal indirectPer2 = BigDecimal.valueOf(0.15);
        MallMember member = mallMemberMapper.selectById(orderInfo.getMemberId());
        // 父级会员
        MallMember parentMember = mallMemberMapper.selectInfoByInviteId(member.getReferrerId());
        if (parentMember == null) {
            return;
        }
        if (parentMember.getAccountLevel() == 0 || MemberLevelEnum.ZERO_LEVEL.getType().equals(parentMember.getLevel())) {
            log.info("上级:{}未购买会员套餐,无返利", parentMember.getInviteId());
            return;
        }
        // 父级会员直推人数
        Integer directCnt = mallMemberMapper.selectOwnCntByInviteId(parentMember.getInviteId());
        Integer directCnt = mallMemberMapper.selectOwnCntByInviteIdAndAccountLevel(parentMember.getInviteId(), parentMember.getAccountLevel());
        List<DataDictionaryCustom> dataDices = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.DIRECT_BONUS_SETTING.getType());
        directCnt = directCnt == null ? 0 : directCnt;
@@ -128,7 +122,7 @@
                    isSameLevel = 1;
                    // 非代理推代理/非股东推股东
                } else {
                    profitPer = BigDecimal.valueOf(0.1);
                    profitPer = BigDecimal.valueOf(10);
                    isSameLevel = 2;
                }
            }
@@ -150,6 +144,10 @@
            // 非代理推代理
            if (isSameLevel == 2) {
                if (StrUtil.isBlank(parentMember.getReferrerIds())) {
                    continue;
                }
                List<MallMember> mallMembers = mallMemberMapper.selectParentMemberList(StrUtil.split(parentMember.getReferrerIds(), ','), parentMember.getReferrerId(), 2);
                if (CollUtil.isEmpty(mallMembers)) {
                    continue;
@@ -287,8 +285,39 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void agentProfit() {
    public void agentProfit(Integer type) {
        log.info("#####==代理分红==start==#####");
        if (type == null) {
            return;
        }
        MallSystemSetting systemSetting = mallSystemSettingMapper.selectById(1L);
        if (systemSetting == null) {
            log.info("没有系统配置");
            return;
        }
        BigDecimal hundred = BigDecimal.valueOf(100);
        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.AGENT_BONUS_RELEASE.getType(), DataDictionaryEnum.AGENT_BONUS_RELEASE.getCode());
        if (dic == null || StrUtil.isBlank(dic.getValue()) || Integer.parseInt(dic.getValue()) == 0) {
            log.info("不进行全网分红");
            return;
        }
        // 全网分红
        BigDecimal waitToBonus = systemSetting.getAllBonus().multiply(new BigDecimal(dic.getValue()).divide(hundred, 2, RoundingMode.HALF_UP));
        // 代理
        List<MallMember> mallMembers = mallMemberMapper.selectAgentOrPartnetMemberList(type);
        if (CollUtil.isEmpty(mallMembers) || waitToBonus.compareTo(BigDecimal.ZERO) < 1) {
            log.info("待分红金额不足或会员不足");
            return;
        }
        BigDecimal perBonus = waitToBonus.divide(new BigDecimal(mallMembers.size()), 2, RoundingMode.HALF_UP);
        mallMembers.forEach(item -> {
            changeScoreAndCommission(item.getId(), perBonus, type.equals(AccountLevelEnums.VVIP.getLevel()) ? MoneyFlowTypeEnum.AGENT_BONUS.getValue() : MoneyFlowTypeEnum.PARTNER_BONUS.getValue(), null);
        });
        log.info("#####==代理分红==end==#####");
    }
@@ -327,7 +356,7 @@
        // 全网分红
        BigDecimal waitToBonus = systemSetting.getAllBonus().multiply(new BigDecimal(dic.getValue()).divide(hundred, 2, RoundingMode.HALF_UP));
        List<MallMember> mallMembers = mallMemberMapper.selectMemberAfterLevelList(MemberLevelEnums.FIRST_LEVEL_Y.getCode());
        List<MallMember> mallMembers = mallMemberMapper.selectMemberAfterLevelList(MemberLevelEnum.FIRST_LEVEL.getType());
        if (CollUtil.isEmpty(mallMembers) || waitToBonus.compareTo(BigDecimal.ZERO) < 1) {
            log.info("待分红金额不足或会员不足");
            return;
@@ -363,14 +392,14 @@
        for (Map.Entry<String, List<MallMember>> entry : levelMemberMap.entrySet()) {
            BigDecimal levelBonus = levelBonusMap.get(entry.getKey());
            List<MallMember> memberList = entry.getValue();
            if (CollUtil.isEmpty(memberList) || levelBonus.compareTo(BigDecimal.ZERO) < 1) {
                continue;
            }
            BigDecimal perBonus = levelBonus.divide(BigDecimal.valueOf(memberList.size()), 2, RoundingMode.HALF_UP);
            memberList.forEach(item -> {
                changeScoreAndCommission(item.getId(), perBonus, 2, null);
                changeScoreAndCommission(item.getId(), perBonus, MoneyFlowTypeEnum.ALL_INTERNET_BONUS.getValue(), null);
            });
        }