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 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 result , String type,Calendar calendar){ Map 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)).append(";"); } } AlarmMessageRespDTO alarmMessageRespDTO = new AlarmMessageRespDTO(); alarmMessageRespDTO.setContent(contentBuilder.toString()); alarmMessageRespDTO.setTitle(map.get("title").toString()); alarmMessageRespDTO.setAlarmObj(ALARM_OBJ); alarmMessageRespDTO.setAlarmTime(calendar.getTime()); alarmMessageRespDTO.setCreateTime(calendar.getTime()); mcsApi.createAlarmMessage(alarmMessageRespDTO); } catch (Exception e) { logger.error("创建报警消息失败", e); } } }