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 lirm * @Description 功率因数超限报警原因溯源 * @createTime 2025年06月26日 */ @Component("runPowerFactorAlarmTask") public class RunPowerFactorAlarmTask implements ITask { private Logger logger = LoggerFactory.getLogger(getClass()); private final static String ALARM_OBJ = "AnSteelPowerFactorAlarm"; private final static String substation = "substation"; @Autowired private McsApi mcsApi; @Autowired private MdkApi mdkApi; @Override public void run(String params) { /*{'status_code': 100, 'result': { 'substation2': {'66kVOverLimit': '焦化乙线功率因数下限越限', 'reason': '["煤气净化2#低于下限", "备煤2#低于下限", "大间台2#低于下限", "焦化总降#2电容器408分钟 退运", "焦化总降#2电容器1150分钟 投运", "备煤筛焦综合电气室Ⅱ段电容补偿14分钟 退运", "备煤筛焦综合电气室Ⅱ段电容补偿452分钟 投运", "备煤筛焦综合电气室Ⅱ段电容补偿570分钟 退运", "备煤筛焦综合电气室Ⅱ段电容补偿860分钟 投运", "备煤筛焦综合电气室Ⅱ段电容补偿920分钟 退运", "备煤筛焦综合电气室Ⅱ段电容补偿1207分钟 投运", "煤气净化综合电气室Ⅱ段电容补偿697分钟 退运", "煤气净化综合电气室Ⅱ段电容补偿866分钟 投运", "煤气净化综合电气室Ⅱ段电容补偿1430分钟 退运", "大间台综合电气室Ⅱ段电容补偿210分钟 退运", "大间台综合电气室Ⅱ段电容补偿319分钟 投运", "大间台综合电气室Ⅱ段电容补偿441分钟 退运", "大间台综合电气室Ⅱ段电容补偿690分钟 投运", "1#CDQ在第720分钟前后功率因数从0.8变化到0.9", "1#TRT在第720分钟前后功率因数从0.8变化到0.9"]'}, 'substation11': {'66kVOverLimit': '1#炼铁线功率因数下限越限', 'reason': '["1#CDQ在第720分钟前后功率因数从0.8变化到0.9", "1#TRT在第720分钟前后功率因数从0.8变化到0.9"]'}, 'substation12': {'66kVOverLimit': '2#炼铁线功率因数上限越限', 'reason': '["1#CDQ在第720分钟前后功率因数从0.8变化到0.9", "1#TRT在第720分钟前后功率因数从0.8变化到0.9"]'}, 'substation18': {'66kVOverLimit': '范氧甲线功率因数上限越限', 'reason': '["1#CDQ在第720分钟前后功率因数从0.8变化到0.9", "1#TRT在第720分钟前后功率因数从0.8变化到0.9"]'}}} */ logger.info("RunPowerFactorAlarmTask定时任务正在执行,参数为:{}", params); try { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 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 result = new JSONObject(mdkScheduleRespDTO.getResult()); List rowKeys = new ArrayList<>(); result.forEach((key, value) -> { if (StringUtils.isNotBlank(key) && key.contains(substation)) { rowKeys.add(key); } }); for (String key : rowKeys) { Map substationMap = BeanUtil.beanToMap(result.get(key)); if (CollectionUtils.isEmpty(substationMap)) { continue; } String content = ""; JSONArray jsonArr = JSON.parseArray(substationMap.get("reason").toString()); for(int i=0; i