Browse Source

倒腾报警

menglu 3 years ago
parent
commit
417bc85ebc

+ 1 - 1
ibms-data-sdk/pom.xml

@@ -211,7 +211,7 @@
 		<dependency>
 			<groupId>com.persagy</groupId>
 			<artifactId>sailfish</artifactId>
-			<version>0.0.13</version>
+			<version>0.0.14</version>
 		</dependency>
 	</dependencies>
 

+ 3 - 50
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/AlarmDurationThread.java

@@ -8,8 +8,8 @@ import javax.annotation.PostConstruct;
 import org.springframework.stereotype.Component;
 
 import com.persagy.ibms.core.data.SceneDataObject;
-import com.persagy.ibms.core.data.SceneDataPrimitive;
 import com.persagy.ibms.core.data.SceneDataValue;
+import com.persagy.ibms.data.sdk.util.RWDAlarmUtil;
 import com.persagy.ibms.data.sdk.util.RepositoryContainer;
 
 @Component
@@ -20,7 +20,7 @@ public class AlarmDurationThread extends Thread {
 	}
 
 	public void run() {
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
 		while (true) {
 			try {
 				Thread.sleep(1000L * 5);
@@ -34,56 +34,9 @@ public class AlarmDurationThread extends Thread {
 				SceneDataValue alarmList = RepositoryContainer.RepositoryBase.id2alarmList.get(id);
 				for (int i = 0; i < alarmList.value_array.set.size(); i++) {
 					SceneDataObject sdoInner = (SceneDataObject) alarmList.value_array.set.get(i);
-					long triggerTime = (Long) sdoInner.get("triggerTime").value_prim.value;
-					String duration;
-					if (sdoInner.containsKey("endTime")) {
-						long endTime = (Long) sdoInner.get("endTime").value_prim.value;
-						duration = getTimeDiff(triggerTime, endTime);
-					} else {
-						duration = getTimeDiff(triggerTime, currentTime.getTime());
-					}
-					{
-						SceneDataValue sdvInner = new SceneDataValue(null, null, null, null);
-						sdvInner.value_prim = new SceneDataPrimitive();
-						sdvInner.value_prim.value = duration;
-						sdoInner.put("duration", sdvInner);
-					}
-					{
-						SceneDataValue sdvInner = new SceneDataValue(null, null, null, null);
-						sdvInner.value_prim = new SceneDataPrimitive();
-						sdvInner.value_prim.value = sdf.format(currentTime);
-						sdoInner.put("currentTime", sdvInner);
-					}
+					RWDAlarmUtil.chixushijian(sdf, currentTime, sdoInner);
 				}
 			}
 		}
 	}
-
-	// 获取时间差方法
-	public static String getTimeDiff(Date startDate, Date endDate) {
-		long diffMS = endDate.getTime() - startDate.getTime();
-		// (1000 * 60 * 60 * 24)
-		Long dayMSRate = 86400000L;
-		// (1000 * 60 * 60)
-		Long hourMSRate = 3600000L;
-		// (1000 * 60)
-		Long minuteMSRate = 60000L;
-		// (1000)
-		Long secondMSRate = 1000L;
-		long days = diffMS / dayMSRate;
-		// 获取时
-		long hours = diffMS % dayMSRate / hourMSRate;
-		// 获取分钟
-		long minutes = diffMS % hourMSRate / minuteMSRate;
-		// 获取秒
-		long seconds = diffMS % minuteMSRate / secondMSRate;
-		return days + "天" + hours + "小时" + minutes + "分" + seconds + "秒";
-	}
-
-	// 获取时间差方法
-	public static String getTimeDiff(Long startTimestamp, Long endTimestamp) {
-		Date startDate = new Date(startTimestamp);
-		Date endDate = new Date(endTimestamp);
-		return getTimeDiff(startDate, endDate);
-	}
 }

+ 195 - 42
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDAlarmUtil.java

@@ -4,7 +4,9 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -20,67 +22,167 @@ import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
 public class RWDAlarmUtil {
-	public static void modify_alarm(JSONObject alarm) {
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
-		try {
-			if (alarm.containsKey("triggerInfo")) {
-				Object object = alarm.get("triggerInfo");
-				if (object != null && object instanceof String) {
-					String string = alarm.getString("triggerInfo");
-					JSONObject json = JSON.parseObject(string);
-					alarm.put("triggerInfo", json);
-				}
+
+	static Map<Integer, String> statusMap = new HashMap<Integer, String>();
+	static Map<Integer, String> treatStateMap = new HashMap<Integer, String>();
+	static Map<String, String> levelMap = new HashMap<String, String>();
+	static Map<String, String> categoryMap = new HashMap<String, String>();
+
+	static {
+		statusMap.put(1, "未恢复");
+		statusMap.put(2, "已恢复");
+		statusMap.put(3, "已过期");
+		treatStateMap.put(1, "未处理");
+		treatStateMap.put(2, "处理中");
+		treatStateMap.put(3, "已处理");
+		levelMap.put("1", "严重");
+		levelMap.put("2", "较重");
+		levelMap.put("3", "一般");
+		categoryMap.put("Eq", "设备报警");
+		categoryMap.put("Sy", "系统报警");
+		categoryMap.put("Sp", "空间报警");
+	}
+
+	public static void modify_alarm(JSONObject alarm) throws Exception {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+		SimpleDateFormat sdf_ = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+		if (alarm.containsKey("triggerInfo")) {
+			Object object = alarm.get("triggerInfo");
+			if (object != null && object instanceof String) {
+				String string = alarm.getString("triggerInfo");
+				JSONObject json = JSON.parseObject(string);
+				alarm.put("triggerInfo", json);
 			}
+		}
 
-			if (alarm.containsKey("triggerTime")) {
-				Object object = alarm.get("triggerTime");
-				if (object != null && object instanceof String) {
-					String triggerTimeString = (String) object;
-					Date triggerTime = sdf.parse(triggerTimeString);
-					alarm.put("triggerTime", triggerTime.getTime());
+		JSONObject triggerInfo = (JSONObject) alarm.get("triggerInfo");
+		if (triggerInfo.size() == 1) {
+			String[] infos = triggerInfo.keySet().toArray(new String[0]);
+			alarm.put("triggerMainInfo", infos[0]);
+		}
+
+		if (alarm.containsKey("objId")) {
+			alarm.put("objectId", alarm.get("objId"));
+		}
+		if (alarm.containsKey("objName")) {
+			alarm.put("objectName", alarm.get("objName"));
+		}
+		if (alarm.containsKey("state")) {
+			alarm.put("status", alarm.get("state"));
+			alarm.put("status_name", statusMap.get(alarm.get("status")));
+		}
+		if (alarm.containsKey("treatState")) {
+			alarm.put("treatState_name", treatStateMap.get(alarm.get("treatState")));
+		}
+		if (alarm.containsKey("level")) {
+			alarm.put("level_name", levelMap.get(alarm.get("level")));
+		}
+		if (alarm.containsKey("category")) {
+			alarm.put("category_name", categoryMap.get(alarm.get("category")));
+		}
+
+		if (alarm.containsKey("triggerTime")) {
+			Object object = alarm.get("triggerTime");
+			if (object != null) {
+				if (object instanceof Long) {
+					Long timeLong = (Long) object;
+					alarm.put("triggerTime", sdf.format(new Date(timeLong)));
+				} else if (object instanceof String) {
+					String timeString = (String) object;
+					alarm.put("triggerTime", sdf.format(sdf_.parse(timeString)));
 				}
 			}
-			if (alarm.containsKey("endTime")) {
-				Object object = alarm.get("endTime");
-				if (object != null && object instanceof String) {
-					String endTimeString = (String) object;
-					Date endTime = sdf.parse(endTimeString);
-					alarm.put("endTime", endTime.getTime());
+		}
+		if (alarm.containsKey("endTime")) {
+			Object object = alarm.get("endTime");
+			if (object != null) {
+				if (object instanceof Long) {
+					Long timeLong = (Long) object;
+					alarm.put("endTime", sdf.format(new Date(timeLong)));
+				} else if (object instanceof String) {
+					String timeString = (String) object;
+					alarm.put("endTime", sdf.format(sdf_.parse(timeString)));
 				}
 			}
-			if (alarm.containsKey("createTime")) {
-				Object object = alarm.get("createTime");
-				if (object != null && object instanceof String) {
-					String createTimeString = (String) object;
-					Date createTime = sdf.parse(createTimeString);
-					alarm.put("createTime", createTime.getTime());
+		}
+		if (alarm.containsKey("createTime")) {
+			Object object = alarm.get("createTime");
+			if (object != null) {
+				if (object instanceof Long) {
+					Long timeLong = (Long) object;
+					alarm.put("createTime", sdf.format(new Date(timeLong)));
+				} else if (object instanceof String) {
+					String timeString = (String) object;
+					alarm.put("createTime", sdf.format(sdf_.parse(timeString)));
 				}
 			}
-			if (alarm.containsKey("updateTime")) {
-				Object object = alarm.get("updateTime");
-				if (object != null && object instanceof String) {
-					String updateTimeString = (String) object;
-					Date updateTime = sdf.parse(updateTimeString);
-					alarm.put("updateTime", updateTime.getTime());
+		}
+		if (alarm.containsKey("updateTime")) {
+			Object object = alarm.get("updateTime");
+			if (object != null) {
+				if (object instanceof Long) {
+					Long timeLong = (Long) object;
+					alarm.put("updateTime", sdf.format(new Date(timeLong)));
+				} else if (object instanceof String) {
+					String timeString = (String) object;
+					alarm.put("updateTime", sdf.format(sdf_.parse(timeString)));
 				}
 			}
-		} catch (ParseException e) {
-			log.error(LogUtil.GetExceptionStackTrace(e));
-			e.printStackTrace();
 		}
 
-		JSONObject triggerInfo = (JSONObject) alarm.remove("triggerInfo");
-		if (triggerInfo.size() == 1) {
-			String[] infos = triggerInfo.keySet().toArray(new String[0]);
-			alarm.put("triggerInfo", infos[0]);
+		if (alarm.containsKey("createTime")) {
+			alarm.put("create_time", alarm.get("createTime"));
+		}
+		if (alarm.containsKey("endTime")) {
+			alarm.put("close_time", alarm.get("endTime"));
+		}
+	}
+
+	public static void chixushijian(SimpleDateFormat sdf, Date currentTime, SceneDataObject sdoInner) {
+		String triggerTime = (String) sdoInner.get("triggerTime").value_prim.value;
+		String duration;
+		long keep_time;
+		if (sdoInner.containsKey("endTime")) {
+			String endTime = (String) sdoInner.get("endTime").value_prim.value;
+			duration = getTimeDiff(sdf, triggerTime, endTime);
+			keep_time = getTimeDiffLong(sdf, triggerTime, endTime);
+		} else {
+			duration = getTimeDiff(sdf, triggerTime, sdf.format(currentTime));
+			keep_time = getTimeDiffLong(sdf, triggerTime, sdf.format(currentTime));
+		}
+		{
+			SceneDataValue sdvInner = new SceneDataValue(null, null, null, null);
+			sdvInner.value_prim = new SceneDataPrimitive();
+			sdvInner.value_prim.value = duration;
+			sdoInner.put("duration", sdvInner);
+		}
+		{
+			SceneDataValue sdvInner = new SceneDataValue(null, null, null, null);
+			sdvInner.value_prim = new SceneDataPrimitive();
+			sdvInner.value_prim.value = keep_time;
+			sdoInner.put("keep_time", sdvInner);
+		}
+		{
+			SceneDataValue sdvInner = new SceneDataValue(null, null, null, null);
+			sdvInner.value_prim = new SceneDataPrimitive();
+			sdvInner.value_prim.value = sdf.format(currentTime);
+			sdoInner.put("currentTime", sdvInner);
 		}
 	}
 
 	public static synchronized void ProcessAlarm(JSONObject alarm) {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+		Date currentTime = new Date();
 		String id = (String) alarm.get("id");
 		String objId = (String) alarm.get("objId");
 		String treatState = alarm.get("treatState").toString();
-		modify_alarm(alarm);
+		try {
+			modify_alarm(alarm);
+		} catch (Exception e) {
+			e.printStackTrace();
+			log.error(LogUtil.GetExceptionStackTrace(e));
+		}
 		{
 			SceneDataValue alarmList = RepositoryContainer.RepositoryBase.id2alarmList.get(objId);
 			SceneDataValue alarmCount = RepositoryContainer.RepositoryBase.id2alarmCount.get(objId);
@@ -128,6 +230,7 @@ public class RWDAlarmUtil {
 
 			if (!treatState.equals("3")) {
 				SceneDataObject sodInner = RWDUtil.object2sod(alarm);
+				chixushijian(sdf, currentTime, sodInner);
 				alarmList.value_array.set.add(sodInner);
 				RepositoryContainer.RepositoryBase.alarmArray.set.add(sodInner);
 			}
@@ -169,4 +272,54 @@ public class RWDAlarmUtil {
 		}
 		return Content.size();
 	}
+
+	// 获取时间差方法
+	public static String getTimeDiff(Date startDate, Date endDate) {
+		long diffMS = endDate.getTime() - startDate.getTime();
+		// (1000 * 60 * 60 * 24)
+		Long dayMSRate = 86400000L;
+		// (1000 * 60 * 60)
+		Long hourMSRate = 3600000L;
+		// (1000 * 60)
+		Long minuteMSRate = 60000L;
+		// (1000)
+		Long secondMSRate = 1000L;
+		long days = diffMS / dayMSRate;
+		// 获取时
+		long hours = diffMS % dayMSRate / hourMSRate;
+		// 获取分钟
+		long minutes = diffMS % hourMSRate / minuteMSRate;
+		// 获取秒
+		long seconds = diffMS % minuteMSRate / secondMSRate;
+		return days + "天" + hours + "小时" + minutes + "分" + seconds + "秒";
+	}
+
+	// 获取时间差方法
+	public static String getTimeDiff(Long startTimestamp, Long endTimestamp) {
+		Date startDate = new Date(startTimestamp);
+		Date endDate = new Date(endTimestamp);
+		return getTimeDiff(startDate, endDate);
+	}
+
+	public static long getTimeDiffLong(SimpleDateFormat sdf, String startTimestamp, String endTimestamp) {
+		try {
+			Date startDate = sdf.parse(startTimestamp);
+			Date endDate = sdf.parse(endTimestamp);
+			return endDate.getTime() - startDate.getTime();
+		} catch (ParseException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+
+	public static String getTimeDiff(SimpleDateFormat sdf, String startTimestamp, String endTimestamp) {
+		try {
+			Date startDate = sdf.parse(startTimestamp);
+			Date endDate = sdf.parse(endTimestamp);
+			return getTimeDiff(startDate, endDate);
+		} catch (ParseException e) {
+			e.printStackTrace();
+		}
+		return "0";
+	}
 }