From dc1b1ab543b16248c87a79cbb39a64b3018b9288 Mon Sep 17 00:00:00 2001
From: Jay <csj123456>
Date: 星期四, 24 四月 2025 19:54:33 +0800
Subject: [PATCH] 修改压缩空气月指标下发问题

---
 shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunScheduleGasTask.java |  141 +++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 129 insertions(+), 12 deletions(-)

diff --git a/shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunScheduleGasTask.java b/shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunScheduleGasTask.java
index 02082c4..d5b55e2 100644
--- a/shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunScheduleGasTask.java
+++ b/shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunScheduleGasTask.java
@@ -4,6 +4,7 @@
 import com.iailab.module.model.api.mcs.dto.ScheduleSuggestRespDTO;
 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.MdkPredictSimAdjustReqDTO;
 import com.iailab.module.model.api.mdk.dto.MdkScheduleReqDTO;
 import com.iailab.module.model.api.mdk.dto.MdkScheduleRespDTO;
 import com.iailab.module.model.enums.CommonConstant;
@@ -15,9 +16,8 @@
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
 
 /**
  * 煤气调度
@@ -45,6 +45,17 @@
     @Autowired
     private MdkApi mdkApi;
 
+    /**
+     * 煤气调度调整方向
+     * 1:调整值为正数;-1:调整值为负数
+     */
+    private static Map<String, Integer> gasAdjustMode = new HashMap<>();
+
+    /**
+     * 煤气调度建议时间
+     */
+    private static Map<String, Date> gasLastSugTime = new HashMap<>();
+
     @Override
     public void run(String params) {
         logger.info("RunScheduleGasTask,参数为:{}", params);
@@ -52,7 +63,7 @@
             Calendar calendar = Calendar.getInstance();
             calendar.set(Calendar.MILLISECOND, 0);
             calendar.set(Calendar.SECOND, 0);
-            Date scheduleTime = calendar.getTime();
+            Date predictTime = calendar.getTime();
             if (StringUtils.isEmpty(params)) {
                 logger.info("参数为空");
                 return;
@@ -64,23 +75,52 @@
                 logger.info("方案为空");
                 return;
             }
+
             StScheduleSchemeDTO scheme = schemeList.get(0);
             MdkScheduleReqDTO dto = new MdkScheduleReqDTO();
-            dto.setScheduleTime(scheduleTime);
+            dto.setScheduleTime(predictTime);
             dto.setScheduleCode(scheme.getCode());
             MdkScheduleRespDTO mdkScheduleRespDTO = mdkApi.doSchedule(dto);
             if (!CommonConstant.MDK_STATUS_100.equals(mdkScheduleRespDTO.getStatusCode())) {
                 logger.info("调度结果异常,STATUS=" + mdkScheduleRespDTO.getStatusCode());
                 return;
             }
-            Object adviceBFG = mdkScheduleRespDTO.getResult().get("adviceBFG");
-            saveScheduleSuggest("高炉煤气调度建议", adviceBFG, scheme.getScheduleObj(), scheduleTime);
-            Object adviceCOG = mdkScheduleRespDTO.getResult().get("adviceCOG");
-            saveScheduleSuggest("焦炉煤气调度建议", adviceCOG, scheme.getScheduleObj(), scheduleTime);
-            Object adviceLDG = mdkScheduleRespDTO.getResult().get("adviceLDG");
-            saveScheduleSuggest("转炉煤气调度建议", adviceLDG, scheme.getScheduleObj(), scheduleTime);
+
+            if (CollectionUtils.isEmpty(mdkScheduleRespDTO.getResult())) {
+                logger.info("煤气调度结果为空");
+                return;
+            }
+
+            Map<String, Object> result = mdkScheduleRespDTO.getResult();
+
             // 结果写入测点
             mdkApi.scheduleModelOut(mdkScheduleRespDTO);
+
+
+            // 保存调度建议
+            saveScheduleSuggest("高炉煤气", result.get("adviceBFG"), "BFG", predictTime, result.get("adjustValueBFG"), scheme.getAdjustRate());
+            saveScheduleSuggest("焦炉煤气", result.get("adviceCOG"), "COG", predictTime, result.get("adjustValueCOG"), scheme.getAdjustRate());
+            saveScheduleSuggest("转炉5W+8W煤气柜", result.get("adviceLDG13W"), "LDG1", predictTime, result.get("adjustValueLDG13W"), scheme.getAdjustRate());
+            saveScheduleSuggest("宏发12W煤气柜", result.get("adviceLDG12W"), "LDG2", predictTime, result.get("adjustValueLDG12W"), scheme.getAdjustRate());
+            saveScheduleSuggest("转炉特钢煤气柜", result.get("adviceLDG12WT"), "LDGt", predictTime, result.get("adjustValueLDG12WT"), scheme.getAdjustRate());
+
+            saveScheduleSuggest("高炉煤气预警", result.get("BFG_warning_advice"), "BFG_ALARM", predictTime, result.get("adjustValueBFG"), scheme.getAdjustRate());
+            saveScheduleSuggest("焦炉煤气预警", result.get("COG_warning_advice"), "COG_ALARM", predictTime, result.get("adjustValueCOG"), scheme.getAdjustRate());
+            saveScheduleSuggest("转炉5W+8W煤气柜预警", result.get("LDG_1_warning_advice"), "LDG1_ALARM", predictTime, result.get("adjustValueLDG13W"), scheme.getAdjustRate());
+            saveScheduleSuggest("宏发12W煤气柜预警", result.get("LDG_2_warning_advice"), "LDG2_ALARM", predictTime, result.get("adjustValueLDG12W"), scheme.getAdjustRate());
+            saveScheduleSuggest("转炉特钢12W煤气柜预警", result.get("LDG_3_warning_advice"), "LDGt_ALARM", predictTime, result.get("adjustValueLDG12WT"), scheme.getAdjustRate());
+
+            // 模拟调整
+            MdkPredictSimAdjustReqDTO simAdjustReqDTO = new MdkPredictSimAdjustReqDTO();
+            simAdjustReqDTO.setPredictTime(predictTime);
+            simAdjustReqDTO.setScheduleCode(com.iailab.module.shasteel.mq.common.constant.CommonConstant.GAS_MODEL_CODE);
+            simAdjustReqDTO.setModelResult(result);
+            Boolean simAdjustFlag = mdkApi.predictSimAdjust(simAdjustReqDTO);
+            if (simAdjustFlag) {
+                logger.info("模拟调整成功,ScheduleCode:" + com.iailab.module.shasteel.mq.common.constant.CommonConstant.GAS_MODEL_CODE);
+            } else {
+                logger.error("模拟调整失败,simAdjustReqDTO:" + simAdjustReqDTO);
+            }
             logger.info(params + "调度方案执行完成");
         } catch (Exception ex) {
             logger.error("RunScheduleGasTask运行异常");
@@ -89,14 +129,91 @@
         logger.info("RunScheduleGasTask运行完成");
     }
 
-    private void saveScheduleSuggest(String title, Object content, String scheduleObj, Date scheduleTime) {
+    /**
+     * 建议保持逻辑
+     * <p>
+     * <p>
+     * BFG建议:
+     * 若触发第一条:
+     * 当前BFG建议 = adviceBFG
+     * 若后续BFG建议出现时间与当前BFG建议相差15分钟之内:
+     * 所后续BFG建议方向与当前BFG建议方向相反:
+     * 当前建议 = 后续BFG建议
+     * 若不是:
+     * 当前建议保持不变
+     * 若不是则:
+     * 当前建议 = 后续BFG建议
+     * <p>
+     * COG建议:
+     * 若触发第一条:
+     * 当前COG建议 = adviceCOG
+     * 若后续COG建议出现时间与当前COG建议相差15分钟之内:
+     * 所后续COG建议方向与当前COG建议方向相反:
+     * 当前建议 = 后续COG建议
+     * 若不是:
+     * 当前建议保持不变
+     * 若不是则:
+     * 当前建议 = 后续COG建议
+     * <p>
+     * LDG13W建议:
+     * 若触发第一条:
+     * 当前LDG13W建议 = adviceLDG13W
+     * 若后续LDG13W建议出现时间与当前LDG13W建议相差15分钟之内:
+     * 所后续LDG13W建议方向与当前LDG13W建议方向相反:
+     * 当前建议 = 后续LDG13W建议
+     * 若不是:
+     * 当前建议保持不变
+     * 若不是则:
+     * 当前建议 = 后续LDG13W建议
+     * <p>
+     * LDG12W建议:
+     * 若触发第一条:
+     * 当前LDG12W建议 = adviceLDG12W
+     * 若后续LDG12W建议出现时间与当前LDG12W建议相差15分钟之内:
+     * 所后续LDG12W建议方向与当前LDG12W建议方向相反:
+     * 当前建议 = 后续LDG12W建议
+     * 若不是:
+     * 当前建议保持不变
+     * 若不是则:
+     * 当前建议 = 后续LDG12W建议
+     * <p>
+     * LDG12WT建议:
+     * 若触发第一条:
+     * 当前LDG12WT建议 = adviceLDG12WT
+     * 若后续LDG12WT建议出现时间与当前LDG12WT建议相差15分钟之内:
+     * 所后续LDG12WT建议方向与当前LDG12WT建议方向相反:
+     * 当前建议 = 后续LDG12WT建议
+     * 若不是:
+     * 当前建议保持不变
+     * 若不是则:
+     * 当前建议 = 后续LDG12WT建议
+     *
+     * @param title
+     * @param content
+     * @param scheduleObj
+     * @param scheduleTime
+     */
+    private void saveScheduleSuggest(String title, Object content, String scheduleObj, Date scheduleTime, Object adjustObj, int adjustRate) {
         if (content == null || StringUtils.isBlank(content.toString()) || "0".equals(content.toString())) {
             logger.info(title + "content为空");
             return;
         }
+        if (!title.contains("预警") && (adjustObj == null || StringUtils.isBlank(adjustObj.toString()) || "0".equals(adjustObj.toString()))) {
+            logger.info(title + "调整值为空,不产生建议");
+            return;
+        }
+        BigDecimal adjustValue = new BigDecimal(adjustObj.toString());
+        if (gasAdjustMode.containsKey(scheduleObj) && gasAdjustMode.get(scheduleObj).equals(adjustValue.compareTo(BigDecimal.ZERO)) &&
+                gasLastSugTime.containsKey(scheduleObj) && (scheduleTime.getTime() - gasLastSugTime.get(scheduleObj).getTime() <= Integer.valueOf(adjustRate).longValue() * 60 * 1000)) {
+            logger.info(title + "调整建议在有效期内");
+            return;
+        }
+        gasAdjustMode.put(scheduleObj, adjustValue.compareTo(BigDecimal.ZERO));
+        gasLastSugTime.put(scheduleObj, scheduleTime);
         ScheduleSuggestRespDTO suggest = new ScheduleSuggestRespDTO();
         suggest.setTitle(title);
         suggest.setContent(content.toString());
+        suggest.setAdjustValue(adjustValue);
         suggest.setScheduleObj(scheduleObj);
         suggest.setScheduleTime(scheduleTime);
         suggest.setSort(0);

--
Gitblit v1.9.3