package com.iailab.module.shasteel.job.task; import com.iailab.module.model.api.mcs.McsApi; import com.iailab.module.model.api.mcs.dto.AlarmMessageRespDTO; import com.iailab.module.model.api.mcs.dto.StScheduleSchemeDTO; import com.iailab.module.model.api.mdk.MdkApi; import com.iailab.module.model.api.mdk.dto.MdkScheduleReqDTO; import com.iailab.module.model.api.mdk.dto.MdkScheduleRespDTO; import com.iailab.module.model.enums.ScheduleTriggerMethodEnum; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.util.*; /** * 电力负荷率预警信息 * * @author Jay */ @Component("runScheduleElectricityTask") public class RunScheduleElectricityTask implements ITask { private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private McsApi mcsApi; @Autowired private MdkApi mdkApi; /** * 调度调整方向 */ private static Map electricityAdjustFlag = new HashMap<>(); /** * 调度建议时间 */ private static Map electricityLastAlarmTime = new HashMap<>(); @Override public void run(String params) { logger.info("RunScheduleAirRatioTask,参数为:{}", params); try { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); Date scheduleTime = calendar.getTime(); if (StringUtils.isEmpty(params)) { logger.info("参数为空"); return; } // 根据条件查找方案 List schemeList = mcsApi.listScheduleScheme(ScheduleTriggerMethodEnum.JOB.getCode(), params); if (CollectionUtils.isEmpty(schemeList)) { logger.info("方案为空"); return; } StScheduleSchemeDTO scheme = schemeList.get(0); MdkScheduleReqDTO dto = new MdkScheduleReqDTO(); dto.setScheduleTime(scheduleTime); dto.setScheduleCode(scheme.getCode()); MdkScheduleRespDTO mdkScheduleRespDTO = mdkApi.doSchedule(dto); Map result = mdkScheduleRespDTO.getResult(); saveAlarmMessage("东区变1#主变预警", result.get("periods_dq_one"), "DQ1", scheduleTime, result.get("adviceValues_dq_one"), scheme.getWarningAdjustRate()); saveAlarmMessage("东区变2#主变预警", result.get("periods_dq_two"), "DQ2", scheduleTime, result.get("adviceValues_dq_two"), scheme.getWarningAdjustRate()); saveAlarmMessage("东区变3#主变预警", result.get("periods_dq_three"), "DQ3", scheduleTime, result.get("adviceValues_dq_three"), scheme.getWarningAdjustRate()); saveAlarmMessage("海力变1#主变预警", result.get("periods_hl_one"), "HL1", scheduleTime, result.get("adviceValues_hl_one"), scheme.getWarningAdjustRate()); saveAlarmMessage("海力变2#主变预警", result.get("periods_hl_two"), "HL2", scheduleTime, result.get("adviceValues_hl_two"), scheme.getWarningAdjustRate()); saveAlarmMessage("海力变3#主变预警", result.get("periods_hl_three"), "HL3", scheduleTime, result.get("adviceValues_hl_three"), scheme.getWarningAdjustRate()); saveAlarmMessage("冷轧变1#主变预警", result.get("periods_lz_one"), "LZ1", scheduleTime, result.get("adviceValues_lz_one"), scheme.getWarningAdjustRate()); saveAlarmMessage("冷轧变2#主变预警", result.get("periods_lz_two"), "LZ2", scheduleTime, result.get("adviceValues_lz_two"), scheme.getWarningAdjustRate()); saveAlarmMessage("冷轧变3#主变预警", result.get("periods_lz_three"), "LZ3", scheduleTime, result.get("adviceValues_lz_three"), scheme.getWarningAdjustRate()); saveAlarmMessage("冷轧变4#主变预警", result.get("periods_lz_four"), "LZ4", scheduleTime, result.get("adviceValues_lz_four"), scheme.getWarningAdjustRate()); saveAlarmMessage("乐杨变1#主变预警", result.get("periods_ly_one"), "LY1", scheduleTime, result.get("adviceValues_ly_one"), scheme.getWarningAdjustRate()); saveAlarmMessage("乐杨变2#主变预警", result.get("periods_ly_two"), "LY2", scheduleTime, result.get("adviceValues_ly_two"), scheme.getWarningAdjustRate()); saveAlarmMessage("乐杨变3#主变预警", result.get("periods_ly_three"), "LY3", scheduleTime, result.get("adviceValues_ly_three"), scheme.getWarningAdjustRate()); saveAlarmMessage("乐杨变4#主变预警", result.get("periods_ly_four"), "LY4", scheduleTime, result.get("adviceValues_ly_four"), scheme.getWarningAdjustRate()); logger.info(params + "调度方案执行完成"); } catch (Exception ex) { logger.error("RunScheduleAirRatioTask运行异常"); ex.printStackTrace(); } logger.info("RunScheduleAirRatioTask运行完成"); } private void saveAlarmMessage(String title, Object content, String scheduleObj, Date scheduleTime, Object adjustObj, int warningAdjustRate) { if (content == null) { logger.info(title + "预警信息为空,不产生预警"); return; } String contentStr = content.toString(); if (StringUtils.isBlank(contentStr)) { logger.info(title + "预警信息为空,不产生预警"); return; } if ((adjustObj == null || StringUtils.isBlank(adjustObj.toString()) || "0".equals(adjustObj.toString()))) { logger.info(title + "调整值为空,不产生建议"); return; } BigDecimal adjustValue = new BigDecimal(adjustObj.toString()); if (electricityAdjustFlag.containsKey(scheduleObj) && electricityAdjustFlag.get(scheduleObj).equals(adjustValue.compareTo(BigDecimal.ZERO)) && electricityLastAlarmTime.containsKey(scheduleObj) && (scheduleTime.getTime() - electricityLastAlarmTime.get(scheduleObj).getTime() <= Integer.valueOf(warningAdjustRate).longValue() * 60 * 1000)) { logger.info(title + "预警在有效期内"); return; } electricityAdjustFlag.put(scheduleObj, adjustValue.compareTo(BigDecimal.ZERO)); electricityLastAlarmTime.put(scheduleObj, scheduleTime); AlarmMessageRespDTO alarm = new AlarmMessageRespDTO(); alarm.setTitle(title); alarm.setContent(contentStr); alarm.setAlarmObj(scheduleObj); alarm.setAlarmType(""); alarm.setAlarmTime(scheduleTime); mcsApi.createAlarmMessage(alarm); } }