沙钢智慧能源系统后端代码
3216ed3fb2d9dc9cf61da21bda3175e66ec46426..d66e4475926e13188ccbd8f284b293c6eaceacbe
2024-12-11 liriming
MQ
d66e44 对比 | 目录
2024-12-11 liriming
content内容
655fb5 对比 | 目录
2024-12-11 liriming
content内容
9fd640 对比 | 目录
2024-12-11 潘志宝
监听报警信息
c9ff6a 对比 | 目录
2024-12-11 潘志宝
prod
c0c33d 对比 | 目录
2024-12-11 liriming
MQ
0cd823 对比 | 目录
2024-12-11 潘志宝
MQ
250b37 对比 | 目录
2024-12-11 潘志宝
iailab_fast_tenant_shasteel
02a88c 对比 | 目录
已修改5个文件
已重命名3个文件
已删除6个文件
已添加3个文件
734 ■■■■■ 文件已修改
shasteel-biz/db/mysql.sql 229 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunPredictModuleTask.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/common/RoutingConstant.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/config/QueueModelAlarmConfig.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/config/QueuePredictFinishConfig.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/AlarmConsumer.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/AlarmMessage.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelAlarmConsumer.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelPredictFinishConsumer.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/PredictFinishConsumer.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/PredictFinishMessage.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ScheduleMessage.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/resources/application-dev.yaml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/resources/application-prod.yaml 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/resources/application-test.yaml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/resources/application.yaml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/test/java/com/iailab/module/data/controller/RabbitMQTest.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/db/mysql.sql
对比新文件
@@ -0,0 +1,229 @@
CREATE database if NOT EXISTS `iailab_fast_tenant_shasteel` default character set utf8mb4 collate utf8mb4_general_ci;
USE `iailab_fast_tenant_shasteel`;
    -- 定时任务
CREATE TABLE schedule_job
(
    id              bigint NOT NULL COMMENT 'id',
    bean_name       varchar(200)  DEFAULT NULL COMMENT 'spring bean名称',
    params          varchar(2000) DEFAULT NULL COMMENT '参数',
    cron_expression varchar(100)  DEFAULT NULL COMMENT 'cron表达式',
    status          tinyint unsigned COMMENT '任务状态  0:暂停  1:正常',
    remark          varchar(255)  DEFAULT NULL COMMENT '备注',
    creator         bigint COMMENT '创建者',
    create_date     datetime COMMENT '创建时间',
    updater         bigint COMMENT '更新者',
    update_date     datetime COMMENT '更新时间',
    PRIMARY KEY (id),
    key idx_create_date (create_date)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='定时任务';
-- 定时任务日志
CREATE TABLE schedule_job_log
(
    id          bigint           NOT NULL COMMENT 'id',
    job_id      bigint           NOT NULL COMMENT '任务id',
    bean_name   varchar(200)  DEFAULT NULL COMMENT 'spring bean名称',
    params      varchar(2000) DEFAULT NULL COMMENT '参数',
    status      tinyint unsigned NOT NULL COMMENT '任务状态    0:失败    1:成功',
    error       varchar(2000) DEFAULT NULL COMMENT '失败信息',
    times       int              NOT NULL COMMENT '耗时(单位:毫秒)',
    create_date datetime COMMENT '创建时间',
    PRIMARY KEY (id),
    key idx_job_id (job_id),
    key idx_create_date (create_date)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='定时任务日志';
--  quartz自带表结构
CREATE TABLE QRTZ_JOB_DETAILS
(
    SCHED_NAME        VARCHAR(120) NOT NULL,
    JOB_NAME          VARCHAR(200) NOT NULL,
    JOB_GROUP         VARCHAR(200) NOT NULL,
    DESCRIPTION       VARCHAR(250) NULL,
    JOB_CLASS_NAME    VARCHAR(250) NOT NULL,
    IS_DURABLE        VARCHAR(1)   NOT NULL,
    IS_NONCONCURRENT  VARCHAR(1)   NOT NULL,
    IS_UPDATE_DATA    VARCHAR(1)   NOT NULL,
    REQUESTS_RECOVERY VARCHAR(1)   NOT NULL,
    JOB_DATA          BLOB         NULL,
    PRIMARY KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
)
    ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
CREATE TABLE QRTZ_TRIGGERS
(
    SCHED_NAME     VARCHAR(120) NOT NULL,
    TRIGGER_NAME   VARCHAR(200) NOT NULL,
    TRIGGER_GROUP  VARCHAR(200) NOT NULL,
    JOB_NAME       VARCHAR(200) NOT NULL,
    JOB_GROUP      VARCHAR(200) NOT NULL,
    DESCRIPTION    VARCHAR(250) NULL,
    NEXT_FIRE_TIME BIGINT(13)   NULL,
    PREV_FIRE_TIME BIGINT(13)   NULL,
    PRIORITY       INTEGER      NULL,
    TRIGGER_STATE  VARCHAR(16)  NOT NULL,
    TRIGGER_TYPE   VARCHAR(8)   NOT NULL,
    START_TIME     BIGINT(13)   NOT NULL,
    END_TIME       BIGINT(13)   NULL,
    CALENDAR_NAME  VARCHAR(200) NULL,
    MISFIRE_INSTR  SMALLINT(2)  NULL,
    JOB_DATA       BLOB         NULL,
    PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
    FOREIGN KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
        REFERENCES QRTZ_JOB_DETAILS (SCHED_NAME, JOB_NAME, JOB_GROUP)
)
    ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
CREATE TABLE QRTZ_SIMPLE_TRIGGERS
(
    SCHED_NAME      VARCHAR(120) NOT NULL,
    TRIGGER_NAME    VARCHAR(200) NOT NULL,
    TRIGGER_GROUP   VARCHAR(200) NOT NULL,
    REPEAT_COUNT    BIGINT(7)    NOT NULL,
    REPEAT_INTERVAL BIGINT(12)   NOT NULL,
    TIMES_TRIGGERED BIGINT(10)   NOT NULL,
    PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
    FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
        REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
)
    ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
CREATE TABLE QRTZ_CRON_TRIGGERS
(
    SCHED_NAME      VARCHAR(120) NOT NULL,
    TRIGGER_NAME    VARCHAR(200) NOT NULL,
    TRIGGER_GROUP   VARCHAR(200) NOT NULL,
    CRON_EXPRESSION VARCHAR(120) NOT NULL,
    TIME_ZONE_ID    VARCHAR(80),
    PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
    FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
        REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
)
    ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
CREATE TABLE QRTZ_SIMPROP_TRIGGERS
(
    SCHED_NAME    VARCHAR(120)   NOT NULL,
    TRIGGER_NAME  VARCHAR(200)   NOT NULL,
    TRIGGER_GROUP VARCHAR(200)   NOT NULL,
    STR_PROP_1    VARCHAR(512)   NULL,
    STR_PROP_2    VARCHAR(512)   NULL,
    STR_PROP_3    VARCHAR(512)   NULL,
    INT_PROP_1    INT            NULL,
    INT_PROP_2    INT            NULL,
    LONG_PROP_1   BIGINT         NULL,
    LONG_PROP_2   BIGINT         NULL,
    DEC_PROP_1    NUMERIC(13, 4) NULL,
    DEC_PROP_2    NUMERIC(13, 4) NULL,
    BOOL_PROP_1   VARCHAR(1)     NULL,
    BOOL_PROP_2   VARCHAR(1)     NULL,
    PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
    FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
        REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
)
    ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
CREATE TABLE QRTZ_BLOB_TRIGGERS
(
    SCHED_NAME    VARCHAR(120) NOT NULL,
    TRIGGER_NAME  VARCHAR(200) NOT NULL,
    TRIGGER_GROUP VARCHAR(200) NOT NULL,
    BLOB_DATA     BLOB         NULL,
    PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
    INDEX (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
    FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
        REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
)
    ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
CREATE TABLE QRTZ_CALENDARS
(
    SCHED_NAME    VARCHAR(120) NOT NULL,
    CALENDAR_NAME VARCHAR(200) NOT NULL,
    CALENDAR      BLOB         NOT NULL,
    PRIMARY KEY (SCHED_NAME, CALENDAR_NAME)
)
    ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
(
    SCHED_NAME    VARCHAR(120) NOT NULL,
    TRIGGER_GROUP VARCHAR(200) NOT NULL,
    PRIMARY KEY (SCHED_NAME, TRIGGER_GROUP)
)
    ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
CREATE TABLE QRTZ_FIRED_TRIGGERS
(
    SCHED_NAME        VARCHAR(120) NOT NULL,
    ENTRY_ID          VARCHAR(95)  NOT NULL,
    TRIGGER_NAME      VARCHAR(200) NOT NULL,
    TRIGGER_GROUP     VARCHAR(200) NOT NULL,
    INSTANCE_NAME     VARCHAR(200) NOT NULL,
    FIRED_TIME        BIGINT(13)   NOT NULL,
    SCHED_TIME        BIGINT(13)   NOT NULL,
    PRIORITY          INTEGER      NOT NULL,
    STATE             VARCHAR(16)  NOT NULL,
    JOB_NAME          VARCHAR(200) NULL,
    JOB_GROUP         VARCHAR(200) NULL,
    IS_NONCONCURRENT  VARCHAR(1)   NULL,
    REQUESTS_RECOVERY VARCHAR(1)   NULL,
    PRIMARY KEY (SCHED_NAME, ENTRY_ID)
)
    ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
CREATE TABLE QRTZ_SCHEDULER_STATE
(
    SCHED_NAME        VARCHAR(120) NOT NULL,
    INSTANCE_NAME     VARCHAR(200) NOT NULL,
    LAST_CHECKIN_TIME BIGINT(13)   NOT NULL,
    CHECKIN_INTERVAL  BIGINT(13)   NOT NULL,
    PRIMARY KEY (SCHED_NAME, INSTANCE_NAME)
)
    ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
CREATE TABLE QRTZ_LOCKS
(
    SCHED_NAME VARCHAR(120) NOT NULL,
    LOCK_NAME  VARCHAR(40)  NOT NULL,
    PRIMARY KEY (SCHED_NAME, LOCK_NAME)
)
    ENGINE = InnoDB
  DEFAULT CHARSET = utf8;
CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS (SCHED_NAME, REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS (SCHED_NAME, JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS (SCHED_NAME, JOB_NAME, JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS (SCHED_NAME, JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS (SCHED_NAME, CALENDAR_NAME);
CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP, TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_GROUP, TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS (SCHED_NAME, NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_STATE, NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME, TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME, TRIGGER_GROUP,
                                                             TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, INSTANCE_NAME);
CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, INSTANCE_NAME, REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, JOB_NAME, JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS (SCHED_NAME, TRIGGER_GROUP);
shasteel-biz/src/main/java/com/iailab/module/shasteel/job/task/RunPredictModuleTask.java
@@ -4,20 +4,16 @@
import com.iailab.module.model.api.mdk.dto.MdkPredictModuleRespDTO;
import com.iailab.module.model.api.mdk.dto.MdkPredictReqDTO;
import com.iailab.module.shasteel.mq.common.RoutingConstant;
import com.iailab.module.shasteel.mq.consumer.AlarmMessage;
import com.iailab.module.shasteel.mq.consumer.PredictFinishMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Calendar;
/**
 * 执行模块预测定时任务
 *
 */
@Component("runPredictModuleTask")
public class RunPredictModuleTask implements ITask {
@@ -25,24 +21,24 @@
    @Autowired
    private MdkApi mdkApi;
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Override
    public void run(String params) {
        logger.info("runPredictModuleTask定时任务正在执行,参数为:{}",params );
        logger.info("runPredictModuleTask定时任务正在执行,参数为:{}", params);
        try {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.SECOND,0);
            calendar.set(Calendar.MILLISECOND,0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MILLISECOND, 0);
            MdkPredictReqDTO dto = new MdkPredictReqDTO();
            dto.setPredictTime(calendar.getTime());
            dto.setModuleType(params);
            MdkPredictModuleRespDTO mdkPredictModuleRespDTO = mdkApi.predictModule(dto);
            logger.info(params + "模块预测完成," + mdkPredictModuleRespDTO);
            rabbitTemplate.convertAndSend(PredictFinishMessage.EXCHANGE, PredictFinishMessage.PREDICTFINISH_ROUTING_KEY, mdkPredictModuleRespDTO);
            rabbitTemplate.convertAndSend(RoutingConstant.EXCHANGE, RoutingConstant.Iailab_Model_PredictFinish, mdkPredictModuleRespDTO);
        } catch (Exception ex) {
            logger.error("runPredictModuleTask运行异常");
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/common/RoutingConstant.java
@@ -2,10 +2,11 @@
public interface RoutingConstant {
    String EXCHANGE = "FastShasteel";
    // 预测模型完成路由
    String Iailab_Model_PredictFinish = "Iailab.Model.PredictFinish";
    //预警消息路由
    String Iailab_Model_Alarm = "Iailab.Model.Alarm";
}
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/config/QueueModelAlarmConfig.java
文件名从 shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/config/TopicAlarmRabbitConfig.java 修改
@@ -1,7 +1,6 @@
package com.iailab.module.shasteel.mq.config;
import com.iailab.module.shasteel.mq.consumer.AlarmMessage;
import com.iailab.module.shasteel.mq.consumer.PredictFinishMessage;
import com.iailab.module.shasteel.mq.common.RoutingConstant;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
@@ -10,28 +9,30 @@
import org.springframework.context.annotation.Configuration;
/**
 * 绑定队列
 *
 * @author lirm
 * @Description
 * @createTime 2024年11月27日
 */
@Configuration
public class TopicAlarmRabbitConfig {
    //绑定键
    public final static String routingAlarm = AlarmMessage.ALARM_ROUTING_KEY;
public class QueueModelAlarmConfig {
    // 队列名称
    public final static String QUEUE_NAME = "IaiabFastShateel.Model.Alarm";
    @Bean
    public Queue alarmQueue() {
        return new Queue(TopicAlarmRabbitConfig.routingAlarm);
        return new Queue(QUEUE_NAME);
    }
    @Bean
    TopicExchange alarmExchange() {
        return new TopicExchange(AlarmMessage.EXCHANGE);
        return new TopicExchange(RoutingConstant.EXCHANGE);
    }
    // 注意通配符*和#的用法
    @Bean
    Binding bindingExchangeMessageAlarm() {
        return BindingBuilder.bind(alarmQueue()).to(alarmExchange()).with(routingAlarm);
        return BindingBuilder.bind(alarmQueue()).to(alarmExchange()).with(RoutingConstant.Iailab_Model_Alarm);
    }
}
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/config/QueuePredictFinishConfig.java
文件名从 shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/config/TopicPredictFinishRabbitConfig.java 修改
@@ -1,6 +1,6 @@
package com.iailab.module.shasteel.mq.config;
import com.iailab.module.shasteel.mq.consumer.PredictFinishMessage;
import com.iailab.module.shasteel.mq.common.RoutingConstant;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
@@ -14,23 +14,23 @@
 * @createTime 2024年11月27日
 */
@Configuration
public class TopicPredictFinishRabbitConfig {
    //绑定键
    public final static String routingPredictFinish = PredictFinishMessage.PREDICTFINISH_ROUTING_KEY;
public class QueuePredictFinishConfig {
    // 队列名称
    public final static String QUEUE_NAME = "IaiabFastShateel.Model.PredictFinish";
    @Bean
    public Queue predictFinishQueue() {
        return new Queue(TopicPredictFinishRabbitConfig.routingPredictFinish);
        return new Queue(QueuePredictFinishConfig.QUEUE_NAME);
    }
    @Bean
    TopicExchange predictFinishExchange() {
        return new TopicExchange(PredictFinishMessage.EXCHANGE);
        return new TopicExchange(RoutingConstant.EXCHANGE);
    }
    // 注意通配符*和#的用法
    @Bean
    Binding bindingExchangeMessagePF() {
        return BindingBuilder.bind(predictFinishQueue()).to(predictFinishExchange()).with(routingPredictFinish);
        return BindingBuilder.bind(predictFinishQueue()).to(predictFinishExchange()).with(RoutingConstant.Iailab_Model_PredictFinish);
    }
}
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/AlarmConsumer.java
文件已删除
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/AlarmMessage.java
文件已删除
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelAlarmConsumer.java
文件名从 shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ScheduleConsumer.java 修改
@@ -1,17 +1,14 @@
package com.iailab.module.shasteel.mq.consumer;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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 org.springframework.amqp.rabbit.annotation.RabbitHandler;
import com.iailab.module.shasteel.mq.common.RoutingConstant;
import com.iailab.module.shasteel.mq.config.QueueModelAlarmConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@@ -20,13 +17,15 @@
import java.util.Map;
/**
 * @author lirm
 * 监听报警信息
 *
 * @author PanZhibao
 * @Description
 * @createTime 2024年11月27日
 * @createTime 2024年12月11日
 */
@Slf4j
@Component
@RabbitListener(queues = AlarmMessage.ALARM_ROUTING_KEY)
public class ScheduleConsumer {
public class ModelAlarmConsumer {
    @Resource
    private McsApi mcsApi;
@@ -34,10 +33,25 @@
    @Resource
    private MdkApi mdkApi;
    @RabbitHandler
    public void process(AlarmMessage alarmMessage) {
    /**
     * 事件标识
     */
    private final String EVENT_FLAG = "GasAlarm";
    /**
     * 监听报警信息,执行调度
     *
     * @param message
     */
    @RabbitListener(queues = QueueModelAlarmConfig.QUEUE_NAME)
    public void listen(Message message) {
        String routingKey = message.getMessageProperties().getReceivedRoutingKey();
        log.info("routingKey:" + routingKey);
        String messageBody = new String(message.getBody());
        log.info("messageBody:" + messageBody);
        // 查找需要执行的调度方案
        Map<String, Object> params = new HashMap<>();
        params.put("trigger_condition", AlarmMessage.ALARM_ROUTING_KEY);
        params.put("trigger_condition", routingKey);
        List<StScheduleSchemeDTO> scheduleSchemeList = mcsApi.listScheduleScheme(params);//根据触发条件获取调度方案列表
        for(StScheduleSchemeDTO stScheduleSchemeDTO : scheduleSchemeList){
            MdkScheduleReqDTO mdkScheduleReqDTO = new MdkScheduleReqDTO();
@@ -52,5 +66,8 @@
//        AlarmMessageRespDTO alarmMessageRespDTO = alarmMessage.getAlarmMessageRespDTO();
//        JSONObject contentJson = JSONObject.parseObject(alarmMessageRespDTO.getContent());
//        String overLimitTime = contentJson.get("overLimitTime").toString();
        // 根据模型返回结果,保存调度建议
    }
}
}
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelPredictFinishConsumer.java
对比新文件
@@ -0,0 +1,116 @@
package com.iailab.module.shasteel.mq.consumer;
import com.alibaba.fastjson.JSONObject;
import com.iailab.framework.common.util.date.DateUtils;
import com.iailab.module.model.api.mcs.McsApi;
import com.iailab.module.model.api.mcs.dto.AlarmConfigRespDTO;
import com.iailab.module.model.api.mcs.dto.AlarmMessageRespDTO;
import com.iailab.module.model.api.mcs.dto.PreDataJsonReqVO;
import com.iailab.module.shasteel.mq.common.RoutingConstant;
import com.iailab.module.shasteel.mq.config.QueuePredictFinishConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 监听预测完成
 *
 * @author PanZhibao
 * @Description
 * @createTime 2024年12月11日
 */
@Slf4j
@Component
public class ModelPredictFinishConsumer {
    @Resource
    private McsApi mcsApi;
    @Resource
    private RabbitTemplate rabbitTemplate;
    /**
     * 监听预测完成,产生预警消息
     *
     * @param message
     */
    @RabbitListener(queues = QueuePredictFinishConfig.QUEUE_NAME)
    public void listen(Message message) {
        try {
            String routingKey = message.getMessageProperties().getReceivedRoutingKey();
            log.info("routingKey:" + routingKey);
            String messageBody = new String(message.getBody());
            log.info("messageBody:" + messageBody);
            JSONObject messageJson = JSONObject.parseObject(messageBody);
            if (CollectionUtils.isEmpty(messageJson)) {
                return;
            }
            List<AlarmConfigRespDTO> configList = mcsApi.listAlarmConfig(new HashMap<String, Object>());
            if (CollectionUtils.isEmpty(configList)) {
                return;
            }
            List<String> OutputIdList = new ArrayList<>();
            configList.forEach(item -> {
                OutputIdList.add(item.getOutId());
            });
            configList.forEach(item -> {
                PreDataJsonReqVO reqVO = new PreDataJsonReqVO();
                reqVO.setPredictTime(DateUtils.parse(messageJson.get("predictTime").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
                reqVO.setOutputIdList(OutputIdList);
                Map<String, List<Object[]>> preData = mcsApi.getPreDataCur(reqVO);
                if (CollectionUtils.isEmpty(preData)) {
                    return;
                }
                List<Object[]> result = preData.get(item.getOutId());
                int toIndex = result.size();
                if (toIndex <= 0) {
                    return;
                }
                int fromIndex = result.size() - item.getCompLength();
                List<Object[]> predictList = result.subList(fromIndex, toIndex);
                for (Object[] data : predictList) {
                    BigDecimal dataValue = new BigDecimal(Double.parseDouble(data[1].toString())).setScale(2, BigDecimal.ROUND_HALF_UP);
                    if (!(dataValue.compareTo(item.getLowerLimit()) >= 0 && dataValue.compareTo(item.getUpperLimit()) <= 0)) {
                        AlarmMessageRespDTO alarmMessage = new AlarmMessageRespDTO();
                        alarmMessage.setConfigId(item.getId());
                        if (dataValue.compareTo(item.getLowerLimit()) < 0) {
                            alarmMessage.setAlarmType("1");//超下限
                        } else if (dataValue.compareTo(item.getUpperLimit()) > 0) {
                            alarmMessage.setAlarmType("2");//超上限
                        }
                        alarmMessage.setAlarmTime(DateUtils.parse(data[0].toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
                        StringBuffer sb = new StringBuffer();
                        sb.append(data[0]);
                        sb.append(" ");
                        sb.append(item.getAlarmObj());
                        if ("1".equals(alarmMessage.getAlarmType())) {
                            sb.append("超下限");
                        } else if ("2".equals(alarmMessage.getAlarmType())) {
                            sb.append("超上限");
                        }
                        sb.append(dataValue);
                        sb.append(item.getUnit());
                        alarmMessage.setContent(sb.toString());
                        System.out.println("预警消息=" + alarmMessage);
                        rabbitTemplate.convertAndSend(RoutingConstant.EXCHANGE, RoutingConstant.Iailab_Model_Alarm, alarmMessage);
                        break;
                    }
                }
                System.out.println(preData);
            });
        } catch (Exception e) {
            return;
        }
    }
}
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/PredictFinishConsumer.java
文件已删除
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/PredictFinishMessage.java
文件已删除
shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ScheduleMessage.java
文件已删除
shasteel-biz/src/main/resources/application-dev.yaml
@@ -35,7 +35,7 @@
      primary: master
      datasource:
        master:
          url: jdbc:mysql://127.0.0.1:3306/iailab_expert_tenant_shasteel?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
          url: jdbc:mysql://127.0.0.1:3306/iailab_fast_tenant_shasteel?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
          username: root
          password: 123456
shasteel-biz/src/main/resources/application-prod.yaml
对比新文件
@@ -0,0 +1,75 @@
--- #################### 数据库相关配置 ####################
spring:
  datasource:
    druid: # Druid 【监控】相关的全局配置
      web-stat-filter:
        enabled: true
      stat-view-servlet:
        enabled: true
        allow: # 设置白名单,不填则允许所有访问
        url-pattern: /druid/*
        login-username: # 控制台管理用户名和密码
        login-password:
      filter:
        stat:
          enabled: true
          log-slow-sql: true # 慢 SQL 记录
          slow-sql-millis: 100
          merge-sql: true
        wall:
          config:
            multi-statement-allow: true
    dynamic: # 多数据源配置
      druid: # Druid 【连接池】相关的全局配置
        initial-size: 1 # 初始连接数
        min-idle: 1 # 最小连接池数量
        max-active: 20 # 最大连接池数量
        max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
        min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
        max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
        test-while-idle: true
        test-on-borrow: false
        test-on-return: false
      primary: master
      datasource:
        master:
          url: jdbc:mysql://127.0.0.1:3306/iailab_fast_tenant_shasteel?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
          username: root
          password: Iailab@2019
  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
  redis:
    host: 127.0.0.1 # 地址
    port: 6379 # 端口
    database: 8 # 数据库索引
    password: 123456 # 密码,建议生产环境开启
--- #################### 平台相关配置 ####################
# 平台配置项,设置当前项目所有自定义的配置
iailab:
  env: # 多环境的配置项
    tag: ${HOSTNAME}
  captcha:
    enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试
  security:
    mock-enable: true
  access-log: # 访问日志的配置项
    enable: false
  sms-code: # 短信验证码相关的配置项
    expire-times: 10m
    send-frequency: 1m
    send-maximum-quantity-per-day: 10
    begin-code: 9999 # 这里配置 9999 的原因是,测试方便。
    end-code: 9999 # 这里配置 9999 的原因是,测试方便。
  token:
    base-url: http://127.0.0.1:48080/admin-api/system
    tenant-id: 172
    client-id: shasteel
    client-secret: shasteel111111111111111
    username: shasteel
    password: 123456
shasteel-biz/src/main/resources/application-test.yaml
@@ -35,7 +35,7 @@
      primary: master
      datasource:
        master:
          url: jdbc:mysql://172.16.8.100:3306/iailab_expert_tenant_shasteel?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
          url: jdbc:mysql://172.16.8.100:3306/iailab_fast_tenant_shasteel?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
          #          url: jdbc:mysql://127.0.0.1:3306/iailab_expert_tenant_shasteel?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai # MySQL Connector/J 5.X 连接的示例
          #          url: jdbc:postgresql://127.0.0.1:5432/iailab_expert_tenant_shasteel # PostgreSQL 连接的示例
          #          url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
shasteel-biz/src/main/resources/application.yaml
@@ -4,7 +4,7 @@
    name: shasteel-server
  profiles:
    active: dev
    active: prod
  cloud:
    nacos:
shasteel-biz/src/test/java/com/iailab/module/data/controller/RabbitMQTest.java
文件已删除