沙钢智慧能源系统后端代码
liriming
2 天以前 cf56ebbecf2c8fc695e95c4d84949182260ee082
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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;
import com.iailab.module.model.api.mcs.dto.AlarmMessageRespDTO;
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.MdkScheduleReqDTO;
import com.iailab.module.model.api.mdk.dto.MdkScheduleRespDTO;
import com.iailab.module.shasteel.mq.common.constant.CommonConstant;
import com.iailab.module.shasteel.mq.common.enums.TriggerConditionEnum;
import com.iailab.module.shasteel.mq.config.QueueModelAlarmConfig;
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.stereotype.Component;
import org.springframework.util.CollectionUtils;
 
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
 
/**
 * 监听报警信息
 *
 * @author PanZhibao
 * @Description
 * @createTime 2024年12月11日
 */
@Slf4j
@Component
public class ModelPredictFinish2Consumer {
 
    @Resource
    private McsApi mcsApi;
 
    @Resource
    private MdkApi mdkApi;
 
    /**
     * 监听预测完成,执行调度
     *
     * @param message
     */
    @RabbitListener(queues = QueuePredictFinishConfig.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);
        JSONObject messageJson = JSONObject.parseObject(messageBody);
        if (CollectionUtils.isEmpty(messageJson)) {
            return;
        }
        // 查找需要执行的调度方案
        Map<String, Object> params = new HashMap<>();
        params.put("trigger_method", TriggerConditionEnum.EVENT);
        params.put("trigger_condition", routingKey);
        List<StScheduleSchemeDTO> scheduleSchemeList = mcsApi.listScheduleScheme(params);//根据触发条件获取调度方案列表
        for(StScheduleSchemeDTO stScheduleSchemeDTO : scheduleSchemeList){
            MdkScheduleReqDTO mdkScheduleReqDTO = new MdkScheduleReqDTO();
            mdkScheduleReqDTO.setScheduleCode(stScheduleSchemeDTO.getCode());
            mdkScheduleReqDTO.setScheduleTime(stScheduleSchemeDTO.getScheduleTime());
            MdkScheduleRespDTO mdkScheduleRespDTO = mdkApi.doSchedule(mdkScheduleReqDTO);//执行调度方案
            if(mdkScheduleRespDTO == null){
                return;
            }
            Map<String, Object> result = mdkScheduleRespDTO.getResult();
            switch (mdkScheduleRespDTO.getScheduleCode()) {
                case CommonConstant.COMPRESSOR_CODE://压缩空气调度方案
                    if(result.containsKey("pressureWarning") && !"".equals(result.get("pressureWarning").toString())){
                        AlarmMessageRespDTO alarmRespDTO = new AlarmMessageRespDTO();
                        alarmRespDTO.setId(UUID.randomUUID().toString());
                        alarmRespDTO.setContent(result.get("pressureWarning").toString());//压力预警信息
                        alarmRespDTO.setAlarmTime(DateUtils.parse(messageJson.get("predictTime").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
                        mcsApi.createAlarmMessage(alarmRespDTO);
                    }
                    if(result.containsKey("dispatchStart") && !"".equals(result.get("dispatchStart").toString())){
                        ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                        suggestRespDTO.setId(UUID.randomUUID().toString());
                        suggestRespDTO.setContent(result.get("dispatchStart").toString());//空压机启动调度建议
                        suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                        mcsApi.createScheduleSuggest(suggestRespDTO);
                    }
                    if(result.containsKey("dispatchClose") && !"".equals(result.get("dispatchClose").toString())){
                        ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                        suggestRespDTO.setId(UUID.randomUUID().toString());
                        suggestRespDTO.setContent(result.get("dispatchClose").toString());//空压机关停调度建议
                        suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                        mcsApi.createScheduleSuggest(suggestRespDTO);
                    }
 
                    break;
                case CommonConstant.STEAM_CODE://蒸汽调度方案
                    if(result.containsKey("daxinWarning") && !"".equals(result.get("daxinWarning").toString())){
                        AlarmMessageRespDTO alarmRespDTO = new AlarmMessageRespDTO();
                        alarmRespDTO.setId(UUID.randomUUID().toString());
                        alarmRespDTO.setContent(result.get("daxinWarning").toString());//大新预警
                        alarmRespDTO.setAlarmTime(DateUtils.parse(messageJson.get("predictTime").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
                        mcsApi.createAlarmMessage(alarmRespDTO);
                    }
                    if(result.containsKey("jinfengWarning") && !"".equals(result.get("jinfengWarning").toString())){
                        AlarmMessageRespDTO alarmRespDTO = new AlarmMessageRespDTO();
                        alarmRespDTO.setId(UUID.randomUUID().toString());
                        alarmRespDTO.setContent(result.get("jinfengWarning").toString());//锦丰预警
                        alarmRespDTO.setAlarmTime(DateUtils.parse(messageJson.get("predictTime").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
                        mcsApi.createAlarmMessage(alarmRespDTO);
                    }
                    if(result.containsKey("zhuanlu1Warning") && !"".equals(result.get("zhuanlu1Warning").toString())){
                        AlarmMessageRespDTO alarmRespDTO = new AlarmMessageRespDTO();
                        alarmRespDTO.setId(UUID.randomUUID().toString());
                        alarmRespDTO.setContent(result.get("zhuanlu1Warning").toString());//转炉一预警
                        alarmRespDTO.setAlarmTime(DateUtils.parse(messageJson.get("predictTime").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
                        mcsApi.createAlarmMessage(alarmRespDTO);
                    }
                    if(result.containsKey("zhuanlu2Warning") && !"".equals(result.get("zhuanlu2Warning").toString())){
                        AlarmMessageRespDTO alarmRespDTO = new AlarmMessageRespDTO();
                        alarmRespDTO.setId(UUID.randomUUID().toString());
                        alarmRespDTO.setContent(result.get("zhuanlu2Warning").toString());//转炉二预警
                        alarmRespDTO.setAlarmTime(DateUtils.parse(messageJson.get("predictTime").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
                        mcsApi.createAlarmMessage(alarmRespDTO);
                    }
                    if(result.containsKey("jinfengAdvice") && !"".equals(result.get("jinfengAdvice").toString())){
                        ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                        suggestRespDTO.setId(UUID.randomUUID().toString());
                        suggestRespDTO.setContent(result.get("jinfengAdvice").toString());//锦丰调度建议
                        suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                        mcsApi.createScheduleSuggest(suggestRespDTO);
                    }
                    if(result.containsKey("daxinAdvice") && !"".equals(result.get("daxinAdvice").toString())){
                        ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                        suggestRespDTO.setId(UUID.randomUUID().toString());
                        suggestRespDTO.setContent(result.get("daxinAdvice").toString());//大新调度建议
                        suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                        mcsApi.createScheduleSuggest(suggestRespDTO);
                    }
                    break;
                default:
                    break;
            }
        }
    }
}