diff --git a/src/main/java/com/netsdk/utils/ProvincialPlatformDataPushScheduled.java b/src/main/java/com/netsdk/utils/ProvincialPlatformDataPushScheduled.java index 7bc6029..2a829a9 100644 --- a/src/main/java/com/netsdk/utils/ProvincialPlatformDataPushScheduled.java +++ b/src/main/java/com/netsdk/utils/ProvincialPlatformDataPushScheduled.java @@ -149,22 +149,144 @@ public class ProvincialPlatformDataPushScheduled { //定义datas指标数据集合 List> alarmList = new ArrayList<>(); //--------------------------定义测试数据---------------------------------- - HashMap alarm = new HashMap<>(); - alarm.put("quotaId", "GT1407810001010000001"); // 传感器传感编码(IOT平台取) -// alarm.put("value", value); // 指标当前采集值 - alarm.put("alarmType", "alarmhi:alarm"); // 报警类型:alarm hi:alarm 表示超上限报警;alarm hh:alarm 表示超上上限报警;alarm lo:alarm 表示超下限报警;alarm ll:alarm 表示超下下限报警;normal:alarm 表示消警;alarmsignal 表示变化报警,即开关量报警 - alarm.put("threshold", 99); // 当前报警阈值/消警阈值 - // 获取当前时间 - LocalDateTime alarmTime = LocalDateTime.now(); - // 格式化时间 - String alarmFormatTime = alarmTime.format(formatter); - alarm.put("alarmTime", alarmFormatTime); // 报警时间 - alarmList.add(alarm); +// HashMap alarm = new HashMap<>(); +// alarm.put("quotaId", "GT1407810001010000001"); // 传感器传感编码(IOT平台取) +//// alarm.put("value", value); // 指标当前采集值 +// alarm.put("alarmType", "alarmhi:alarm"); // 报警类型:alarm hi:alarm 表示超上限报警;alarm hh:alarm 表示超上上限报警;alarm lo:alarm 表示超下限报警;alarm ll:alarm 表示超下下限报警;normal:alarm 表示消警;alarmsignal 表示变化报警,即开关量报警 +// alarm.put("threshold", 99); // 当前报警阈值/消警阈值 +// // 获取当前时间 +// LocalDateTime alarmTime = LocalDateTime.now(); +// // 格式化时间 +// String alarmFormatTime = alarmTime.format(formatter); +// alarm.put("alarmTime", alarmFormatTime); // 报警时间 +// alarmList.add(alarm); //--------------------------测试数据结束---------------------------------- - //真实数据逻辑(注释部分) + //取出存储在Redis中的数据 - //List mesDataList = JSONArray.parseArray(redisUtil.get("MES_DATA_LIST").toString(), PageData.class); + //取出存储在Redis中的报警数据 + List allAlarmList = new ArrayList<>(); + if (!Tools.isEmpty(redisUtil.get("MES_ALARM_DATA_LIST"))) { + allAlarmList.addAll(JSONArray.parseArray(redisUtil.get("MES_ALARM_DATA_LIST").toString(), PageData.class)); + } + if (!Tools.isEmpty(redisUtil.get("WMK_ALARM_DATA_LIST"))) { + allAlarmList.addAll(JSONArray.parseArray(redisUtil.get("WMK_ALARM_DATA_LIST").toString(), PageData.class)); + } + + //处理消警数据 + List recoverAlarmList = new ArrayList<>(); + if (!Tools.isEmpty(redisUtil.get("MES_RECOVER_ALARM_DATA_LIST"))) { + recoverAlarmList.addAll(JSONArray.parseArray(redisUtil.get("MES_RECOVER_ALARM_DATA_LIST").toString(), PageData.class)); + } + if (!Tools.isEmpty(redisUtil.get("WMK_RECOVER_ALARM_DATA_LIST"))) { + recoverAlarmList.addAll(JSONArray.parseArray(redisUtil.get("WMK_RECOVER_ALARM_DATA_LIST").toString(), PageData.class)); + } + + //处理活跃报警数据 + for (PageData alarmData : allAlarmList) { + if (alarmData.containsKey("REPORT_ID") && !Tools.isEmpty(alarmData.getString("REPORT_ID"))) { + HashMap alarm = new HashMap<>(); + alarm.put("quotaId", alarmData.get("REPORT_ID")); // 传感器传感编码 + + // 设置报警值 + Object currentValue = alarmData.get("CURRENT_VALUE"); + if (currentValue != null) { + if (currentValue instanceof String) { + alarm.put("value", Float.parseFloat((String) currentValue)); + } else if (currentValue instanceof Number) { + alarm.put("value", ((Number) currentValue).floatValue()); + } else { + alarm.put("value", currentValue); + } + } else { + alarm.put("value", null); + } + + // 确定报警类型 + String overviewOfAlerts = alarmData.getString("OVERVIEW_OF_ALERTS"); + if ("高高报警".equals(overviewOfAlerts)) { + alarm.put("alarmType", "alarmhh:alarm"); // 超上上限报警 + } else if ("高报警".equals(overviewOfAlerts)) { + alarm.put("alarmType", "alarmhi:alarm"); // 超上限报警 + } else if ("低报警".equals(overviewOfAlerts)) { + alarm.put("alarmType", "alarmlo:alarm"); // 超下限报警 + } else if ("低低报警".equals(overviewOfAlerts)) { + alarm.put("alarmType", "alarmll:alarm:alarm"); // 超下下限报警 + } else if ("联锁投入报警".equals(overviewOfAlerts)) { + alarm.put("alarmType", "alarmsignal"); // 开关量报警 + } + + // 设置报警阈值 + Object threshold = getAlarmThreshold(alarmData, overviewOfAlerts); + if (threshold != null) { + alarm.put("threshold", threshold); + } + + // 设置报警时间 + String alarmTime = alarmData.getString("GATHER_TIME"); + if (Tools.isEmpty(alarmTime)) { + alarmTime = collectTime; + } else { + // 转换时间格式 + try { + alarmTime = alarmTime.replaceAll("[-:\\s]", "").substring(0, 14); + } catch (Exception e) { + alarmTime = collectTime; + } + } + alarm.put("alarmTime", alarmTime); + + alarmList.add(alarm); + } + } + + //处理消警数据 + for (PageData recoverAlarm : recoverAlarmList) { + if (recoverAlarm.containsKey("REPORT_ID") && !Tools.isEmpty(recoverAlarm.getString("REPORT_ID"))) { + HashMap alarm = new HashMap<>(); + alarm.put("quotaId", recoverAlarm.get("REPORT_ID")); // 传感器传感编码 + + // 设置消警值 + Object currentValue = recoverAlarm.get("CURRENT_VALUE"); + if (currentValue != null) { + if (currentValue instanceof String) { + alarm.put("value", Float.parseFloat((String) currentValue)); + } else if (currentValue instanceof Number) { + alarm.put("value", ((Number) currentValue).floatValue()); + } else { + alarm.put("value", currentValue); + } + } else { + alarm.put("value", null); + } + + // 消警类型 + alarm.put("alarmType", "normal:alarm"); // 消警 + + // 设置消警阈值 + String overviewOfAlerts = recoverAlarm.getString("OVERVIEW_OF_ALERTS"); + Object threshold = getAlarmThreshold(recoverAlarm, overviewOfAlerts); + if (threshold != null) { + alarm.put("threshold", threshold); + } + + // 设置消警时间 + String recoverTime = recoverAlarm.getString("OPERATTIME"); + if (Tools.isEmpty(recoverTime)) { + recoverTime = collectTime; + } else { + // 转换时间格式 + try { + recoverTime = recoverTime.replaceAll("[-:\\s]", "").substring(0, 14); + } catch (Exception e) { + recoverTime = collectTime; + } + } + alarm.put("alarmTime", recoverTime); + + alarmList.add(alarm); + } + } alarmMap.put("alarms", alarmList); @@ -173,7 +295,7 @@ public class ProvincialPlatformDataPushScheduled { try { encrypt = AESUtil.encrypt(JSON.toJSONString(alarmMap)); } catch (Exception e) { - logger.error("实时数据AES加密出现错误!", e); + logger.error("报警数据AES加密出现错误!", e); throw new RuntimeException(e); } baseMap.put("data", encrypt); @@ -182,6 +304,31 @@ public class ProvincialPlatformDataPushScheduled { sendDataToPlatform(baseMap); } + /** + * 获取报警阈值 + * @param alarmData 报警数据 + * @param alarmType 报警类型 + * @return 阈值 + */ + private Object getAlarmThreshold(PageData alarmData, String alarmType) { + try { + if ("高高报警".equals(alarmType)) { + return Float.parseFloat(alarmData.getString("THRESHOLD_UP_UP_LIMIT")); + } else if ("高报警".equals(alarmType)) { + return Float.parseFloat(alarmData.getString("THRESHOLD_UP_LIMIT")); + } else if ("低报警".equals(alarmType)) { + return Float.parseFloat(alarmData.getString("THRESHOLD_DOWN_LIMIT")); + } else if ("低低报警".equals(alarmType)) { + return Float.parseFloat(alarmData.getString("THRESHOLD_DOWN_DOWN_LIMIT")); + } else if ("联锁投入报警".equals(alarmType)) { + return Float.parseFloat(alarmData.getString("ALARM_VALUE")); + } + } catch (Exception e) { + logger.warn("获取报警阈值失败: {}", e.getMessage()); + } + return null; + } + /** * 将数据发送到物联网平台 * @param data 要发送的数据