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;
|
}
|
}
|
}
|
}
|