package com.qianwen.smartman.modules.cps.utils; import cn.hutool.core.util.NumberUtil; import cn.hutool.json.JSONTokener; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.TreeSet; import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.qianwen.smartman.common.cache.RegionCache; import com.qianwen.smartman.common.cache.cps.WorkstationCache; import com.qianwen.smartman.common.constant.CommonConstant; import com.qianwen.smartman.common.enums.WorkstationParamStateEnum; import com.qianwen.smartman.common.enums.WorkstationParamTypeEnum; import com.qianwen.core.tool.jackson.JsonUtil; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.modules.cps.dto.WorkstationParamTypeDTO; import com.qianwen.smartman.modules.cps.message.dto.AlarmInfoDTO; import com.qianwen.smartman.modules.cps.message.dto.TelemetryDataResponseDTO; import com.qianwen.smartman.modules.cps.message.event.TelemetryDataMessage; /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/cps/utils/TelemetryDataUtils.class */ /** * 遥测数据util */ public class TelemetryDataUtils { private static final Logger log = LoggerFactory.getLogger(TelemetryDataUtils.class); public static void handlerStatusUpdateValue(TelemetryDataMessage propertyData, WorkstationParamTypeDTO setting) { if (WorkstationParamTypeEnum.STATE.isEqual(setting.getType()) && WorkstationParamStateEnum.COMM_FAILURE.isEqual(propertyData.getDataStatus())) { propertyData.setValue("4"); } } public static Boolean checkValue(TelemetryDataMessage telemetryDataMessage, WorkstationParamTypeDTO setting) { Boolean result = Boolean.TRUE; String paramValue = telemetryDataMessage.getValue(); switch (WorkstationParamTypeEnum.of(setting.getType(), WorkstationParamTypeEnum.OTHER)) { case STATE: if (!WorkstationParamStateEnum.Good.isEqual(telemetryDataMessage.getDataStatus()) && !WorkstationParamStateEnum.COMM_FAILURE.isEqual(telemetryDataMessage.getDataStatus())) { result = Boolean.FALSE; break; } else if (NumberUtil.isInteger(paramValue)) { Integer reallyIotState = Integer.valueOf(Integer.parseInt(paramValue)); if (CommonConstant.IOT_STATE_START.intValue() > reallyIotState.intValue() || CommonConstant.IOT_STATE_END.intValue() < reallyIotState.intValue()) { result = Boolean.FALSE; break; } } else { log.error("[状态转换错误] 消息详情:{}", paramValue); result = Boolean.FALSE; break; } break; case OUTPUT: if (!WorkstationParamStateEnum.Good.isEqual(telemetryDataMessage.getDataStatus())) { result = Boolean.FALSE; break; } else if (NumberUtil.isLong(paramValue)) { Long reallyIotOutput = Long.valueOf(Long.parseLong(paramValue)); if (reallyIotOutput.longValue() < 0) { log.error("[产量上报非正常值小于0 ] 消息详情:{}", paramValue); result = Boolean.FALSE; break; } } else { log.error("[产量转换错误] 消息详情:{}", paramValue); result = Boolean.FALSE; break; } break; case ALARM: case ALARM_NO: if (!WorkstationParamStateEnum.Good.isEqual(telemetryDataMessage.getDataStatus()) && !WorkstationParamStateEnum.BAD.isEqual(telemetryDataMessage.getDataStatus())) { result = Boolean.FALSE; break; } break; default: if (!WorkstationParamStateEnum.Good.isEqual(telemetryDataMessage.getDataStatus())) { result = Boolean.FALSE; break; } break; } return result; } public static TelemetryDataMessage handleTelemetryDataMessage(TelemetryDataMessage telemetryDataMessage, WorkstationParamTypeDTO workstationParam) { Boolean checkResult = checkValue(telemetryDataMessage, workstationParam); if (!checkResult.booleanValue()) { return null; } switch (WorkstationParamTypeEnum.of(workstationParam.getType(), WorkstationParamTypeEnum.OTHER)) { case STATE: handlerStatusUpdateValue(telemetryDataMessage, workstationParam); break; case ALARM: case ALARM_NO: packWorkStationAlarmMessageInfo(telemetryDataMessage, workstationParam.getWorkstationId()); break; case ALARM_MSG: telemetryDataMessage = null; break; default: break; } return telemetryDataMessage; } private static void packWorkStationAlarmMessageInfo(TelemetryDataMessage entity, Long workstationId) { List list = new ArrayList<>(); if (WorkstationParamStateEnum.BAD.isEqual(entity.getDataStatus())) { entity.setValue(JsonUtil.toJson(list)); return; } try { String paramValue = entity.getValue(); Object checkObject = JSON.parse(paramValue); if (checkObject instanceof JSONObject) { JSONObject jsonObject = JSON.parseObject(paramValue); if (paramValue.contains(CommonConstant.ALARM_ARRAY)) { JSONArray jsonArray = jsonObject.getJSONArray(CommonConstant.ALARM_ARRAY); jsonArray.stream().forEach(json -> { JSONObject alarmInfoObject = (JSONObject) json; AlarmInfoDTO alarmInfoDTO = buildAlarm(alarmInfoObject); if (Func.isNotEmpty(alarmInfoDTO)) { list.add(alarmInfoDTO); } }); } else { list.add(buildAlarm(jsonObject)); } } else if (checkObject instanceof JSONArray) { JSONArray jsonArray2 = JSON.parseArray(paramValue); jsonArray2.stream().forEach(json2 -> { JSONObject alarmInfoObject = (JSONObject) json2; list.add(buildAlarm(alarmInfoObject)); }); } Map workstationRealTime = WorkstationCache.getWorkstationRealTime(workstationId.toString()); TelemetryDataResponseDTO existingResult = (TelemetryDataResponseDTO) workstationRealTime.get(entity.getName()); if (Func.isNotEmpty(existingResult)) { List alarmInfoDTOS = getAlarmInfo(existingResult.getV()); list.addAll(0, alarmInfoDTOS); } entity.setValue(JsonUtil.toJson(handlerRepeatAlarmInfo(list))); } catch (Exception e) { log.error("[报警转换出错,错误信息:{}]", e.getMessage()); } } private static AlarmInfoDTO buildAlarm(JSONObject jsonObject) { AlarmInfoDTO propertyData = null; try { propertyData = new AlarmInfoDTO(); propertyData.setCode(jsonObject.getString("code")); long longTimeStamp = new Long(new Long(jsonObject.getString("timestamp")).longValue()).longValue(); propertyData.setTimestamp(Long.valueOf(longTimeStamp)); propertyData.setLevel(jsonObject.getString(CommonConstant.ALARM_LEVEL)); propertyData.setMsg(jsonObject.getString(CommonConstant.ALARM_MSG)); } catch (Exception e) { log.error("报警时间解析错误:{},原始时间:{}", e.getMessage(), jsonObject.getString("timestamp")); } return propertyData; } private static List handlerRepeatAlarmInfo(List alarmInfoDTOS) { ArrayList arrayList = new ArrayList<>(CommonConstant.ALARM_MAX_COUNT.intValue()); List alarmList = alarmInfoDTOS.stream().collect( Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet(Comparator.comparing( alarm -> { return alarm.getCode() + ";" + alarm.getMsg(); })//end of comparing )//end new treeset )//end toCollection , ArrayList::new)//collectingAndThen ); alarmList = alarmList.stream().sorted(Comparator.comparing(AlarmInfoDTO::getTimestamp).reversed()).collect(Collectors.toList()); /* List alarmList = (List) ((List) alarmInfoDTOS.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> { return new TreeSet(Comparator.comparing(alarm -> { return alarm.getCode() + ";" + alarm.getMsg(); })); }), (v1) -> { return new ArrayList(v1); }))).stream().sorted(Comparator.comparing((v0) -> { return v0.getTimestamp(); }).reversed()).collect(Collectors.toList()); */ for (int i = 0; i < alarmList.size() && arrayList.size() < CommonConstant.ALARM_MAX_COUNT.intValue(); i++) { arrayList.add(alarmList.get(i)); } return arrayList; } private static List getAlarmInfo(String value) { List alarmInfoDTOS = new ArrayList<>(); try { Object json = new JSONTokener(value).nextValue(); if (json instanceof JSONObject) { AlarmInfoDTO jsonObject = (AlarmInfoDTO) JSON.parseObject(value, AlarmInfoDTO.class); alarmInfoDTOS.add(jsonObject); } else { alarmInfoDTOS.addAll(JSON.parseArray(value, AlarmInfoDTO.class)); } } catch (Exception e) { log.error("[报警转换出错,错误信息:{}]", e.getMessage()); } return alarmInfoDTOS; } }