PayoffTask.java
3.61 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
package cn.fw.morax.server.task;
import cn.fw.common.cache.locker.DistributedLocker;
import cn.fw.morax.common.constant.TimeTaskConstant;
import cn.fw.morax.rpc.oop.OopRpcService;
import cn.fw.morax.rpc.oop.dto.GroupDTO;
import cn.fw.morax.service.biz.salary.PayoffBizService;
import cn.fw.morax.service.biz.salary.SalaryConfirmBizService;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.concurrent.locks.Lock;
/**
* 通用定时器
*
* @author : kurisu
* @version : 1.0
* @className : PayoffTask
* @description : 薪资发放定时器
* @date : 2022-05-07 16:10
*/
@Component
@Slf4j
@ConditionalOnProperty(prefix = "task", name = "switch", havingValue = "on")
public class PayoffTask {
private final PayoffBizService payoffBizService;
private final DistributedLocker distributedLocker;
private final OopRpcService oopRpcService;
private final SalaryConfirmBizService salaryConfirmBizService;
@Value("${spring.cache.custom.global-prefix}:createSalarySheet")
@Getter
private String createSalarySheetKey;
@Autowired
public PayoffTask(final PayoffBizService payoffBizService,
final DistributedLocker distributedLocker,
final OopRpcService oopRpcService,
final SalaryConfirmBizService salaryConfirmBizService) {
this.payoffBizService = payoffBizService;
this.distributedLocker = distributedLocker;
this.oopRpcService = oopRpcService;
this.salaryConfirmBizService = salaryConfirmBizService;
}
/**
* 发放工资的准备
* [展示不对接财务]
*/
// @Scheduled(initialDelay = 1000L * 10, fixedRate = 1000L * 30)
public void read2payoff() {
// payoffBizService.read2payoff();
}
/**
* 发放工资 [工资单数据推送财务系统]
* [暂时不对接财务]
*/
// @Scheduled(initialDelay = 1000L * 20, fixedRate = 1000L * 20)
public void go2pay() {
// payoffBizService.go2payoff();
}
/**
* 生成工资单[工资发放记录]
* 每两个小时执行
*/
@Scheduled(cron = "0 0 0/2 * * ?")
public void createSalarySheet() {
Lock lock = distributedLocker.lock(getCreateSalarySheetKey());
if (((RLock) lock).isLocked()) {
List<GroupDTO> list = oopRpcService.allGroups();
if (!CollectionUtils.isEmpty(list)) {
for (GroupDTO groupDTO : list) {
payoffBizService.createSalarySheet(groupDTO.getId());
}
}
lock.unlock();
}
}
/**
* 生成工资确认待办(在申述期开始时发送工资确认待办)
* 每隔两小时检查一次是否有未生成确认待办的薪酬池数据
*/
@Scheduled(cron = TimeTaskConstant.SALARY_CONFIRM_TODO)
public void createSalaryConfirmTodo() {
List<GroupDTO> list = oopRpcService.allGroups();
for (GroupDTO groupDTO : list) {
salaryConfirmBizService.createSalaryConfirmTodo(groupDTO.getId());
}
}
/**
* 每5分钟检查待办推送
*/
@Scheduled(cron = "0 0/5 * * * ?")
public void pushTodo() {
salaryConfirmBizService.pushConfirm();
}
}