xiaoyong931011
2022-12-20 e90dc8cdf7d4ce7d08e1ab51fcde3c28fd2995a0
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
139
140
package cc.mrbird.febs.mall.quartz;
 
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.enumerates.MemberAccountLevelEnum;
import cc.mrbird.febs.common.enumerates.MemberAgentLevelEnum;
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
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.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import java.util.Date;
import java.util.List;
 
/**
 * @author wzy
 * @date 2021-09-25
 **/
@Slf4j
@Component
public class OrderOvertimeJob {
 
    @Autowired
    private MallOrderInfoMapper orderInfoMapper;
 
    @Autowired
    private MallMemberMapper mallMemberMapper;
 
    @Autowired
    private DataDictionaryCustomMapper dataDictionaryCustomMapper;
 
    @Scheduled(cron = "0 0/5 * * * ? ")
    public void overtimeJob() {
        log.info("订单超时任务执行");
        List<MallOrderInfo> orderList = orderInfoMapper.selectOrderInfoByStatus(OrderStatusEnum.WAIT_PAY.getValue());
        if (CollUtil.isNotEmpty(orderList)) {
            for (MallOrderInfo orderInfo : orderList) {
                long subTime = DateUtil.between(orderInfo.getOrderTime(), new Date(), DateUnit.MINUTE, false);
 
                if (subTime > 15) {
                    orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
                    orderInfo.setCancelType(MallOrderInfo.CANCEL_OVERTIME_NO_PAY);
                    orderInfoMapper.updateById(orderInfo);
                }
            }
        }
 
    }
 
    @Scheduled(cron = "0 0 1 * * ? ")
    public void updateMemberAgentLevel() {
        log.info("会员代理等级升级任务执行");
        /**
         * 获取会员信息
         *  1、已经升级成为一星
         */
        /**
         * 区代
         *  1、自身一星
         *  2、直推三个星级
         *  3、团队五个星级
         */
        updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_ONE.getType(),DataDictionaryEnum.AGENT_ONE.getCode());
        /**
         * 县代
         *  1、自身2星
         *  2、直推5个星级
         *  3、团队50个星级
         */
        updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_TWO.getType(),DataDictionaryEnum.AGENT_TWO.getCode());
        updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_THREE.getType(),DataDictionaryEnum.AGENT_THREE.getCode());
        updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_FOUR.getType(),DataDictionaryEnum.AGENT_FOUR.getCode());
        updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_FIVE.getType(),DataDictionaryEnum.AGENT_FIVE.getCode());
    }
 
    private void updateMemberAgentLevelByName(String name,String code){
        DataDictionaryCustom agentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                name,
                code
        );
        JSONObject jsonObject = JSONUtil.parseObj(agentDic.getValue());
        //自身星级
        String levelSelf = jsonObject.get("levelSelf").toString();
        //直推星级数量
        String directLevelCnt = jsonObject.get("directLevelCnt").toString();
        //团队星级数量
        String teamLevelCnt = jsonObject.get("teamLevelCnt").toString();
        //两个市场均有上一个代理等级
        String minTeamLevelCnt = jsonObject.get("minTeamLevelCnt").toString();
        List<MallMember> agentLevelList = mallMemberMapper.selectByAccountLevel(levelSelf);
        if(CollUtil.isNotEmpty(agentLevelList)){
            for(MallMember mallMember : agentLevelList){
                //有星级的直推
                Integer directCnt = mallMemberMapper.selectByRefererIdAndAccountLevel(mallMember.getInviteId(),MemberAccountLevelEnum.NORMAL.getName());
                //团队中星级会员数量
                Integer teamCnt = mallMemberMapper.selectByReferersIdAndAccountLevel(mallMember.getInviteId(),MemberAccountLevelEnum.NORMAL.getName());
                //两个市场均有上一个代理等级
                Integer minCnt = 0;
                if(0 < Integer.parseInt(minTeamLevelCnt)){
                    String minLevel = MemberAgentLevelEnum.AGENT_ONE.minLevel(code);
                    //获取所有直推用户
                    List<MallMember> mallMembers = mallMemberMapper.selectByRefererId(mallMember.getInviteId());
                    if(CollUtil.isNotEmpty(mallMembers) && mallMembers.size() > 2){
                        Integer levelCnt = 0;
                        for(MallMember directMember : mallMembers){
                            Integer minlevelCnt = mallMemberMapper.selectByReferersIdAndLevel(directMember.getInviteId(),minLevel);
                            if(0 < minlevelCnt){
                                levelCnt = levelCnt + 1;
                            }
                            if(levelCnt >= Integer.parseInt(minTeamLevelCnt)){
                                minCnt = 1;
                                break;
                            }
                        }
                    }
                }else{
                    //区代不需要判断这个市场条件
                    minCnt = 1;
                }
                if(Integer.parseInt(directLevelCnt) <= directCnt
                        && Integer.parseInt(teamLevelCnt) <= teamCnt
                        && minCnt > 0){
                    //更新会员代理等级
                    mallMemberMapper.updateLevelById(MemberAgentLevelEnum.AGENT_ONE.getNameByCode(code),mallMember.getId());
                }
            }
        }
    }
}