tjx
11 小时以前 ed83fdced0b1ce7a4476c32673b9349a2595d59b
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
144
145
146
147
package com.gs.dingtalk.task;
 
 
import com.gs.dingtalk.service.QwCheckinDayDataService;
import com.gs.dingtalk.service.QwHardwareCheckinDataService;
import com.gs.dingtalk.service.SendDingtalkService;
import com.gs.dingtalk.service.VwCjScSjTsBbService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import java.util.concurrent.atomic.AtomicBoolean;
 
@Component
@RequiredArgsConstructor
@Slf4j
public class ScheduledTasks {
 
//    private final SendDingtalkService sendDingtalkService;
 
    private final VwCjScSjTsBbService vwCjScSjTsBbService;
 
    private final QwCheckinDayDataService qwCheckinDayDataService;
 
    private final QwHardwareCheckinDataService qwHardwareCheckinDataService;
 
    private final AtomicBoolean exportTaskRunning = new AtomicBoolean(false);
 
    private final AtomicBoolean checkinDayDataTaskRunning = new AtomicBoolean(false);
 
    private final AtomicBoolean hardwareCheckinTaskRunning = new AtomicBoolean(false);
 
//    /**
//     * 每两分钟执行一次
//     * 获取设备最近的一条记录
//     *
//     * @return void
//     * @author tjx
//     * @description TODO
//     * @date 2024/9/27 21:48
//     */
//    @Scheduled(cron = "0 0/2 * * * ?")
//    public void getDeviceRealTimeData() {
//        try {
//            sendDingtalkService.sendDingTalkFiveMinute();
//            log.info("定时任务 getDeviceRealTimeData 执行成功");
//        } catch (Exception e) {
//            log.error("定时任务 getDeviceRealTimeData 执行失败: ", e);
//        }
//    }
//
//    @Scheduled(cron = "0 0/3 * * * ?")
//    public void sendDingTalkFifteenMinute() {
//        try {
//            sendDingtalkService.sendDingTalkFifteenMinute();
//            log.info("定时任务 sendDingTalkFifteenMinute 执行成功");
//        } catch (Exception e) {
//            log.error("定时任务 sendDingTalkFifteenMinute 执行失败: ", e);
//        }
//    }
//
//    @Scheduled(cron = "0 0/4 * * * ?")
//    public void sendDingTalkThirtyMinute() {
//        try {
//            sendDingtalkService.sendDingTalkthirtyMinute();
//            log.info("定时任务 sendDingTalkThirtyMinute 执行成功");
//        } catch (Exception e) {
//            log.error("定时任务 sendDingTalkThirtyMinute 执行失败: ", e);
//        }
//    }
 
    /**
     * 每天上午9点执行
     * 导出生产数据并发送钉钉消息
     */
    @Async("taskExecutor")
    @Scheduled(cron = "0 0 12,16 * * ?")
    public void exportAndSendProductionDataTask() {
        if (!exportTaskRunning.compareAndSet(false, true)) {
            log.warn("生产数据导出任务正在执行中,跳过本次执行");
            return;
        }
 
        try {
            log.info("开始执行生产数据导出并发送钉钉任务");
            boolean result = vwCjScSjTsBbService.exportAndSendToDingtalk();
 
            if (result) {
                log.info("生产数据导出并发送钉钉任务执行成功");
            } else {
                log.error("生产数据导出并发送钉钉任务执行失败");
            }
        } catch (Exception e) {
            log.error("生产数据导出并发送钉钉任务执行异常", e);
        } finally {
            exportTaskRunning.set(false);
        }
    }
 
    /**
     * 每天早上7:30执行
     * 同步前一天的企业微信打卡日报数据到数据库
     */
    @Async("taskExecutor")
    @Scheduled(cron = "0 30 7 * * ?")
    public void syncCheckinDayDataTask() {
        if (!checkinDayDataTaskRunning.compareAndSet(false, true)) {
            log.warn("打卡日报数据同步任务正在执行中,跳过本次执行");
            return;
        }
 
        try {
            log.info("开始执行打卡日报数据同步任务(同步昨天数据)");
            int insertCount = qwCheckinDayDataService.syncYesterdayDayData();
            log.info("打卡日报数据同步任务执行成功,新增记录数: {}", insertCount);
        } catch (Exception e) {
            log.error("打卡日报数据同步任务执行异常", e);
        } finally {
            checkinDayDataTaskRunning.set(false);
        }
    }
 
    /**
     * 每天早上7:35执行(稍晚于打卡日报同步任务)
     * 同步前一天的企业微信设备打卡数据到数据库
     */
    @Async("taskExecutor")
    @Scheduled(cron = "0 35 7 * * ?")
    public void syncHardwareCheckinDataTask() {
        if (!hardwareCheckinTaskRunning.compareAndSet(false, true)) {
            log.warn("设备打卡数据同步任务正在执行中,跳过本次执行");
            return;
        }
 
        try {
            log.info("开始执行设备打卡数据同步任务(同步昨天数据)");
            int insertCount = qwHardwareCheckinDataService.syncYesterdayHardwareData();
            log.info("设备打卡数据同步任务执行成功,新增记录数: {}", insertCount);
        } catch (Exception e) {
            log.error("设备打卡数据同步任务执行异常", e);
        } finally {
            hardwareCheckinTaskRunning.set(false);
        }
    }
}