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