FollowTaskDealTask.java
5.23 KB
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
package cn.fw.valhalla.controller.task;
import cn.fw.valhalla.common.utils.DateUtil;
import cn.fw.valhalla.domain.db.follow.FollowTask;
import cn.fw.valhalla.domain.enums.ApproveTypeEnum;
import cn.fw.valhalla.domain.enums.FollowTypeEnum;
import cn.fw.valhalla.domain.enums.TaskStateEnum;
import cn.fw.valhalla.service.bus.cust.CustomerBizService;
import cn.fw.valhalla.service.bus.cust.CustomerChangeBizService;
import cn.fw.valhalla.service.bus.follow.FollowBizService;
import cn.fw.valhalla.service.data.FollowTaskService;
import cn.fw.valhalla.service.event.CancelApproveEvent;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import static cn.fw.valhalla.common.utils.DateUtil.getNowExpiredDay;
/**
* @author : kurisu
* @className : FollowTask
* @description : 跟进任务处理
* @date: 2020-08-24 16:32
*/
@Component
@ConditionalOnProperty(prefix = "task", name = "switch", havingValue = "on")
public class FollowTaskDealTask {
private final FollowTaskService followTaskService;
private final FollowBizService followBizService;
private final CustomerChangeBizService customerChangeBizService;
private final CustomerBizService customerBizService;
private final ApplicationEventPublisher eventPublisher;
@Autowired
public FollowTaskDealTask(final FollowTaskService followTaskService,
final FollowBizService followBizService,
final CustomerChangeBizService customerChangeBizService,
final CustomerBizService customerBizService,
final ApplicationEventPublisher eventPublisher) {
this.followTaskService = followTaskService;
this.followBizService = followBizService;
this.customerChangeBizService = customerChangeBizService;
this.customerBizService = customerBizService;
this.eventPublisher = eventPublisher;
}
/**
* 开始任务
*/
@Scheduled(initialDelay = 1000 * 10, fixedRate = 1000 * 30)
@Transactional(rollbackFor = Exception.class)
public void startTask() {
List<FollowTask> list = followTaskService.list(Wrappers.<FollowTask>lambdaQuery()
.eq(FollowTask::getState, TaskStateEnum.WAITING)
.ge(FollowTask::getBeginTime, DateUtil.startDate(getNowExpiredDay(-7)))
.le(FollowTask::getBeginTime, DateUtil.localDateTime2Date(LocalDateTime.now()))
.eq(FollowTask::getFinished, Boolean.FALSE)
.last("limit 0, 500")
);
if (CollectionUtils.isEmpty(list)) {
return;
}
for (FollowTask task : list) {
Long userId = followBizService.createTaskRecord(task);
if (Objects.nonNull(userId)) {
task.setState(TaskStateEnum.ONGOING);
task.setOriginUser(userId);
}
}
followTaskService.updateBatchById(list);
}
/**
* 结束任务
*/
@Scheduled(initialDelay = 1000 * 30, fixedRate = 1000 * 60)
@Transactional(rollbackFor = Exception.class)
public void endTask() {
List<FollowTask> list = followTaskService.list(Wrappers.<FollowTask>lambdaQuery()
.eq(FollowTask::getState, TaskStateEnum.ONGOING)
.le(FollowTask::getDeadline, DateUtil.localDateTime2Date(LocalDateTime.now()))
.eq(FollowTask::getFinished, Boolean.FALSE)
);
if (CollectionUtils.isEmpty(list)) {
return;
}
for (FollowTask r : list) {
r.setState(TaskStateEnum.END);
customerBizService.abandon(r);
CancelApproveEvent event = new CancelApproveEvent(r.getId(), ApproveTypeEnum.FOLLOW_DEFEAT);
eventPublisher.publishEvent(event);
}
followTaskService.updateBatchById(list);
}
/**
* 更换人员
*/
@Scheduled(initialDelay = 1000 * 5, fixedRate = 1000 * 25)
@Transactional(rollbackFor = Exception.class)
public void changeFollowUser() {
List<FollowTask> list = followTaskService.list(Wrappers.<FollowTask>lambdaQuery()
.eq(FollowTask::getState, TaskStateEnum.ONGOING)
.le(FollowTask::getChangeUserTime, DateUtil.localDateTime2Date(LocalDateTime.now()))
.eq(FollowTask::getFinished, Boolean.FALSE)
.eq(FollowTask::getChanged, Boolean.FALSE)
.last("limit 0, 500")
);
if (CollectionUtils.isEmpty(list)) {
return;
}
list.forEach(task -> {
if (FollowTypeEnum.IR.equals(task.getType())) {
customerChangeBizService.changeInsFollowUser(task, true);
} else {
customerChangeBizService.changeFollowUser(task, true);
}
});
}
}