沙钢智慧能源系统后端代码
dongyukun
5 天以前 a3bb1815c3eb6b0f0cfe9d9d2ba5ee48279e26ed
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
package com.iailab.module.shasteel.job.task;
 
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.model.enums.CommonConstant;
import com.iailab.module.model.enums.ScheduleTriggerMethodEnum;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
 
import java.util.*;
 
/**
 * 压缩空气优化调度
 * 定时触发 30 0/2 * * * ?
 * 压力低于下限预警信息    pressureLWarning
 * 压力高于上限预警信息    pressureHWarning
 * 空压机启动调度建议    dispatchStart
 * 空压机关停调度建议    dispatchClose
 *
 * @author PanZhibao
 * @Description
 * @createTime 2025年01月07日
 */
@Component("runScheduleAirDispatchTask")
public class RunScheduleAirDispatchTask implements ITask {
    private Logger logger = LoggerFactory.getLogger(getClass());
 
    @Autowired
    private McsApi mcsApi;
 
    @Autowired
    private MdkApi mdkApi;
 
    /**
     * 调度建议内容
     */
    private static Map<String, String> gasAdjustMode = new HashMap<>();
 
    /**
     * 调度建议时间
     */
    private static Map<String, Date> gasLastSugTime = new HashMap<>();
 
    @Override
    public void run(String params) {
        logger.info("RunScheduleAirDispatchTask,参数为:{}", params);
        try {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.MILLISECOND, 0);
            calendar.set(Calendar.SECOND, 0);
            Date scheduleTime = calendar.getTime();
            if (StringUtils.isEmpty(params)) {
                logger.info("参数为空");
                return;
            }
 
            // 根据条件查找方案
            List<StScheduleSchemeDTO> schemeList = mcsApi.listScheduleScheme(ScheduleTriggerMethodEnum.JOB.getCode(), params);
            if (CollectionUtils.isEmpty(schemeList)) {
                logger.info("方案为空");
                return;
            }
 
            StScheduleSchemeDTO scheme = schemeList.get(0);
            MdkScheduleReqDTO dto = new MdkScheduleReqDTO();
            dto.setScheduleTime(scheduleTime);
            dto.setScheduleCode(scheme.getCode());
            MdkScheduleRespDTO mdkScheduleRespDTO = mdkApi.doSchedule(dto);
            if (!CommonConstant.MDK_STATUS_100.equals(mdkScheduleRespDTO.getStatusCode())) {
                logger.info("调度结果异常,STATUS=" + mdkScheduleRespDTO.getStatusCode());
                return;
            }
            // 保存预警信息
            if (mdkScheduleRespDTO.getResult().get("pressureLWarning") != null &&
                    StringUtils.isNotEmpty(mdkScheduleRespDTO.getResult().get("pressureLWarning").toString())) {
                String pressureLWarning = mdkScheduleRespDTO.getResult().get("pressureLWarning").toString();
                AlarmMessageRespDTO alarm = new AlarmMessageRespDTO();
                alarm.setTitle("压力低于下限预警");
                alarm.setContent(pressureLWarning);
                alarm.setAlarmObj(scheme.getScheduleObj());
                alarm.setAlarmType("低于下限");
                alarm.setAlarmTime(scheduleTime);
                mcsApi.createAlarmMessage(alarm);
            }
 
 
            if (mdkScheduleRespDTO.getResult().get("pressureHWarning") != null &&
                    StringUtils.isNotEmpty(mdkScheduleRespDTO.getResult().get("pressureHWarning").toString())) {
                String pressureHWarning = mdkScheduleRespDTO.getResult().get("pressureHWarning").toString();
                AlarmMessageRespDTO alarm = new AlarmMessageRespDTO();
                alarm.setTitle("空压机预警");
                alarm.setContent(pressureHWarning);
                alarm.setAlarmObj(scheme.getScheduleObj());
                alarm.setAlarmType("高于上限");
                alarm.setAlarmTime(scheduleTime);
                mcsApi.createAlarmMessage(alarm);
            }
 
            // 保存调度建议
            this.saveScheduleSuggest("空压机启动调度建议", mdkScheduleRespDTO.getResult().get("dispatchStart"), scheme.getScheduleObj(),
                    scheduleTime, scheme.getAdjustRate());
            this.saveScheduleSuggest("空压机关停调度建议", mdkScheduleRespDTO.getResult().get("dispatchClose"), scheme.getScheduleObj(),
                    scheduleTime, scheme.getAdjustRate());
            logger.info(params + "调度方案执行完成");
        } catch (Exception ex) {
            logger.error("RunScheduleAirDispatchTask运行异常");
            ex.printStackTrace();
        }
        logger.info("RunScheduleAirDispatchTask运行完成");
    }
 
    private void saveScheduleSuggest(String title, Object content, String scheduleObj, Date scheduleTime, int adjustRate) {
        if (content == null) {
            logger.info(title + "调整值为空,不产生建议");
            return;
        }
        String contentStr = content.toString();
        if (StringUtils.isBlank(contentStr)) {
            logger.info(title + "调整值为空,不产生建议");
            return;
        }
        if (gasAdjustMode.containsKey(title) && gasAdjustMode.get(title).equals(contentStr) &&
                gasLastSugTime.containsKey(title) && (scheduleTime.getTime() - gasLastSugTime.get(title).getTime() <= Integer.valueOf(adjustRate).longValue() * 60 * 1000)) {
            logger.info("调整建议在有效期内");
            return;
        }
        gasAdjustMode.put(title, contentStr);
        gasLastSugTime.put(title, scheduleTime);
 
        ScheduleSuggestRespDTO suggest = new ScheduleSuggestRespDTO();
        suggest.setTitle(title);
        suggest.setContent(content.toString());
        suggest.setScheduleObj(scheduleObj);
        suggest.setScheduleTime(scheduleTime);
        suggest.setSort(0);
        mcsApi.createScheduleSuggest(suggest);
    }
}