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 list = coreN2Service.listIntelTaskByCache(null); //获取实时压力信息 this.exePressure(list, cur); } /** * 根据系统中是否纯在需要执行的任务进行压力检测,如果没有气调任务则不用执行压力检测 *

* 如果系统没有任务,每天固定时间点执行异常压力检测 暂定每天早上8点1分钟 * * @param list */ private void exePressure(List 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 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; } } } }