Administrator
2025-05-21 31aa25676f11048c538bb5e92bc65cd33170de94
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package cc.mrbird.febs.mall.service.impl;
 
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.IAgentService;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.math.BigDecimal;
import java.util.List;
 
/**
 * @author wzy
 * @date 2021-09-26
 **/
@Slf4j
@Service
@RequiredArgsConstructor
public class AgentServiceImpl implements IAgentService {
 
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    private final MallMemberMapper memberMapper;
    private final HappySaleLevelMapper happySaleLevelMapper;
 
    /**
     * 自动升级代理等级
     * 根据会员的当前状态和业绩,自动为其升级到下一个代理等级
     * @param memberId 会员ID,用于识别需要升级的会员
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void autoUpAgentLevel(Long memberId) {
        // 根据会员ID查询会员信息
        MallMember member = memberMapper.selectById(memberId);
 
        // 检查会员账户状态和类型,只有在启用状态和普通类型时才进行升级操作
        if(MallMember.ACCOUNT_STATUS_ENABLE != member.getAccountStatus()
                || MallMember.ACCOUNT_TYPE_NORMAL != member.getAccountType() ){
            return;
        }
        // 获取会员当前的店铺主人等级
        Integer storeMaster = member.getStoreMaster();
        // 下一个分销等级
        storeMaster =storeMaster +1;
        // 根据新的店铺主人等级查询对应的快乐销售等级信息
        HappySaleLevel happySaleLevel = happySaleLevelMapper.selectOne(
                new LambdaQueryWrapper<HappySaleLevel>()
                        .eq(HappySaleLevel::getCode, storeMaster)
        );
        // 如果没有找到对应的快乐销售等级信息,则记录日志并返回
        if (happySaleLevel == null) {
            log.info("当前等级无下级");
            return;
        }
        // 检查直推会员数量是否达到要求
        if (!directMemberCnt(member, happySaleLevel.getDirectCnt())) {
            return;
        }
 
        // 检查团队人数是否达到要求
        if (!teamCntFinish(member, happySaleLevel.getTeamCnt())) {
            return;
        }
 
        // 检查团队业绩是否达到要求
        if (!teamIncome(member, happySaleLevel.getTeamAmount())) {
            return;
        }
 
        // 更新会员的店铺主人等级
        member.setStoreMaster(storeMaster);
        // 更新会员信息
        memberMapper.updateById(member);
    }
 
 
    /**
     * 判断直推人数是否达标
     */
    private boolean directMemberCnt(MallMember member, Integer directCnt) {
        List<MallMember> childList = memberMapper.selectByRefererId(member.getInviteId());
        if (CollUtil.isEmpty(childList)) {
            return false;
        }
 
        if (childList.size() >= directCnt) {
            return true;
        }
 
        log.info("用户:{}直推数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getStoreMaster(), childList.size(), directCnt);
        return false;
    }
 
    /**
     * 判断团队数量是否达标
     */
    private boolean teamCntFinish(MallMember member, Integer teamCnt) {
        // 直推用户
        List<MallMember> teamMember = memberMapper.selectAllChildAgentListByInviteId(member.getInviteId());
        if (CollUtil.isEmpty(teamMember)) {
            return false;
        }
 
        if (teamMember.size() >= teamCnt) {
            return true;
        }
 
        log.info("用户:{}团队数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getPhone(), member.getStoreMaster(), teamMember.size(), teamCnt);
        return false;
    }
 
    /**
     * 团队业绩是否达标
     */
    private boolean teamIncome(MallMember member, BigDecimal teamAmount) {
        BigDecimal totalIncome = memberMapper.selectAchieveByMemberId(member.getInviteId(), 2);
 
        if(totalIncome.compareTo(teamAmount) >= 0){
            return true;
        }
        log.info("用户:{}团队业绩未达标, 当前等级:{}, 当前业绩:{}, 目标业绩:{}", member.getPhone(), member.getStoreMaster(), totalIncome, teamAmount);
        return false;
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void returnMoneyToAgent(Long orderId) {
    }
 
    @Override
    public void rankReturnMoney(Long orderId) {
 
    }
}