Browse Source

报警改成更新字段模式

menglu 3 years ago
parent
commit
2e5808e1c6

+ 31 - 11
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDAlarmUtil.java

@@ -487,9 +487,6 @@ public class RWDAlarmUtil {
 					break;
 				}
 			}
-			if (existIndex != -1) {
-				alarmList.value_array.set.remove(existIndex);
-			}
 			// 从报警列表下删除
 			List<Integer> removeIndexList = new ArrayList<Integer>();
 			for (int index_alarm = 0; index_alarm < RepositoryContainer.RepositoryBase.alarmArray.set.size(); index_alarm++) {
@@ -498,15 +495,38 @@ public class RWDAlarmUtil {
 					removeIndexList.add(0, index_alarm);
 				}
 			}
-			for (int removeIndex : removeIndexList) {
-				RepositoryContainer.RepositoryBase.alarmArray.set.remove(removeIndex);
-			}
 
-			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);
+			if (treatState.equals("3")) {
+				if (existIndex != -1) {
+					alarmList.value_array.set.remove(existIndex);
+				}
+				for (int removeIndex : removeIndexList) {
+					RepositoryContainer.RepositoryBase.alarmArray.set.remove(removeIndex);
+				}
+			} else {
+				//只替换非空字段
+				SceneDataObject sdoAlarm = RWDUtil.object2sod(alarm);
+				chixushijian(sdf, currentTime, sdoAlarm);
+				if (existIndex != -1) {
+					SceneDataObject sdoInner = alarmList.value_array.set.get(existIndex);
+					for (String key : sdoAlarm.keySet()) {
+						SceneDataValue sdvInner = sdoAlarm.get(key);
+						if (sdvInner == null || sdvInner.value_prim == null || sdvInner.value_prim.value == null) {
+							continue;
+						}
+						sdoInner.put(key, sdoAlarm.get(key));
+					}
+				}
+				for (int removeIndex : removeIndexList) {
+					SceneDataObject sdoInner = RepositoryContainer.RepositoryBase.alarmArray.set.get(removeIndex);
+					for (String key : sdoAlarm.keySet()) {
+						SceneDataValue sdvInner = sdoAlarm.get(key);
+						if (sdvInner == null || sdvInner.value_prim == null || sdvInner.value_prim.value == null) {
+							continue;
+						}
+						sdoInner.put(key, sdoAlarm.get(key));
+					}
+				}
 			}
 			alarmCount.value_prim.value = alarmList.value_array.set.size();
 		}