沙钢智慧能源系统后端代码
dengzedong
2025-01-18 fc066dd816c1badcb9bd08b526770993df36ac3c
电力预测完成执行电力调度
已添加2个文件
已修改3个文件
128 ■■■■ 文件已修改
shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunPredictModuleTask.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/common/constant/RoutingConstant.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/config/QueueElecPredictFinishConfig.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelElecPredictFinishConsumer.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelPredictFinish2Consumer.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunPredictModuleTask.java
@@ -3,6 +3,7 @@
import com.iailab.framework.common.util.date.DateUtils;
import com.iailab.module.model.api.mdk.MdkApi;
import com.iailab.module.model.api.mdk.dto.MdkPredictReqDTO;
import com.iailab.module.shasteel.mq.common.constant.CommonConstant;
import com.iailab.module.shasteel.mq.common.constant.RoutingConstant;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -55,6 +56,10 @@
                msg.put("moduleType", type);
                msg.put("predictTime", DateUtils.format(predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
                rabbitTemplate.convertAndSend(RoutingConstant.EXCHANGE, RoutingConstant.Iailab_Model_PredictFinish, msg);
                if (type.equals(CommonConstant.TRIGGER_CONDITION_ELEC)) {
                    //电力管网预测完成发送单独消息,执行电力调度
                    rabbitTemplate.convertAndSend(RoutingConstant.EXCHANGE, RoutingConstant.Iailab_Model_PredictFinish_Elec, msg);
                }
            });
        } catch (Exception ex) {
            logger.error("runPredictModuleTask运行异常");
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/common/constant/RoutingConstant.java
@@ -6,6 +6,8 @@
    // 预测模型完成路由
    String Iailab_Model_PredictFinish = "Iailab.Model.PredictFinish";
    // 电力预测模型完成路由
    String Iailab_Model_PredictFinish_Elec = "Iailab.Model.PredictFinish.Elec";
    //预警消息路由
    String Iailab_Model_Alarm = "Iailab.Model.Alarm";
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/config/QueueElecPredictFinishConfig.java
对比新文件
@@ -0,0 +1,36 @@
package com.iailab.module.shasteel.mq.config;
import com.iailab.module.shasteel.mq.common.constant.RoutingConstant;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @description: 电力预测完成消息队列
 * @author: dzd
 * @date: 2025/1/17 17:38
 **/
@Configuration
public class QueueElecPredictFinishConfig {
    // 队列名称
    public final static String QUEUE_NAME = "IaiabFastShateel.Model.PredictFinish.Elec";
    @Bean
    public Queue predictFinishQueue() {
        return new Queue(QueueElecPredictFinishConfig.QUEUE_NAME);
    }
    @Bean
    TopicExchange predictFinishExchange() {
        return new TopicExchange(RoutingConstant.EXCHANGE);
    }
    // 注意通配符*和#的用法
    @Bean
    Binding bindingExchangeMessagePF() {
        return BindingBuilder.bind(predictFinishQueue()).to(predictFinishExchange()).with(RoutingConstant.Iailab_Model_PredictFinish_Elec);
    }
}
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelElecPredictFinishConsumer.java
对比新文件
@@ -0,0 +1,62 @@
package com.iailab.module.shasteel.mq.consumer;
import com.iailab.module.model.api.mcs.McsApi;
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.enums.ScheduleTriggerMethodEnum;
import com.iailab.module.shasteel.mq.common.constant.CommonConstant;
import com.iailab.module.shasteel.mq.config.QueueElecPredictFinishConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
 * @description:
 * @author: dzd
 * @date: 2025/1/17 17:41
 **/
@Slf4j
@Component
public class ModelElecPredictFinishConsumer {
    @Resource
    private McsApi mcsApi;
    @Resource
    private MdkApi mdkApi;
    /**
     * 监听电力预测完成,执行电力调度
     *
     * @param message
     */
    @RabbitListener(queues = QueueElecPredictFinishConfig.QUEUE_NAME)
    public void listen(Message message) {
        String messageBody = new String(message.getBody());
        log.info("开始执行电力调度,messageBody:" + messageBody);
        // 查找需要执行的电力调度方案
        List<StScheduleSchemeDTO> scheduleSchemeList = mcsApi.listScheduleScheme(ScheduleTriggerMethodEnum.EVENT.getCode(), CommonConstant.TRIGGER_CONDITION_ELEC);
        // 电力预测完成,执行电力调度模型
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        Date scheduleTime = calendar.getTime();
        for (StScheduleSchemeDTO stScheduleSchemeDTO : scheduleSchemeList) {
            MdkScheduleReqDTO mdkScheduleReqDTO = new MdkScheduleReqDTO();
            mdkScheduleReqDTO.setScheduleCode(stScheduleSchemeDTO.getCode());
            mdkScheduleReqDTO.setScheduleTime(scheduleTime);
            mdkApi.doSchedule(mdkScheduleReqDTO);
        }
    }
}
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelPredictFinish2Consumer.java
@@ -1,6 +1,5 @@
package com.iailab.module.shasteel.mq.consumer;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.iailab.framework.common.util.date.DateUtils;
import com.iailab.module.model.api.mcs.McsApi;
@@ -20,8 +19,9 @@
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
 * 监听报警信息
@@ -144,23 +144,6 @@
                    break;
                default:
                    break;
            }
        }
        // 电力预测完成,执行电力调度模型
        String moduleType = messageJson.get("moduleType").toString();
        if (null != moduleType && moduleType.equals(CommonConstant.TRIGGER_CONDITION_ELEC)) {
            List<StScheduleSchemeDTO> elecSche = scheduleSchemeList.stream().filter(e -> e.getTriggerCondition().equals(CommonConstant.TRIGGER_CONDITION_ELEC)).collect(Collectors.toList());
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.MILLISECOND, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            Date scheduleTime = calendar.getTime();
            for (StScheduleSchemeDTO stScheduleSchemeDTO : elecSche) {
                MdkScheduleReqDTO mdkScheduleReqDTO = new MdkScheduleReqDTO();
                mdkScheduleReqDTO.setScheduleCode(stScheduleSchemeDTO.getCode());
                mdkScheduleReqDTO.setScheduleTime(scheduleTime);
                mdkApi.doSchedule(mdkScheduleReqDTO);
            }
        }
    }