沙钢智慧能源系统后端代码
潘志宝
2024-12-24 d92c3113a9c69473fb5139e63df393a644dafd0f
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
150
151
152
153
154
155
156
157
158
159
160
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.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 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 ModelAlarmConsumer {
 
    @Resource
    private McsApi mcsApi;
 
    @Resource
    private MdkApi mdkApi;
 
    /**
     * 事件标识
     */
    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);
        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;
            }
            AlarmMessageRespDTO alarmRespDTO = (AlarmMessageRespDTO)messageJson.get("AlarmMessageRespDTO");
            alarmRespDTO.setId(UUID.randomUUID().toString());
            alarmRespDTO.setAlarmTime(DateUtils.parse(messageJson.get("predictTime").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
            mcsApi.createAlarmMessage(alarmRespDTO);
            Map<String, Object> result = mdkScheduleRespDTO.getResult();
            switch (mdkScheduleRespDTO.getScheduleCode()) {
                case CommonConstant.OXYGEN_ONE_CODE://氧气班平衡计划方案
                    if(!result.containsKey("faAdvice") || !result.containsKey("yingDiAdvice") || !result.containsKey("yingZhongAdvice")
                            || !result.containsKey("hongAdvice") || !result.containsKey("RunAdvice")){
                        return;
                    }
                    for (String key : result.keySet()) {
                        if ("faAdvice".equals(key) && !"".equals(result.get("faAdvice").toString())) {
                            ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                            suggestRespDTO.setId(UUID.randomUUID().toString());
                            suggestRespDTO.setContent(result.get("faAdvice").toString());//法夜空建议送出量建议
                            suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                            mcsApi.createScheduleSuggest(suggestRespDTO);
                        }else if ("yingDiAdvice".equals(key) && !"".equals(result.get("yingDiAdvice").toString())) {
                            ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                            suggestRespDTO.setId(UUID.randomUUID().toString());
                            suggestRespDTO.setContent(result.get("yingDiAdvice").toString());//盈德低压建议送出量建议
                            suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                            mcsApi.createScheduleSuggest(suggestRespDTO);
                        }else if ("yingZhongAdvice".equals(key) && !"".equals(result.get("yingZhongAdvice").toString())) {
                            ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                            suggestRespDTO.setId(UUID.randomUUID().toString());
                            suggestRespDTO.setContent(result.get("yingZhongAdvice").toString());//盈德中压建议送出量建议
                            suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                            mcsApi.createScheduleSuggest(suggestRespDTO);
                        }else if ("hongAdvice".equals(key) && !"".equals(result.get("hongAdvice").toString())) {
                            ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                            suggestRespDTO.setId(UUID.randomUUID().toString());
                            suggestRespDTO.setContent(result.get("hongAdvice").toString());//宏昌建议送出量建议
                            suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                            mcsApi.createScheduleSuggest(suggestRespDTO);
                        }else if ("RunAdvice".equals(key) && !"".equals(result.get("RunAdvice").toString())) {
                            ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                            suggestRespDTO.setId(UUID.randomUUID().toString());
                            suggestRespDTO.setContent(result.get("RunAdvice").toString());//润忠建议送出量建议
                            suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                            mcsApi.createScheduleSuggest(suggestRespDTO);
                        }
                    }
                    break;
                case CommonConstant.OXYGEN_TWO_CODE://氧气系统优化调度决策方案
                    if(!result.containsKey("yingdiAdvice") || !result.containsKey("faAdvice") || !result.containsKey("hongAdvice")
                            || !result.containsKey("RunAdvice")){
                        return;
                    }
                    for (String key : result.keySet()) {
                        if ("yingdiAdvice".equals(key) && !"".equals(result.get("yingdiAdvice").toString())) {
                            ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                            suggestRespDTO.setId(UUID.randomUUID().toString());
                            suggestRespDTO.setContent(result.get("yingdiAdvice").toString());//盈德中压建议调整量建议
                            suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                            mcsApi.createScheduleSuggest(suggestRespDTO);
                        }else if ("faAdvice".equals(key) && !"".equals(result.get("faAdvice").toString())) {
                            ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                            suggestRespDTO.setId(UUID.randomUUID().toString());
                            suggestRespDTO.setContent(result.get("faAdvice").toString());//法夜空建议调整量建议
                            suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                            mcsApi.createScheduleSuggest(suggestRespDTO);
                        }else if ("hongAdvice".equals(key) && !"".equals(result.get("hongAdvice").toString())) {
                            ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                            suggestRespDTO.setId(UUID.randomUUID().toString());
                            suggestRespDTO.setContent(result.get("hongAdvice").toString());//宏昌建议调整量建议
                            suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                            mcsApi.createScheduleSuggest(suggestRespDTO);
                        }else if ("RunAdvice".equals(key) && !"".equals(result.get("RunAdvice").toString())) {
                            ScheduleSuggestRespDTO suggestRespDTO = new ScheduleSuggestRespDTO();
                            suggestRespDTO.setId(UUID.randomUUID().toString());
                            suggestRespDTO.setContent(result.get("RunAdvice").toString());//润忠建议调整量建议
                            suggestRespDTO.setSchemeId(stScheduleSchemeDTO.getId());
                            mcsApi.createScheduleSuggest(suggestRespDTO);
                        }
                    }
                    break;
                default:
                    break;
            }
        }
    }
}