沙钢智慧能源系统后端代码
Jay
4 天以前 e7eb903a9ca509e4fe5ed10922a0772ce1460912
Merge remote-tracking branch 'origin/master'
已修改2个文件
148 ■■■■■ 文件已修改
shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunScheduleGasTask.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelPredictFinishConsumer.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelPredictFinishConsumer.java
@@ -213,12 +213,15 @@
                    finishAlarmMap.add(predictTime.getTime());
                }
                log.info("发送预警消息");
                log.info("预警完成,直接返回");
                // 预测不再触发煤气模型调度,煤气调度改成定时触发 2025-04-21
                /*log.info("发送预警消息");
                Map<String, Object> msg = new HashMap<>(2);
                msg.put("predictTime", DateUtils.format(predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
                msg.put("alarmList", alarmList);
                msg.put("moduleType", moduleType);
                rabbitTemplate.convertAndSend(RoutingConstant.EXCHANGE, RoutingConstant.Iailab_Model_Alarm, msg);
                rabbitTemplate.convertAndSend(RoutingConstant.EXCHANGE, RoutingConstant.Iailab_Model_Alarm, msg);*/
            }
        } catch (Exception e) {
            e.printStackTrace();