mitao
2024-04-30 ab4ea7b8f10c9b66aed9c2ea161a08b25c3851a7
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
141
142
143
package com.sinata.rest.modular.mall.job;
 
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sinata.common.enums.EnumIsDelete;
import com.sinata.common.enums.EnumMemberGrade;
import com.sinata.common.enums.EnumSystemSetKey;
import com.sinata.common.enums.mall.EnumMallOrderState;
import com.sinata.rest.modular.mall.service.IMallOrderService;
import com.sinata.rest.modular.member.model.MemUser;
import com.sinata.rest.modular.member.service.IMemUserRelationService;
import com.sinata.rest.modular.member.service.IMemUserService;
import com.sinata.rest.modular.system.service.ISystemSetService;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
 
/**
 * 定时任务-等级晋升维持
 */
@Slf4j
@Component
@EnableScheduling
@Api(tags = "API通用接口")
public class UserV3UpDownWork {
 
    @Autowired
    private ISystemSetService setService;
 
    @Autowired
    private IMemUserService memUserService;
 
    @Autowired
    private IMemUserRelationService memUserRelationService;
 
    @Autowired
    private IMallOrderService mallOrderService;
 
    /**
     * 每天执行1次
     */
    @Scheduled(cron = "0 1 0 */1 * *")
    public void run() {
        // 【职级晋升维持】黄金营销员-晋升:可于{1次日/2次月/3次季度}晋升为城市合伙人
        Integer set_304 = setService.getIntegerById(EnumSystemSetKey.SET_304.index);
        if (set_304 == 1) {
            v3Up();
        } if (set_304 == 2 && DateUtil.thisDayOfMonth() == 1) {
            v3Up();
        } if (set_304 == 3 && DateUtil.isSameDay(DateUtil.date(), DateUtil.beginOfQuarter(DateUtil.date()))) {
            v3Up();
        }
 
        Integer set_306 = setService.getIntegerById(EnumSystemSetKey.SET_306.index);
        if (set_306 == 1) {
            v3UpPlan2();
        } if (set_306 == 2 && DateUtil.thisDayOfMonth() == 1) {
            v3UpPlan2();
        } if (set_306 == 3 && DateUtil.isSameDay(DateUtil.date(), DateUtil.beginOfQuarter(DateUtil.date()))) {
            v3UpPlan2();
        }
    }
    @Scheduled(cron = "0 0 17 * * ?")
    public void runTest() {
        log.info("---------------开始执行人员晋升任务-----------------" );
        Integer set_306 = setService.getIntegerById(EnumSystemSetKey.SET_306.index);
        if (set_306 == 1) {
            v3UpPlan2();
        } if (set_306 == 2 && DateUtil.thisDayOfMonth() == 1) {
            v3UpPlan2();
        } if (set_306 == 3 && DateUtil.isSameDay(DateUtil.date(), DateUtil.beginOfQuarter(DateUtil.date()))) {
            v3UpPlan2();
        }
    }
    public void v3Up() {
        // 自然季度开始结束时间
        String beginTime = DateUtil.beginOfQuarter(DateUtil.date()).toString();
        String endTime = DateUtil.endOfQuarter(DateUtil.date()).toString();
 
        // 黄金营销员列表
        List<MemUser> v3UserList = memUserService.list(
                Wrappers.<MemUser>query().lambda()
                        .select(MemUser::getId, MemUser::getRealName, MemUser::getCreditScore, MemUser::getMemberGradeId)
                        .eq(MemUser::getIsDelete, EnumIsDelete.EXISTED.index) // 非注销
                        .eq(MemUser::getIsLeaveOffice, 0) // 非离职
                        .eq(MemUser::getMemberGradeId, EnumMemberGrade.G_3.index)
                        .ge(MemUser::getCreditScore, setService.getIntegerById(EnumSystemSetKey.SET_303.index))
        );
 
        for (MemUser user : v3UserList) {
            Integer set_301 = setService.getIntegerById(EnumSystemSetKey.SET_301.index);
            // 直接推荐{}个黄金营销员
            Integer shareV3Count = memUserRelationService.directTeamCount(
                    user.getId(),
                    Arrays.asList(EnumMemberGrade.G_3.index),
                    beginTime,
                    endTime
            );
            if (shareV3Count < set_301) {
                continue;
            }
            Integer set_302 = setService.getIntegerById(EnumSystemSetKey.SET_302.index);
            BigDecimal v3DirectTeamMoney = mallOrderService.getV3DirectTeamSumMoney(
                    user.getId(),
                    Arrays.asList(EnumMallOrderState.SUCCESS.index),
                    beginTime,
                    endTime
            );
            if (v3DirectTeamMoney.compareTo(BigDecimal.valueOf(set_302 * 10000)) == -1) {
                continue;
            }
 
            log.info("【黄金营销员晋升为城市合伙人】用户:{} / {},直推黄金营销员:{}个,直属团队达成{}元业绩,品行分:{}",
                    user.getId(), user.getRealName(), shareV3Count, v3DirectTeamMoney, user.getCreditScore()
            );
            // 晋升为-城市合伙人
            user.setMemberGradeId(EnumMemberGrade.G_4.index);
            user.setMemberGradeTime(DateUtil.date());
            user.setCreditScore(BigDecimal.valueOf(100));
            user.updateById();
        }
    }
    public void v3UpPlan2(){
        List<MemUser> memUsers = memUserService.queryLevelUpUserList();
        for (MemUser user : memUsers) {
            user.setMemberGradeId(EnumMemberGrade.G_4.index);
            user.setMemberGradeTime(DateUtil.date());
            user.setCreditScore(BigDecimal.valueOf(100));
            user.setUpgradeStatus(1);
            user.updateById();
            log.info("【黄金营销员晋升为城市合伙人】用户:{} / {},品行分:{}",
                    user.getId(), user.getRealName(),  user.getCreditScore()
            );
        }
    }
}