Bläddra i källkod

完善报警吃

menglu 3 år sedan
förälder
incheckning
77c083a4f6

+ 47 - 7
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDAlarmUtil.java

@@ -5,6 +5,7 @@ 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 java.util.concurrent.ConcurrentHashMap;
@@ -33,6 +34,8 @@ public class RWDAlarmUtil {
 	static Map<String, String> levelMap = new ConcurrentHashMap<String, String>();
 	static Map<String, String> categoryMap = new ConcurrentHashMap<String, String>();
 
+	static List<String> alarmColChange = new ArrayList<String>();
+
 	static {
 		history_alarm_path.add("基础对象");
 		history_alarm_path.add("历史报警");
@@ -57,6 +60,11 @@ public class RWDAlarmUtil {
 		categoryMap.put("Eq", "设备报警");
 		categoryMap.put("Sy", "系统报警");
 		categoryMap.put("Sp", "空间报警");
+
+		alarmColChange.add("state");
+		alarmColChange.add("status");
+		alarmColChange.add("treatState");
+		alarmColChange.add("treatMode");
 	}
 
 	public static JSONObject get_alarm_detail(JSONObject paramObject) {
@@ -456,6 +464,10 @@ public class RWDAlarmUtil {
 		String id = (String) alarm.get("id");
 		String objId = (String) alarm.get("objId");
 		String treatState = alarm.get("treatState").toString();
+		boolean alarmArrayRowChange = false;
+		boolean alarmListRowChange = false;
+		boolean alarmCountChange = false;
+		Map<String, Boolean> colChangeMap = new HashMap<String, Boolean>();
 		{
 			SceneDataValue alarmList = RepositoryContainer.RepositoryProject.id2alarmList.get(objId);
 			SceneDataValue alarmCount = RepositoryContainer.RepositoryProject.id2alarmCount.get(objId);
@@ -500,9 +512,11 @@ public class RWDAlarmUtil {
 			if (treatState.equals("3")) {
 				if (existIndex != -1) {
 					alarmList.value_array.set.remove(existIndex);
+					alarmListRowChange = true;
 				}
 				for (int removeIndex : existIndexList) {
 					RepositoryContainer.RepositoryProject.alarmArray.set.remove(removeIndex);
+					alarmArrayRowChange = true;
 				}
 			} else {
 				// 只替换非空字段
@@ -515,10 +529,14 @@ public class RWDAlarmUtil {
 						if (sdvInner == null || sdvInner.value_prim == null || sdvInner.value_prim.value == null) {
 							continue;
 						}
-						sdoInner.put(key, sdoAlarm.get(key));
+						if (!sdvInner.value_prim.value.equals(sdoInner.get(key))) {
+							sdoInner.put(key, sdoAlarm.get(key));
+							colChangeMap.put(key, true);
+						}
 					}
 				} else {
 					alarmList.value_array.set.add(sdoAlarm);
+					alarmListRowChange = true;
 				}
 				if (existIndexList.size() > 0) {
 					for (int removeIndex : existIndexList) {
@@ -533,14 +551,26 @@ public class RWDAlarmUtil {
 					}
 				} else {
 					RepositoryContainer.RepositoryProject.alarmArray.set.add(sdoAlarm);
+					alarmArrayRowChange = true;
 				}
 			}
-			alarmCount.value_prim.value = alarmList.value_array.set.size();
+			if (!alarmCount.value_prim.value.equals(alarmList.value_array.set.size())) {
+				alarmCount.value_prim.value = alarmList.value_array.set.size();
+				alarmCountChange = true;
+			}
 		}
 
 		RepositoryImpl Repository = RepositoryContainer.instance;
 		if (Repository.enable_factor) {
-			Repository.addWaitCompute(RepositoryContainer.RepositoryProject.alarmArray);
+			if (alarmArrayRowChange) {
+				Repository.addWaitCompute(RepositoryContainer.RepositoryProject.alarmArray);
+			} else {
+				for (String col : RWDAlarmUtil.alarmColChange) {
+					if (colChangeMap.containsKey(col)) {
+						Repository.addWaitCompute(RepositoryContainer.RepositoryProject.alarmArray, col);
+					}
+				}
+			}
 			if (Repository.id2sdv.containsKey(objId)) {
 				SceneDataObject objSDV = Repository.id2sdv.get(objId);
 				SceneDataValue sv_alarmList = objSDV.get("报警列表");
@@ -552,10 +582,20 @@ public class RWDAlarmUtil {
 					log.warn(path_alarmCount);
 				} catch (Exception e) {
 				}
-				// Repository.ComputeOccur(sv_alarmList);
-				// Repository.ComputeOccur(sv_alarmCount);
-				Repository.addWaitCompute(sv_alarmList);
-				Repository.addWaitCompute(sv_alarmCount);
+				if (alarmListRowChange) {
+					// Repository.ComputeOccur(sv_alarmList);
+					Repository.addWaitCompute(sv_alarmList);
+				} else {
+					for (String col : RWDAlarmUtil.alarmColChange) {
+						if (colChangeMap.containsKey(col)) {
+							Repository.addWaitCompute(sv_alarmList.value_array, col);
+						}
+					}
+				}
+				if (alarmCountChange) {
+					// Repository.ComputeOccur(sv_alarmCount);
+					Repository.addWaitCompute(sv_alarmCount);
+				}
 			}
 		}
 	}

+ 6 - 0
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDLoadUtil.java

@@ -512,6 +512,9 @@ public class RWDLoadUtil {
 	}
 
 	public static void LoadAlarm(RepositoryImpl Repository, boolean use_sample) throws Exception {
+		for (String col : RWDAlarmUtil.alarmColChange) {
+			RepositoryContainer.RepositoryProject.alarmArray.setColChange(col);
+		}
 		for (String classCode : Repository.objectArrayDic.keySet()) {
 			if (!Repository.code2objTypeMap.containsKey(classCode)) {
 				continue;
@@ -531,6 +534,9 @@ public class RWDLoadUtil {
 					sv_alarmList.value_array.set = new ArrayList<SceneDataObject>();
 					sv_alarmList.value_array.setRowChange(true);
 					RepositoryContainer.RepositoryProject.id2alarmList.putIfAbsent(objId, sv_alarmList);
+					for (String col : RWDAlarmUtil.alarmColChange) {
+						sv_alarmList.value_array.setColChange(col);
+					}
 				}
 				SceneDataValue alarmList = RepositoryContainer.RepositoryProject.id2alarmList.get(objId);
 				{