From 6b0c10dfb1b67a658648b08f0130ffda94caeebd Mon Sep 17 00:00:00 2001
From: dongyukun <1208714201@qq.com>
Date: 星期一, 23 六月 2025 19:38:51 +0800
Subject: [PATCH] 系统运行预警

---
 shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunScheduleElectricityTask.java |  124 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 124 insertions(+), 0 deletions(-)

diff --git a/shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunScheduleElectricityTask.java b/shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunScheduleElectricityTask.java
new file mode 100644
index 0000000..af6a8c3
--- /dev/null
+++ b/shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunScheduleElectricityTask.java
@@ -0,0 +1,124 @@
+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<String, Integer> electricityAdjustFlag = new HashMap<>();
+
+    /**
+     * 调度建议时间
+     */
+    private static Map<String, Date> 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<StScheduleSchemeDTO> 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<String, Object> 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);
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3