沙钢智慧能源系统后端代码
Jay
3 天以前 53b6fa2d8aa3a415610900fedf1b0e8f429cc2bb
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
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.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.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.math.BigDecimal;
import java.util.*;
 
/**
 * 电力负荷率预警信息
 *
 * @author Jay
 */
@Component("runScheduleElectricityTask")
public class RunScheduleElectricityTask implements ITask {
    private Logger logger = LoggerFactory.getLogger(getClass());
 
    @Autowired
    private McsApi mcsApi;
 
    @Autowired
    private MdkApi mdkApi;
 
    /**
     * 调度调整方向
     */
    private static Map<String, Integer> electricityAdjustFlag = new HashMap<>();
 
    /**
     * 调度建议时间
     */
    private static Map<String, Date> electricityLastAlarmTime = new HashMap<>();
 
    @Override
    public void run(String params) {
        logger.info("RunScheduleAirRatioTask,参数为:{}", 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);
            Map<String, Object> result = mdkScheduleRespDTO.getResult();
            saveAlarmMessage("东区变1#主变预警", result.get("periods_dq_one"), "DQ1", scheduleTime, result.get("adviceValues_dq_one"), scheme.getWarningAdjustRate());
            saveAlarmMessage("东区变2#主变预警", result.get("periods_dq_two"), "DQ2", scheduleTime, result.get("adviceValues_dq_two"), scheme.getWarningAdjustRate());
            saveAlarmMessage("东区变3#主变预警", result.get("periods_dq_three"), "DQ3", scheduleTime, result.get("adviceValues_dq_three"), scheme.getWarningAdjustRate());
            saveAlarmMessage("海力变1#主变预警", result.get("periods_hl_one"), "HL1", scheduleTime, result.get("adviceValues_hl_one"), scheme.getWarningAdjustRate());
            saveAlarmMessage("海力变2#主变预警", result.get("periods_hl_two"), "HL2", scheduleTime, result.get("adviceValues_hl_two"), scheme.getWarningAdjustRate());
            saveAlarmMessage("海力变3#主变预警", result.get("periods_hl_three"), "HL3", scheduleTime, result.get("adviceValues_hl_three"), scheme.getWarningAdjustRate());
            saveAlarmMessage("冷轧变1#主变预警", result.get("periods_lz_one"), "LZ1", scheduleTime, result.get("adviceValues_lz_one"), scheme.getWarningAdjustRate());
            saveAlarmMessage("冷轧变2#主变预警", result.get("periods_lz_two"), "LZ2", scheduleTime, result.get("adviceValues_lz_two"), scheme.getWarningAdjustRate());
            saveAlarmMessage("冷轧变3#主变预警", result.get("periods_lz_three"), "LZ3", scheduleTime, result.get("adviceValues_lz_three"), scheme.getWarningAdjustRate());
            saveAlarmMessage("冷轧变4#主变预警", result.get("periods_lz_four"), "LZ4", scheduleTime, result.get("adviceValues_lz_four"), scheme.getWarningAdjustRate());
            saveAlarmMessage("乐杨变1#主变预警", result.get("periods_ly_one"), "LY1", scheduleTime, result.get("adviceValues_ly_one"), scheme.getWarningAdjustRate());
            saveAlarmMessage("乐杨变2#主变预警", result.get("periods_ly_two"), "LY2", scheduleTime, result.get("adviceValues_ly_two"), scheme.getWarningAdjustRate());
            saveAlarmMessage("乐杨变3#主变预警", result.get("periods_ly_three"), "LY3", scheduleTime, result.get("adviceValues_ly_three"), scheme.getWarningAdjustRate());
            saveAlarmMessage("乐杨变4#主变预警", result.get("periods_ly_four"), "LY4", scheduleTime, result.get("adviceValues_ly_four"), scheme.getWarningAdjustRate());
 
            saveAlarmMessage("东区变1#主变合环", result.get("periods_dq_one_hh"), "DQ1HH", scheduleTime, result.get("adviceValues_dq_one_hh"), scheme.getWarningAdjustRate());
            saveAlarmMessage("东区变2#主变合环", result.get("periods_dq_two_hh"), "DQ2HH", scheduleTime, result.get("adviceValues_dq_two_hh"), scheme.getWarningAdjustRate());
            saveAlarmMessage("东区变3#主变合环", result.get("periods_dq_three_hh"), "DQ3HH", scheduleTime, result.get("adviceValues_dq_three_hh"), scheme.getWarningAdjustRate());
            saveAlarmMessage("海力变1#主变合环", result.get("periods_hl_one_hh"), "HL1HH", scheduleTime, result.get("adviceValues_hl_one_hh"), scheme.getWarningAdjustRate());
            saveAlarmMessage("海力变2#主变合环", result.get("periods_hl_two_hh"), "HL2HH", scheduleTime, result.get("adviceValues_hl_two_hh"), scheme.getWarningAdjustRate());
            saveAlarmMessage("海力变3#主变合环", result.get("periods_hl_three_hh"), "HL3HH", scheduleTime, result.get("adviceValues_hl_three_hh"), scheme.getWarningAdjustRate());
 
 
 
            logger.info(params + "调度方案执行完成");
        } catch (Exception ex) {
            logger.error("RunScheduleAirRatioTask运行异常");
            ex.printStackTrace();
        }
        logger.info("RunScheduleAirRatioTask运行完成");
    }
 
    private void saveAlarmMessage(String title, Object content, String scheduleObj, Date scheduleTime, Object adjustObj, int warningAdjustRate) {
        if (content == null) {
            logger.info(title + "预警信息为空,不产生预警");
            return;
        }
        String contentStr = content.toString();
        if (StringUtils.isBlank(contentStr)) {
            logger.info(title + "预警信息为空,不产生预警");
            return;
        }
        if ((adjustObj == null || StringUtils.isBlank(adjustObj.toString()) || "0".equals(adjustObj.toString()))) {
            logger.info(title + "调整值为空,不产生建议");
            return;
        }
        BigDecimal adjustValue = new BigDecimal(adjustObj.toString());
        if (electricityAdjustFlag.containsKey(scheduleObj) && electricityAdjustFlag.get(scheduleObj).equals(adjustValue.compareTo(BigDecimal.ZERO)) &&
                electricityLastAlarmTime.containsKey(scheduleObj) && (scheduleTime.getTime() - electricityLastAlarmTime.get(scheduleObj).getTime() <= Integer.valueOf(warningAdjustRate).longValue() * 60 * 1000)) {
            logger.info(title + "预警在有效期内");
            return;
        }
        electricityAdjustFlag.put(scheduleObj, adjustValue.compareTo(BigDecimal.ZERO));
        electricityLastAlarmTime.put(scheduleObj, scheduleTime);
        AlarmMessageRespDTO alarm = new AlarmMessageRespDTO();
        alarm.setTitle(title);
        alarm.setContent(contentStr);
        alarm.setAlarmObj(scheduleObj);
        alarm.setAlarmType("");
        alarm.setAlarmTime(scheduleTime);
        mcsApi.createAlarmMessage(alarm);
    }
}