鞍钢鲅鱼圈能源管控系统后端代码
dongyukun
12 小时以前 281e342bdc3e3f619ec5c7956f89fb3b44a421bf
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
package com.iailab.module.ansteel.job.task;
 
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.iailab.module.ansteel.common.constant.CommonConstant;
import com.iailab.module.model.api.mcs.McsApi;
import com.iailab.module.model.api.mcs.dto.AlarmMessageRespDTO;
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.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.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
 
/**
 * @author PanZhibao
 * @Description 无功上网报警原因溯源
 * @createTime 2025年06月12日
 */
@Component("runPowerNetAlarmTask")
public class RunPowerNetAlarmTask implements ITask {
    private Logger logger = LoggerFactory.getLogger(getClass());
 
    private final String ALARM_OBJ = "AnSteelReactiveAlarm";
 
    @Autowired
    private McsApi mcsApi;
 
    @Autowired
    private MdkApi mdkApi;
    @Override
    public void run(String params) {
//        {'status_code': 100, 'result': {
//        'code220': '100', 'code66': '100',
//        '220kVPointReactivePowerInjectionIntoGrid': {'title': '220KV望铁关口无功上网', 'reason': '["大型发电机无功增加", "热轧甲线: 无功减少可能由工序检修引起"]'},
//        '66kVPointReactivePowerInjectionIntoGrid': {'title': '66KV范家变无功上网', 'reason': '["范铁乙线无功上网:可能因工序突降导致无功减少", "范钢甲线无功上网:炼钢总降#2电容器投运, 炼钢总降#4电容器投运, 炼钢总降#6电容器投运, 炼钢总降#8电容器投运", "范氧甲线无功上网"]'}}}
        logger.info("RunPowerNetAlarmTask定时任务正在执行,参数为:{}", params);
        try {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MILLISECOND, 0);
            MdkScheduleReqDTO dto = new MdkScheduleReqDTO();
            dto.setScheduleTime(calendar.getTime());
            dto.setScheduleCode(ALARM_OBJ);
            MdkScheduleRespDTO mdkScheduleRespDTO = mdkApi.doSchedule(dto);
            logger.info(params + "调度方案执行完成," + mdkScheduleRespDTO);
            if(!CommonConstant.MDK_STATUS_100.equals(mdkScheduleRespDTO.getStatusCode())){
                logger.info(params + "运行异常");
                return;
            }
            JSONObject obj = new JSONObject(mdkScheduleRespDTO.getResult());
            Map<String,Object> result = BeanUtil.beanToMap(obj);
            if(CommonConstant.MDK_STATUS_100.equals(result.get("code220"))){
                createAlarmMessage(result,"220kVPointReactivePowerInjectionIntoGrid",calendar);
            }
            if(CommonConstant.MDK_STATUS_100.equals(result.get("code66"))){
                createAlarmMessage(result,"66kVPointReactivePowerInjectionIntoGrid",calendar);
            }
        } catch (Exception ex) {
            logger.error("RunPowerNetAlarmTask运行异常");
            ex.printStackTrace();
        }
        logger.info("RunPowerNetAlarmTask运行完成");
    }
    private void createAlarmMessage( Map<String,Object> result , String type,Calendar calendar){
        Map<String,Object> map = BeanUtil.beanToMap(result.get(type));
        if (CollectionUtils.isEmpty(map) || map.get("reason") == null) {
            return;
        }
        try {
            StringBuilder contentBuilder = new StringBuilder();
            JSONArray jsonArr = JSON.parseArray(map.get("reason").toString());
            for(int i = 0; i < jsonArr.size(); i++) {
                Object element = jsonArr.get(i);
                if (element != null) {
                    contentBuilder.append(JSON.toJSONString(element).replace("\"","")).append(";");
                }
            }
 
            AlarmMessageRespDTO alarmMessageRespDTO = new AlarmMessageRespDTO();
            alarmMessageRespDTO.setContent(contentBuilder.toString());
            alarmMessageRespDTO.setTitle(map.get("title").toString());
            alarmMessageRespDTO.setAlarmObj("NetAlarm");
            alarmMessageRespDTO.setAlarmTime(calendar.getTime());
            alarmMessageRespDTO.setCreateTime(calendar.getTime());
            mcsApi.createAlarmMessage(alarmMessageRespDTO);
        } catch (Exception e) {
            logger.error("创建报警消息失败", e);
        }
    }
}