jiazx0107@163.com
2023-05-17 620eab6cca2bc9ef9ea6d3067a0a5ba1deadbd1c
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
package com.ld.igds.timer;
 
 
import com.ld.igds.io.request.BaseRequest;
import com.ld.igds.io.request.DeviceAutoControlRequest;
import com.ld.igds.io.request.DeviceControlRequest;
import com.ld.igds.models.N2IntelTask;
import com.ld.igds.n2.service.CoreN2Service;
import com.ld.igds.pressure.PressureManager;
import com.ld.igds.util.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
 
/**
 * @Desc: 气调定时任务,主要包括气调任务执行判断和相关
 * @author: Andy
 * @update-time: 2022/12/27
 */
@Slf4j
@Component(N2Scheduled.BEAN_ID)
public class N2Scheduled {
 
    public static final String BEAN_ID = "basic.n2Scheduled";
 
    @Resource
    private CoreN2Service coreN2Service;
    @Resource
    private PressureManager pressureManager;
 
 
    /**
     * 氮气气调任务判断,早上8--18点之间每间隔1分组执行一次任务查询并执行,
     * 通过缓存中的任务列表进行执行,如果缓存中没有任务需要执行,则直接跳过
     */
    @Scheduled(cron = "0 * 8-17 * * ?")
    public void n2TaskExe() {
 
        Date cur = new Date();
 
        log.debug("--------定时任务系统气调任务执行--------");
 
        //TODO 暂停当前系统执行模式,公司自己控制柜执行,直接返回结果和状态,当前定时任务根据气调任务调用压力即可
 
        List<N2IntelTask> list = coreN2Service.listIntelTaskByCache(null);
 
 
        //获取实时压力信息
        this.exePressure(list, cur);
    }
 
    /**
     * 根据系统中是否纯在需要执行的任务进行压力检测,如果没有气调任务则不用执行压力检测
     * <p>
     * 如果系统没有任务,每天固定时间点执行异常压力检测 暂定每天早上8点1分钟
     *
     * @param list
     */
    private void exePressure(List<N2IntelTask> list, Date curDate) {
 
        if (null == list) {
 
            int hour = DateUtil.getHour(curDate);
            int minute = DateUtil.getMinute(curDate);
 
            if (hour == 8 && minute == 1) {
                pressureManager.checkAll();
            }
            return;
        }
 
        //去重复,同一分机只执行一次
        Map<String, String> tempMap = new HashMap<>();
 
        DeviceAutoControlRequest autoControlRequest;
        DeviceControlRequest controlRequest;
        BaseRequest baseRequest;
        for (N2IntelTask task : list) {
            autoControlRequest = task.getAutoControlRequest();
            if (null != autoControlRequest) {
 
                if (null != tempMap.get(autoControlRequest.getSerId())) {
                    continue;
                }
 
                baseRequest = new BaseRequest();
                baseRequest.setDeptId(task.getDeptId());
                baseRequest.setCompanyId(task.getCompanyId());
                baseRequest.setSerName(autoControlRequest.getSerName());
                baseRequest.setSerId(autoControlRequest.getSerId());
                baseRequest.setIp(autoControlRequest.getIp());
                baseRequest.setPort(autoControlRequest.getPort());
                baseRequest.setBizType(autoControlRequest.getBizType());
                baseRequest.setDepotId(task.getDepotId());
                baseRequest.setDepotName(autoControlRequest.getDepotName());
                baseRequest.setProtocol(autoControlRequest.getProtocol());
 
                pressureManager.checkByRequest(baseRequest);
 
                tempMap.put(baseRequest.getSerId(), "SUCCESS");
                continue;
            }
 
            controlRequest = task.getDeviceControlRequest();
            if (null != controlRequest) {
 
                if (null != tempMap.get(controlRequest.getSerId())) {
                    continue;
                }
 
                baseRequest = new BaseRequest();
                baseRequest.setDeptId(task.getDeptId());
                baseRequest.setCompanyId(task.getCompanyId());
                baseRequest.setSerName(controlRequest.getSerName());
                baseRequest.setSerId(controlRequest.getSerId());
                baseRequest.setIp(controlRequest.getIp());
                baseRequest.setPort(controlRequest.getPort());
                baseRequest.setBizType(controlRequest.getBizType());
                baseRequest.setDepotId(task.getDepotId());
                baseRequest.setDepotName(controlRequest.getDepotName());
                baseRequest.setProtocol(controlRequest.getProtocol());
 
                pressureManager.checkByRequest(baseRequest);
                tempMap.put(baseRequest.getSerId(), "SUCCESS");
 
                continue;
            }
        }
    }
}