浏览代码

准备开始自动计算是否可变

menglu 4 年之前
父节点
当前提交
4db99d5d01
共有 37 个文件被更改,包括 1199 次插入699 次删除
  1. 1 1
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/CriteriaDefault.java
  2. 2 0
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/MatchBase.java
  3. 7 1
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_contain.java
  4. 8 2
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_e.java
  5. 8 2
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_gt.java
  6. 8 2
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_gte.java
  7. 7 1
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_in.java
  8. 8 2
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_lt.java
  9. 8 2
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_lte.java
  10. 8 2
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_ne.java
  11. 7 1
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_notin.java
  12. 8 2
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_regex.java
  13. 9 0
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/Change.java
  14. 0 4
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/SceneDataBase.java
  15. 66 40
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/SceneDataObject.java
  16. 6 0
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/SceneDataPrimitive.java
  17. 42 0
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/SceneDataSet.java
  18. 17 24
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/SceneDataValue.java
  19. 0 18
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/SceneProperty.java
  20. 11 8
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/AlarmDurationThread.java
  21. 4 4
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/rest/RestApi.java
  22. 39 36
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/rest/RestUtil.java
  23. 2 2
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/CompareUtil.java
  24. 63 86
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/ComputeUtil.java
  25. 9 7
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/ControlUtil.java
  26. 15 12
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/DataUtil.java
  27. 14 14
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/DeamonUtil.java
  28. 17 17
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/FastJsonUtil.java
  29. 577 200
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/QueryUtil.java
  30. 24 21
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDAlarmUtil.java
  31. 112 98
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDLoadUtil.java
  32. 44 45
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDUtil.java
  33. 20 20
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RecursiveUtil.java
  34. 8 8
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/Repository.java
  35. 4 4
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RepositoryBase.java
  36. 5 5
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/SceneDataValueComparator.java
  37. 11 8
      ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/websocket/IOTWebSocketClient.java

+ 1 - 1
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/CriteriaDefault.java

@@ -18,7 +18,7 @@ public class CriteriaDefault extends CriteriaBase {
 			List<MatchBase> matchList = column2MatchList.get(column);
 			Object itemValue = null;
 			if (item.containsKey(column)) {
-				itemValue = item.get(column).value_primitive;
+				itemValue = item.get(column).value_prim.value;
 			}
 			for (MatchBase match : matchList) {
 				if (!match.match(itemValue)) {

+ 2 - 0
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/MatchBase.java

@@ -2,4 +2,6 @@ package com.persagy.ibms.data.sdk.criteria;
 
 public abstract class MatchBase {
 	public abstract boolean match(Object item);
+
+	public abstract boolean change();
 }

+ 7 - 1
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_contain.java

@@ -5,8 +5,9 @@ import com.alibaba.fastjson.JSONObject;
 public class Match_contain extends MatchBase {
 	public boolean pass;
 	public String value;
+	private boolean change = false;
 
-	public Match_contain(Object value) {
+	public Match_contain(Object value, boolean change) {
 		if (value instanceof JSONObject) {
 			JSONObject valueObject = (JSONObject) value;
 			if (valueObject.containsKey("pass")) {
@@ -16,6 +17,7 @@ public class Match_contain extends MatchBase {
 		}
 
 		this.value = (String) value;
+		this.change = change;
 	}
 
 	public boolean match(Object item) {
@@ -34,4 +36,8 @@ public class Match_contain extends MatchBase {
 
 		return itemValue.toLowerCase().contains(this.value.toLowerCase());
 	}
+
+	public boolean change() {
+		return this.change;
+	}
 }

+ 8 - 2
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_e.java

@@ -5,8 +5,9 @@ import com.alibaba.fastjson.JSONObject;
 public class Match_e extends MatchBase {
 	public boolean pass;
 	public Object value;
+	private boolean change = false;
 
-	public Match_e(Object value) {
+	public Match_e(Object value, boolean change) {
 		if (value instanceof JSONObject) {
 			JSONObject valueObject = (JSONObject) value;
 			if (valueObject.containsKey("pass")) {
@@ -14,8 +15,9 @@ public class Match_e extends MatchBase {
 				return;
 			}
 		}
-		
+
 		this.value = value;
+		this.change = change;
 	}
 
 	public boolean match(Object item) {
@@ -40,4 +42,8 @@ public class Match_e extends MatchBase {
 
 		return MatchUtil.match("e", itemValue, value);
 	}
+
+	public boolean change() {
+		return this.change;
+	}
 }

+ 8 - 2
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_gt.java

@@ -5,8 +5,9 @@ import com.alibaba.fastjson.JSONObject;
 public class Match_gt extends MatchBase {
 	public boolean pass;
 	public Object value;
+	private boolean change = false;
 
-	public Match_gt(Object value) {
+	public Match_gt(Object value, boolean change) {
 		if (value instanceof JSONObject) {
 			JSONObject valueObject = (JSONObject) value;
 			if (valueObject.containsKey("pass")) {
@@ -14,8 +15,9 @@ public class Match_gt extends MatchBase {
 				return;
 			}
 		}
-		
+
 		this.value = value;
+		this.change = change;
 	}
 
 	public boolean match(Object item) {
@@ -40,4 +42,8 @@ public class Match_gt extends MatchBase {
 
 		return MatchUtil.match("gt", itemValue, value);
 	}
+
+	public boolean change() {
+		return this.change;
+	}
 }

+ 8 - 2
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_gte.java

@@ -5,8 +5,9 @@ import com.alibaba.fastjson.JSONObject;
 public class Match_gte extends MatchBase {
 	public boolean pass;
 	public Object value;
+	private boolean change = false;
 
-	public Match_gte(Object value) {
+	public Match_gte(Object value, boolean change) {
 		if (value instanceof JSONObject) {
 			JSONObject valueObject = (JSONObject) value;
 			if (valueObject.containsKey("pass")) {
@@ -14,8 +15,9 @@ public class Match_gte extends MatchBase {
 				return;
 			}
 		}
-		
+
 		this.value = value;
+		this.change = change;
 	}
 
 	public boolean match(Object item) {
@@ -40,4 +42,8 @@ public class Match_gte extends MatchBase {
 
 		return MatchUtil.match("gte", itemValue, value);
 	}
+
+	public boolean change() {
+		return this.change;
+	}
 }

+ 7 - 1
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_in.java

@@ -5,9 +5,11 @@ import java.util.HashSet;
 public class Match_in extends MatchBase {
 	public boolean pass;
 	public HashSet<Object> value;
+	private boolean change = false;
 
-	public Match_in(HashSet<Object> value) {
+	public Match_in(HashSet<Object> value, boolean change) {
 		this.value = value;
+		this.change = change;
 	}
 
 	public boolean match(Object item) {
@@ -27,4 +29,8 @@ public class Match_in extends MatchBase {
 		}
 		return false;
 	}
+
+	public boolean change() {
+		return this.change;
+	}
 }

+ 8 - 2
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_lt.java

@@ -5,8 +5,9 @@ import com.alibaba.fastjson.JSONObject;
 public class Match_lt extends MatchBase {
 	public boolean pass;
 	public Object value;
+	private boolean change = false;
 
-	public Match_lt(Object value) {
+	public Match_lt(Object value, boolean change) {
 		if (value instanceof JSONObject) {
 			JSONObject valueObject = (JSONObject) value;
 			if (valueObject.containsKey("pass")) {
@@ -14,8 +15,9 @@ public class Match_lt extends MatchBase {
 				return;
 			}
 		}
-		
+
 		this.value = value;
+		this.change = change;
 	}
 
 	public boolean match(Object item) {
@@ -40,4 +42,8 @@ public class Match_lt extends MatchBase {
 
 		return MatchUtil.match("lt", itemValue, value);
 	}
+
+	public boolean change() {
+		return this.change;
+	}
 }

+ 8 - 2
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_lte.java

@@ -5,8 +5,9 @@ import com.alibaba.fastjson.JSONObject;
 public class Match_lte extends MatchBase {
 	public boolean pass;
 	public Object value;
+	private boolean change = false;
 
-	public Match_lte(Object value) {
+	public Match_lte(Object value, boolean change) {
 		if (value instanceof JSONObject) {
 			JSONObject valueObject = (JSONObject) value;
 			if (valueObject.containsKey("pass")) {
@@ -14,8 +15,9 @@ public class Match_lte extends MatchBase {
 				return;
 			}
 		}
-		
+
 		this.value = value;
+		this.change = change;
 	}
 
 	public boolean match(Object item) {
@@ -40,4 +42,8 @@ public class Match_lte extends MatchBase {
 
 		return MatchUtil.match("lte", itemValue, value);
 	}
+
+	public boolean change() {
+		return this.change;
+	}
 }

+ 8 - 2
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_ne.java

@@ -5,8 +5,9 @@ import com.alibaba.fastjson.JSONObject;
 public class Match_ne extends MatchBase {
 	public boolean pass;
 	public Object value;
+	private boolean change = false;
 
-	public Match_ne(Object value) {
+	public Match_ne(Object value, boolean change) {
 		if (value instanceof JSONObject) {
 			JSONObject valueObject = (JSONObject) value;
 			if (valueObject.containsKey("pass")) {
@@ -14,8 +15,9 @@ public class Match_ne extends MatchBase {
 				return;
 			}
 		}
-		
+
 		this.value = value;
+		this.change = change;
 	}
 
 	public boolean match(Object item) {
@@ -40,4 +42,8 @@ public class Match_ne extends MatchBase {
 
 		return MatchUtil.match("ne", itemValue, value);
 	}
+
+	public boolean change() {
+		return this.change;
+	}
 }

+ 7 - 1
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_notin.java

@@ -5,9 +5,11 @@ import java.util.HashSet;
 public class Match_notin extends MatchBase {
 	public boolean pass;
 	public HashSet<Object> value;
+	private boolean change = false;
 
-	public Match_notin(HashSet<Object> value) {
+	public Match_notin(HashSet<Object> value, boolean change) {
 		this.value = value;
+		this.change = change;
 	}
 
 	public boolean match(Object item) {
@@ -27,4 +29,8 @@ public class Match_notin extends MatchBase {
 		}
 		return true;
 	}
+
+	public boolean change() {
+		return this.change;
+	}
 }

+ 8 - 2
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/criteria/Match_regex.java

@@ -8,8 +8,9 @@ public class Match_regex extends MatchBase {
 	public boolean pass;
 	public Object value;
 	Pattern regex;
+	private boolean change = false;
 
-	public Match_regex(Object value) {
+	public Match_regex(Object value, boolean change) {
 		if (value instanceof JSONObject) {
 			JSONObject valueObject = (JSONObject) value;
 			if (valueObject.containsKey("pass")) {
@@ -17,9 +18,10 @@ public class Match_regex extends MatchBase {
 				return;
 			}
 		}
-		
+
 		this.value = value;
 		regex = Pattern.compile(this.value.toString());
+		this.change = change;
 	}
 
 	public boolean match(Object item) {
@@ -38,4 +40,8 @@ public class Match_regex extends MatchBase {
 
 		return regex.matcher(itemValue.toString()).matches();
 	}
+
+	public boolean change() {
+		return this.change;
+	}
 }

+ 9 - 0
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/Change.java

@@ -0,0 +1,9 @@
+package com.persagy.ibms.data.sdk.data;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Change {
+	public boolean row_change = false;
+	public Map<String, Boolean> colChangeMap = new HashMap<String, Boolean>();
+}

+ 0 - 4
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/SceneDataBase.java

@@ -1,4 +0,0 @@
-package com.persagy.ibms.data.sdk.data;
-
-public abstract class SceneDataBase {
-}

+ 66 - 40
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/SceneDataObject.java

@@ -10,8 +10,7 @@ import com.persagy.ibms.data.sdk.util.Constant;
 import com.persagy.ibms.data.sdk.util.FastJsonUtil;
 import com.persagy.ibms.data.sdk.util.Repository;
 
-public class SceneDataObject extends SceneDataBase {
-
+public class SceneDataObject {
 	public SceneDataObject parentObjectData;
 	public String myPropertyName;
 	public SceneDataValue parentArrayData;
@@ -19,9 +18,10 @@ public class SceneDataObject extends SceneDataBase {
 	public SceneObject rel_object;
 	public SceneProperty[] query_attached;
 
-	private Map<String, SceneDataValue> value_object;
+	public Map<String, SceneDataValue> value_object;
+	public Change change = new Change();
 
-	public SceneDataObject father;
+	private SceneDataObject father;
 
 	public SceneDataObject(Repository Repository, SceneDataObject parentObjectData, String myPropertyName, SceneDataValue parentArrayData,
 			SceneObject custom_object, SceneProperty[] query_attached, SceneDataObject father) {
@@ -35,38 +35,36 @@ public class SceneDataObject extends SceneDataBase {
 		this.value_object = new HashMap<String, SceneDataValue>();
 		if (this.rel_object != null) {
 			for (SceneProperty sceneProperty : this.rel_object.propertyList) {
-				boolean variable = false;
-				if (sceneProperty.propertyValueType.equals("query")) {
-					if ((sceneProperty.propertyValueSchema.equals("JSONArray") || sceneProperty.propertyValueSchema.equals("JSONObject"))) {
-						if (sceneProperty.variable.equals("1")) {
-							variable = true;
-						}
-					} else {
-						variable = true;
-					}
-				}
-				this.value_object.put(sceneProperty.propertyName,
-						new SceneDataValue(Repository, this, sceneProperty.propertyName, sceneProperty, variable));
+				this.value_object.put(sceneProperty.propertyName, new SceneDataValue(Repository, this, sceneProperty.propertyName, sceneProperty));
 			}
 		}
 		if (this.query_attached != null) {
 			for (SceneProperty sceneProperty : this.query_attached) {
-				boolean variable = false;
-				if (sceneProperty.propertyValueType.equals("query")) {
-					if ((sceneProperty.propertyValueSchema.equals("JSONArray") || sceneProperty.propertyValueSchema.equals("JSONObject"))) {
-						if (sceneProperty.variable.equals("1")) {
-							variable = true;
-						}
-					} else {
-						variable = true;
-					}
-				}
-				this.value_object.put(sceneProperty.propertyName,
-						new SceneDataValue(Repository, this, sceneProperty.propertyName, sceneProperty, variable));
+				this.value_object.put(sceneProperty.propertyName, new SceneDataValue(Repository, this, sceneProperty.propertyName, sceneProperty));
 			}
 		}
 	}
 
+	public Object toJSON(int depth) {
+		int depthInner = depth == -1 ? -1 : (depth > 0 ? depth - 1 : 0);
+		JSONObject result = new JSONObject();
+		for (String key : this.keySet()) {
+			if (Constant.keyWordMap.containsKey(key)) {
+				continue;
+			}
+			SceneDataValue sdvInner = this.get(key);
+			if (sdvInner != null) {
+				result.put(key, sdvInner.toJSON(false, depthInner));
+			}
+		}
+		return result;
+	}
+
+	@Override
+	public String toString() {
+		return FastJsonUtil.toString(this.toJSON(1));
+	}
+
 	public Set<String> keySet() {
 		Set<String> result = new HashSet<String>();
 		if (this.father != null) {
@@ -117,23 +115,51 @@ public class SceneDataObject extends SceneDataBase {
 		return result;
 	}
 
-	public Object toJSON(int depth) {
-		int depthInner = depth == -1 ? -1 : (depth > 0 ? depth - 1 : 0);
-		JSONObject result = new JSONObject();
-		for (String key : this.keySet()) {
-			if (Constant.keyWordMap.containsKey(key)) {
-				continue;
+	public boolean getRowChange() {
+		if (this.father != null) {
+			return this.father.getRowChange();
+		} else {
+			return this.change.row_change;
+		}
+	}
+
+	public void setRowChange(boolean value) throws Exception {
+		if (this.father != null) {
+			throw new Exception();
+		} else {
+			this.change.row_change = value;
+		}
+	}
+
+	public Map<String, Boolean> getColChange() {
+		Map<String, Boolean> result;
+		if (this.father != null) {
+			result = new HashMap<String, Boolean>();
+			Map<String, Boolean> result_father = this.father.getColChange();
+			for (String col : result_father.keySet()) {
+				result.put(col, true);
 			}
-			SceneDataValue sdvInner = this.get(key);
-			if (sdvInner != null) {
-				result.put(key, sdvInner.toJSON(false, depthInner));
+			for (String col : this.change.colChangeMap.keySet()) {
+				result.put(col, true);
 			}
+		} else {
+			result = this.change.colChangeMap;
 		}
 		return result;
 	}
 
-	@Override
-	public String toString() {
-		return FastJsonUtil.toString(this.toJSON(1));
+	public void setColChange(String col) {
+		if (!this.hasColChange(col)) {
+			this.change.colChangeMap.put(col, true);
+		}
+	}
+
+	public boolean hasColChange(String col) {
+		if (this.father != null) {
+			if (this.father.hasColChange(col)) {
+				return true;
+			}
+		}
+		return this.change.colChangeMap.containsKey(col);
 	}
 }

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

@@ -0,0 +1,6 @@
+package com.persagy.ibms.data.sdk.data;
+
+public class SceneDataPrimitive {
+	public Object value;
+	public boolean change;
+}

+ 42 - 0
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/SceneDataSet.java

@@ -0,0 +1,42 @@
+package com.persagy.ibms.data.sdk.data;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class SceneDataSet {
+	public boolean isSingleValueSet = false;
+	public List<SceneDataObject> set;
+	public List<SceneDataValue> singleValueSet;
+	public Change change = new Change();
+
+	public SceneDataSet(boolean isSingleValueSet) {
+		this.isSingleValueSet = isSingleValueSet;
+		if (this.isSingleValueSet) {
+			this.singleValueSet = new ArrayList<SceneDataValue>();
+		} else {
+			this.set = new ArrayList<SceneDataObject>();
+		}
+	}
+
+	public boolean getRowChange() {
+		return this.change.row_change;
+	}
+
+	public void setRowChange(boolean value) {
+		this.change.row_change = value;
+	}
+
+	public Map<String, Boolean> getColChange() {
+		Map<String, Boolean> result = this.change.colChangeMap;
+		return result;
+	}
+
+	public void setColChange(String col) {
+		this.change.colChangeMap.put(col, true);
+	}
+
+	public boolean hasColChange(String col) {
+		return this.change.colChangeMap.containsKey(col);
+	}
+}

+ 17 - 24
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/SceneDataValue.java

@@ -1,14 +1,11 @@
 package com.persagy.ibms.data.sdk.data;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.persagy.ibms.data.sdk.util.FastJsonUtil;
 import com.persagy.ibms.data.sdk.util.Repository;
 
-public class SceneDataValue extends SceneDataBase {
+public class SceneDataValue {
 	public boolean finish = false;
 
 	public SceneDataObject parentObjectData;
@@ -17,17 +14,13 @@ public class SceneDataValue extends SceneDataBase {
 	public SceneProperty rel_property;
 
 	public SceneDataObject value_object;
-	public List<SceneDataBase> value_array;
-	public Object value_primitive;
-
-	public boolean variable;// 由rel_property决定
+	public SceneDataSet value_array;
+	public SceneDataPrimitive value_prim;
 
-	public SceneDataValue(Repository Repository, SceneDataObject parentObjectData, String myPropertyName, SceneProperty rel_property,
-			boolean variable) {
+	public SceneDataValue(Repository Repository, SceneDataObject parentObjectData, String myPropertyName, SceneProperty rel_property) {
 		this.parentObjectData = parentObjectData;
 		this.myPropertyName = myPropertyName;
 		this.rel_property = rel_property;
-		this.variable = variable;
 
 		if (this.rel_property != null) {
 			if (this.rel_property.propertyValueType.equals("query") || this.rel_property.propertyValueType.equals("static")
@@ -44,10 +37,10 @@ public class SceneDataValue extends SceneDataBase {
 				this.finish = true;
 			} else if (this.rel_property.propertyValueType.equals("static")) {
 				if (this.rel_property.propertyValueSchema.equals("JSONArray")) {
-					this.value_array = new ArrayList<SceneDataBase>();
+					this.value_array = new SceneDataSet(false);
 					for (SceneObject SceneObject : this.rel_property.static_array) {
 						SceneDataObject sdo = new SceneDataObject(Repository, null, null, this, SceneObject, this.rel_property.query_attached, null);
-						this.value_array.add(sdo);
+						this.value_array.set.add(sdo);
 					}
 					this.finish = true;
 				}
@@ -74,24 +67,24 @@ public class SceneDataValue extends SceneDataBase {
 				return result;
 			} else if (this.value_array != null) {
 				JSONArray result = new JSONArray();
-				for (int i = 0; i < this.value_array.size(); i++) {
-					SceneDataBase sdb = this.value_array.get(i);
-					if (sdb instanceof SceneDataObject) {
-						SceneDataObject sod = (SceneDataObject) sdb;
+				if (this.value_array.isSingleValueSet) {
+					for (int i = 0; i < this.value_array.singleValueSet.size(); i++) {
+						result.add(this.value_array.singleValueSet.get(i).value_prim);
+					}
+				} else {
+					for (int i = 0; i < this.value_array.set.size(); i++) {
+						SceneDataObject sod = this.value_array.set.get(i);
 						result.add(sod.toJSON(curr_depth));
-					} else {
-						SceneDataValue sdv = (SceneDataValue) sdb;
-						result.add(sdv.toJSON(false, curr_depth));
 					}
 				}
 				return result;
-			} else if (this.value_primitive != null) {
-				return this.value_primitive;
+			} else if (this.value_prim != null) {
+				return this.value_prim.value;
 			}
 			return null;
 		} else {
-			if (this.value_primitive != null) {
-				return this.value_primitive;
+			if (this.value_prim != null) {
+				return this.value_prim.value;
 			}
 			return null;
 		}

+ 0 - 18
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/data/SceneProperty.java

@@ -11,7 +11,6 @@ public class SceneProperty {
 	public String read_level;// 0表示递归全部、其他正整数表示层次
 	public String offset_level;
 	public String allow_pass;// 1表示通过,0表示截断
-	public String variable;
 
 	// type=custom
 	public SceneObject custom_object;
@@ -22,7 +21,6 @@ public class SceneProperty {
 
 	// type=query
 	public String query_sql;
-	public String query_fake_value;
 	public SceneProperty[] query_attached;
 
 	public String getPropertyName() {
@@ -89,14 +87,6 @@ public class SceneProperty {
 		this.allow_pass = allow_pass;
 	}
 
-	public String getVariable() {
-		return variable;
-	}
-
-	public void setVariable(String variable) {
-		this.variable = variable;
-	}
-
 	public SceneObject getCustom_object() {
 		return custom_object;
 	}
@@ -129,14 +119,6 @@ public class SceneProperty {
 		this.query_sql = query_sql;
 	}
 
-	public String getQuery_fake_value() {
-		return query_fake_value;
-	}
-
-	public void setQuery_fake_value(String query_fake_value) {
-		this.query_fake_value = query_fake_value;
-	}
-
 	public SceneProperty[] getQuery_attached() {
 		return query_attached;
 	}

+ 11 - 8
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/AlarmDurationThread.java

@@ -8,6 +8,7 @@ import javax.annotation.PostConstruct;
 import org.springframework.stereotype.Component;
 
 import com.persagy.ibms.data.sdk.data.SceneDataObject;
+import com.persagy.ibms.data.sdk.data.SceneDataPrimitive;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
 import com.persagy.ibms.data.sdk.util.RepositoryBase;
 
@@ -31,24 +32,26 @@ public class AlarmDurationThread extends Thread {
 			String[] ids = RepositoryBase.id2alarmList.keySet().toArray(new String[0]);
 			for (String id : ids) {
 				SceneDataValue alarmList = RepositoryBase.id2alarmList.get(id);
-				for (int i = 0; i < alarmList.value_array.size(); i++) {
-					SceneDataObject sdoInner = (SceneDataObject) alarmList.value_array.get(i);
-					long triggerTime = (Long) sdoInner.get("triggerTime").value_primitive;
+				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_primitive;
+						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, false);
-						sdvInner.value_primitive = duration;
+						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, false);
-						sdvInner.value_primitive = sdf.format(currentTime);
+						SceneDataValue sdvInner = new SceneDataValue(null, null, null, null);
+						sdvInner.value_prim = new SceneDataPrimitive();
+						sdvInner.value_prim.value = sdf.format(currentTime);
 						sdoInner.put("currentTime", sdvInner);
 					}
 				}

+ 4 - 4
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/rest/RestApi.java

@@ -66,8 +66,8 @@ public class RestApi {
 	@PostMapping(path = { "/post", "/zkt-sdk/post" }, produces = "application/json;charset=UTF-8")
 	public String post(@RequestBody String param, HttpServletRequest request) {
 
-	    String ip = RestUtil.getIp(request);
-        log.info("ip:" + ip + " || post: " + param);
+		String ip = RestUtil.getIp(request);
+		log.info("ip:" + ip + " || post: " + param);
 		String result = RestUtil.post(param);
 		return result;
 	}
@@ -113,13 +113,13 @@ public class RestApi {
 		String result = RestUtil.fjd_query(param);
 		return result;
 	}
-	
+
 	@PostMapping(path = { "/history_fjd_query", "/zkt-sdk/history_fjd_query" }, produces = "application/json;charset=UTF-8")
 	public String fjd_query_history(@RequestBody String param) {
 		String result = RestUtil.fjd_query_history(param);
 		return result;
 	}
-	
+
 	@PostMapping(path = { "/path_array_history_fjd_query", "/zkt-sdk/path_array_history_fjd_query" }, produces = "application/json;charset=UTF-8")
 	public String path_array_history_fjd_query(@RequestBody String param) {
 		String result = RestUtil.path_array_history_fjd_query(param);

+ 39 - 36
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/rest/RestUtil.java

@@ -14,8 +14,9 @@ import javax.servlet.http.HttpServletRequest;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.ibms.data.sdk.data.SceneDataBase;
 import com.persagy.ibms.data.sdk.data.SceneDataObject;
+import com.persagy.ibms.data.sdk.data.SceneDataPrimitive;
+import com.persagy.ibms.data.sdk.data.SceneDataSet;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
 import com.persagy.ibms.data.sdk.data.SceneProperty;
 import com.persagy.ibms.data.sdk.util.ComputeUtil;
@@ -36,22 +37,20 @@ import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
 public class RestUtil {
-	@SuppressWarnings("unchecked")
 	public static String query(String param) {
 		Repository Repository = RepositoryBase.instance;
 		try {
 			JSONObject sql_json = JSON.parseObject(param);
 			Object queryResult = QueryUtil.query(Repository, null, sql_json, new QueryAssist());
 			if (queryResult instanceof List) {
-				List<SceneDataValue> sdvList = (List<SceneDataValue>) queryResult;
+				SceneDataSet sdvList = (SceneDataSet) queryResult;
 				JSONArray arrayResult = new JSONArray();
-				SceneDataValue sdv = new SceneDataValue(null, null, null, null, false);
-				sdv.value_array = new ArrayList<SceneDataBase>();
-				for (SceneDataValue sdvInner : sdvList) {
-					if (sdvInner.value_object != null) {
-						sdv.value_array.add(sdvInner.value_object);
-					} else if (sdvInner.value_primitive != null) {
-						arrayResult.add(sdvInner.value_primitive);
+				SceneDataValue sdv = new SceneDataValue(null, null, null, null);
+				sdv.value_array = new SceneDataSet(false);
+				sdv.value_array.set = new ArrayList<SceneDataObject>();
+				for (SceneDataObject sdvInner : sdvList.set) {
+					if (sdvInner != null) {
+						sdv.value_array.set.add(sdvInner);
 					}
 				}
 				if (arrayResult.size() > 0) {
@@ -137,8 +136,8 @@ public class RestUtil {
 			if (sdv.value_object != null) {
 				checkObject(path, parentObjectData, myPropertyName, null, sdv.value_object);
 			} else if (sdv.value_array != null) {
-				for (int i = 0; i < sdv.value_array.size(); i++) {
-					SceneDataBase sdb = sdv.value_array.get(i);
+				for (int i = 0; i < sdv.value_array.set.size(); i++) {
+					SceneDataObject sdb = sdv.value_array.set.get(i);
 					if (sdb instanceof SceneDataObject) {
 						SceneDataObject sod = (SceneDataObject) sdb;
 						checkObject(path + "[" + i + "]", null, null, sdv, sod);
@@ -290,7 +289,7 @@ public class RestUtil {
 		JSONObject result = new JSONObject();
 		try {
 			JSONObject paramObject = JSON.parseObject(param);
-			List<SceneDataValue> array = filter_and_page(paramObject);
+			List<SceneDataObject> array = filter_and_page(paramObject);
 			if (paramObject.containsKey("count")) {
 			} else {
 				int pageSize = Integer.MAX_VALUE;
@@ -299,10 +298,11 @@ public class RestUtil {
 					pageSize = (Integer) paramObject.get("pageSize");
 					pageIndex = (Integer) paramObject.get("pageIndex");
 				}
-				SceneDataValue sdv = new SceneDataValue(null, null, null, null, false);
-				sdv.value_array = new ArrayList<SceneDataBase>();
+				SceneDataValue sdv = new SceneDataValue(null, null, null, null);
+				sdv.value_array = new SceneDataSet(false);
+				sdv.value_array.set = new ArrayList<SceneDataObject>();
 				for (int i = pageSize * pageIndex; i < pageSize * (pageIndex + 1) && i < array.size(); i++) {
-					sdv.value_array.add(array.get(i).value_object);
+					sdv.value_array.set.add(array.get(i));
 				}
 				int read_level = 0;
 				JSONArray content = (JSONArray) sdv.toJSON(true, read_level == 0 ? -1 : read_level);
@@ -324,7 +324,7 @@ public class RestUtil {
 		JSONObject result = new JSONObject();
 		try {
 			JSONObject paramObject = JSON.parseObject(param);
-			List<SceneDataValue> array = filter_and_page(paramObject);
+			List<SceneDataObject> array = filter_and_page(paramObject);
 			if (paramObject.containsKey("count")) {
 			} else {
 				int pageSize = Integer.MAX_VALUE;
@@ -333,10 +333,11 @@ public class RestUtil {
 					pageSize = (Integer) paramObject.get("pageSize");
 					pageIndex = (Integer) paramObject.get("pageIndex");
 				}
-				SceneDataValue sdv = new SceneDataValue(null, null, null, null, false);
-				sdv.value_array = new ArrayList<SceneDataBase>();
+				SceneDataValue sdv = new SceneDataValue(null, null, null, null);
+				sdv.value_array = new SceneDataSet(false);
+				sdv.value_array.set = new ArrayList<SceneDataObject>();
 				for (int i = pageSize * pageIndex; i < pageSize * (pageIndex + 1) && i < array.size(); i++) {
-					sdv.value_array.add(array.get(i).value_object);
+					sdv.value_array.set.add(array.get(i));
 				}
 				int read_level = 0;
 				JSONArray content = (JSONArray) sdv.toJSON(true, read_level == 0 ? -1 : read_level);
@@ -357,8 +358,7 @@ public class RestUtil {
 		return result.toJSONString();
 	}
 
-	@SuppressWarnings("unchecked")
-	private static List<SceneDataValue> filter_and_page(JSONObject paramObject) throws Exception {
+	private static List<SceneDataObject> filter_and_page(JSONObject paramObject) throws Exception {
 		Repository Repository = RepositoryBase.instance;
 		JSONArray path = (JSONArray) paramObject.get("path");
 		String[] valuePath = new String[path.size()];
@@ -378,39 +378,42 @@ public class RestUtil {
 		List<String> refPropertyList = new ArrayList<String>();
 		JSONObject CriteriaNew = parseCriteria(CriteriaObject, params, refPropertyList);
 
-		List<SceneDataValue> targetSet = new ArrayList<SceneDataValue>();
-		for (SceneDataBase sdb : valueObject.value_array) {
+		SceneDataSet targetSet = new SceneDataSet(false);
+		targetSet.set = new ArrayList<SceneDataObject>();
+		for (SceneDataObject sdb : valueObject.value_array.set) {
 			if (sdb instanceof SceneDataObject) {
 				SceneDataObject sdo = (SceneDataObject) sdb;
-				SceneDataValue sdv = new SceneDataValue(null, null, null, null, false);
-				sdv.value_object = sdo;
-				targetSet.add(sdv);
+				targetSet.set.add(sdo);
 			}
 		}
 		SceneDataObject parentData = new SceneDataObject(null, null, null, null, null, null, null);
 		for (String key : params.keySet()) {
 			Object value = params.get(key);
-			SceneDataValue svInner = new SceneDataValue(null, parentData, key, null, false);
+			SceneDataValue svInner = new SceneDataValue(null, parentData, key, null);
 			if (value instanceof JSONArray) {
-				svInner.value_array = new ArrayList<SceneDataBase>();
+				svInner.value_array = new SceneDataSet(true);
+				svInner.value_array.singleValueSet = new ArrayList<SceneDataValue>();
 				JSONArray valueArray = (JSONArray) value;
 				for (int i = 0; i < valueArray.size(); i++) {
 					Object valueItem = valueArray.get(i);
-					SceneDataValue svInner2 = new SceneDataValue(null, null, null, null, false);
-					svInner2.value_primitive = valueItem;
-					svInner.value_array.add(svInner2);
+					SceneDataValue svInner2 = new SceneDataValue(null, null, null, null);
+					svInner2.value_prim = new SceneDataPrimitive();
+					svInner2.value_prim.value = valueItem;
+					svInner.value_array.singleValueSet.add(svInner2);
 				}
 			} else {
-				svInner.value_primitive = value;
+				svInner.value_prim = new SceneDataPrimitive();
+				svInner.value_prim.value = value;
 			}
 			parentData.put(key, svInner);
 		}
-		SceneDataValue sv = new SceneDataValue(Repository, parentData, valueObject.rel_property.propertyName, valueObject.rel_property, false);
+		// SceneDataValue sv = new SceneDataValue(Repository, parentData, valueObject.rel_property.propertyName, valueObject.rel_property);
+		SceneDataValue sv = new SceneDataValue(Repository, parentData, valueObject.rel_property.propertyName, null);
 		JSONObject sql_json = JSON.parseObject(filter_rule);
 		sql_json.put("Criteria", CriteriaNew);
-		List<SceneDataValue> array = (List<SceneDataValue>) QueryUtil.QueryInner(Repository, sv, sql_json, targetSet);
+		SceneDataSet array = (SceneDataSet) QueryUtil.QueryInner(Repository, sv, sql_json, targetSet);
 
-		return array;
+		return array.set;
 	}
 
 	private static JSONObject parseCriteria(JSONObject CriteriaObject, JSONObject params, List<String> criteriaList) throws Exception {

+ 2 - 2
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/CompareUtil.java

@@ -27,8 +27,8 @@ public class CompareUtil {
 			return false;
 		}
 
-		Object value1 = sdv1.value_primitive != null ? sdv1.value_primitive : (sdv1.value_object != null ? sdv1.value_object : sdv1.value_array);
-		Object value2 = sdv2.value_primitive != null ? sdv2.value_primitive : (sdv2.value_object != null ? sdv2.value_object : sdv2.value_array);
+		Object value1 = sdv1.value_prim.value != null ? sdv1.value_prim.value : (sdv1.value_object != null ? sdv1.value_object : sdv1.value_array);
+		Object value2 = sdv2.value_prim.value != null ? sdv2.value_prim.value : (sdv2.value_object != null ? sdv2.value_object : sdv2.value_array);
 		if (value1 == null && value2 == null) {
 			return true;
 		} else if (value1 == null && value2 != null) {

+ 63 - 86
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/ComputeUtil.java

@@ -8,16 +8,17 @@ import java.util.Map;
 import java.util.concurrent.locks.ReentrantLock;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.ibms.data.sdk.data.SceneDataBase;
 import com.persagy.ibms.data.sdk.data.SceneDataObject;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
 import com.persagy.ibms.data.sdk.data.SceneObject;
 import com.persagy.ibms.data.sdk.data.SceneProperty;
+import com.persagy.ibms.data.sdk.data.SceneDataPrimitive;
+import com.persagy.ibms.data.sdk.data.SceneDataSet;
 import com.sagacloud.ExpressionUtil;
 import com.sagacloud.advanced.expression.AdvancedExpressionScanner;
 import com.sagacloud.advanced.expression.AdvancedExpressionWalker;
+
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
@@ -327,9 +328,9 @@ public class ComputeUtil {
 						sb.append(ss.propertyName);
 					}
 					log.info("computeOnce:" + sb.toString());
-					// if (sb.toString().endsWith("-机房id")) {
-					// System.out.println();
-					// }
+					if (sb.toString().equals("基础对象-系统-清单-对象类型")) {
+						System.out.println();
+					}
 				}
 				// 打印路径
 				List<SceneDataValue> sdvList = Repository.property2SDV.get(spInner2);
@@ -340,108 +341,84 @@ public class ComputeUtil {
 		}
 	}
 
-	@SuppressWarnings("unchecked")
 	public static void computeProperty(Repository Repository, SceneDataValue sv) throws Exception {
 		SceneDataObject objectData = sv.parentObjectData;
 		SceneProperty sceneProperty = sv.rel_property;
 		if (sceneProperty.propertyValueType.equals("static")) {
-			Object fake_value = null;
-			if (RepositoryBase.query_simulate && sceneProperty.query_fake_value != null && sceneProperty.query_fake_value.length() > 0) {
-				fake_value = JSON.parse(sceneProperty.query_fake_value);
-			}
-
 			if (sv.rel_property.propertyValueSchema.equals("JSONObject")) {
-				if (fake_value != null && fake_value instanceof JSONObject) {
-					sv.value_object = RWDUtil.object2sod((JSONObject) fake_value);
-					sv.value_object.parentObjectData = sv.parentObjectData;
-					sv.value_object.myPropertyName = sv.myPropertyName;
-				} else {
-					throw new Exception();
-				}
 				sv.finish = true;
 			} else if (sv.rel_property.propertyValueSchema.equals("JSONArray")) {
-				if (fake_value != null && fake_value instanceof JSONArray) {
-					RWDUtil.array2SDV((JSONArray) fake_value, sv);
-					sv.finish = true;
-				} else {
-					boolean finish = true;
-					for (SceneDataBase sdbInner : sv.value_array) {
-						if (sdbInner instanceof SceneDataObject) {
-							SceneDataObject SODInner = (SceneDataObject) sdbInner;
-							for (String keySOD : SODInner.keySet()) {
-								SceneDataValue SVInner = SODInner.get(keySOD);
-								if (!SVInner.finish) {
-									finish = false;
-									break;
-								}
-							}
-							if (!finish) {
+				boolean finish = true;
+				for (SceneDataObject sdbInner : sv.value_array.set) {
+					if (sdbInner instanceof SceneDataObject) {
+						SceneDataObject SODInner = (SceneDataObject) sdbInner;
+						for (String keySOD : SODInner.keySet()) {
+							SceneDataValue SVInner = SODInner.get(keySOD);
+							if (!SVInner.finish) {
+								finish = false;
 								break;
 							}
 						}
+						if (!finish) {
+							break;
+						}
 					}
-					if (finish) {
-						sv.finish = true;
-					}
+				}
+				if (finish) {
+					sv.finish = true;
 				}
 			} else {
-				sv.value_primitive = QueryUtil.parse_static(sceneProperty.propertyValueSchema, sceneProperty.static_value);
+				sv.value_prim = new SceneDataPrimitive();
+				sv.value_prim.value = QueryUtil.parse_static(sceneProperty.propertyValueSchema, sceneProperty.static_value);
+				sv.value_prim.change = false;
 				sv.finish = true;
 			}
 		} else if (sceneProperty.propertyValueType.equals("query")) {
-			Object queryResult;
-			if (RepositoryBase.query_simulate && sceneProperty.query_fake_value != null && sceneProperty.query_fake_value.length() > 0) {
-				Object parseObject = JSON.parse(sceneProperty.query_fake_value);
-				queryResult = RWDUtil.array2SDVList((JSONArray) parseObject);
-			} else {
-				JSONObject sql_json = (JSONObject) JSON.parse(sceneProperty.query_sql);
-				queryResult = QueryUtil.query(Repository, sv, sql_json, new QueryAssist());
-			}
+			JSONObject sql_json = (JSONObject) JSON.parse(sceneProperty.query_sql);
+			Object queryResult = QueryUtil.query(Repository, sv, sql_json, new QueryAssist());
 			if (sceneProperty.propertyValueSchema.equals("JSONObject")) {
 				// 结果集的聚合选择等等
 				SceneDataObject queryResultObject = null;
 				if (queryResult instanceof SceneDataObject) {
 					queryResultObject = (SceneDataObject) queryResult;
-				} else if (queryResult instanceof List) {
-					List<SceneDataValue> queryResultArray = (List<SceneDataValue>) queryResult;
-					if (queryResultArray.size() == 1) {
-						queryResultObject = queryResultArray.get(0).value_object;
+				} else if (queryResult instanceof SceneDataSet) {
+					SceneDataSet queryResultArray = (SceneDataSet) queryResult;
+					if (queryResultArray.set.size() == 1) {
+						queryResultObject = queryResultArray.set.get(0);
 					}
 				}
-				if (queryResultObject != null) {
-					sv.value_object = new SceneDataObject(Repository, objectData, sceneProperty.propertyName, null, null,
-							sceneProperty.query_attached, queryResultObject);
-				}
+				sv.value_object = new SceneDataObject(Repository, objectData, sceneProperty.propertyName, null, null, sceneProperty.query_attached,
+						queryResultObject);
 			} else if (sceneProperty.propertyValueSchema.equals("JSONArray")) {
-				sv.value_array = new ArrayList<SceneDataBase>();
-				List<SceneDataValue> array = (List<SceneDataValue>) queryResult;
-				for (int i = 0; i < array.size(); i++) {
-					SceneDataValue arrayItem = array.get(i);
-					if (arrayItem.value_object != null) {
-						SceneDataObject queryResultObject = arrayItem.value_object;
-						SceneDataObject sod = new SceneDataObject(Repository, null, null, sv, null, sceneProperty.query_attached, queryResultObject);
-						sv.value_array.add(sod);
-					} else {
-						SceneDataValue sdvInner = new SceneDataValue(Repository, null, null, null, false);
-						sdvInner.value_primitive = arrayItem.value_primitive;
-						sv.value_array.add(sdvInner);
+				SceneDataSet array = (SceneDataSet) queryResult;
+				if (array.isSingleValueSet) {
+					sv.value_array = new SceneDataSet(true);
+					for (int i = 0; i < array.singleValueSet.size(); i++) {
+						SceneDataValue arrayItem = array.singleValueSet.get(i);
+						SceneDataValue sod = new SceneDataValue(Repository, null, null, null);
+						sod.value_prim = new SceneDataPrimitive();
+						sod.value_prim.value = arrayItem.value_prim.value;
+						sv.value_array.singleValueSet.add(sod);
+					}
+				} else {
+					sv.value_array = new SceneDataSet(false);
+					for (int i = 0; i < array.set.size(); i++) {
+						SceneDataObject arrayItem = array.set.get(i);
+						SceneDataObject sod = new SceneDataObject(Repository, null, null, sv, null, sceneProperty.query_attached, arrayItem);
+						sv.value_array.set.add(sod);
 					}
 				}
 			} else {
 				// 计算并放入objectData中
-				if (queryResult instanceof List) {
-					List<SceneDataValue> sdvListInner = (List<SceneDataValue>) queryResult;
-					if (sdvListInner.size() == 0) {
-					} else if (sdvListInner.size() == 1) {
-						sv.value_primitive = sdvListInner.get(0).value_primitive;
+				if (queryResult instanceof SceneDataSet) {
+					SceneDataSet sdvListInner = (SceneDataSet) queryResult;
+					if (sdvListInner.singleValueSet.size() == 0) {
+					} else if (sdvListInner.singleValueSet.size() == 1) {
+						sv.value_prim = sdvListInner.singleValueSet.get(0).value_prim;
 					} else {
-						sv.value_primitive = queryResult;
 					}
 				} else {
-					sv.value_primitive = queryResult;
-				}
-				if (sv.value_primitive == null && sv.rel_property != null && sv.rel_property.static_value != null) {
-					sv.value_primitive = QueryUtil.parse_static(sv.rel_property.propertyValueSchema, sv.rel_property.static_value);
+					sv.value_prim = (SceneDataPrimitive) queryResult;
 				}
 			}
 			sv.finish = true;
@@ -457,8 +434,8 @@ public class ComputeUtil {
 			for (String key : Criteria.keySet()) {
 				JSONObject CriteriaItemValue = (JSONObject) Criteria.get(key);
 				String refString = (String) CriteriaItemValue.get("ref");
-				List<SceneDataValue> sdvList = QueryUtil.parseSetRef(Repository, sv, refString, new QueryAssist());
-				for (SceneDataValue sdvInner : sdvList) {
+				SceneDataSet sdvList = QueryUtil.parseSetRef(Repository, sv, refString, new QueryAssist(), false);
+				for (SceneDataObject sdvInner : sdvList.set) {
 					String point = RepositoryBase.sdv2point.get(sdvInner);
 					pointList.add(point);
 				}
@@ -480,17 +457,17 @@ public class ComputeUtil {
 					if (index < valuePath.length - 1) {
 						index++;
 						SceneDataObject matchItem = null;
-						for (SceneDataBase sdbInner : currData.value_array) {
+						for (SceneDataObject sdbInner : currData.value_array.set) {
 							SceneDataObject sodInner = (SceneDataObject) sdbInner;
-							if (sodInner.containsKey("id") && sodInner.get("id").value_primitive.equals(valuePath[index])) {
+							if (sodInner.containsKey("id") && sodInner.get("id").value_prim.value.equals(valuePath[index])) {
 								matchItem = sodInner;
 								break;
 							}
 						}
 						if (matchItem == null) {
-							for (SceneDataBase sdbInner : currData.value_array) {
+							for (SceneDataObject sdbInner : currData.value_array.set) {
 								SceneDataObject sodInner = (SceneDataObject) sdbInner;
-								if (sodInner.containsKey("名称") && sodInner.get("名称").value_primitive.equals(valuePath[index])) {
+								if (sodInner.containsKey("名称") && sodInner.get("名称").value_prim.value.equals(valuePath[index])) {
 									matchItem = sodInner;
 									break;
 								}
@@ -507,17 +484,17 @@ public class ComputeUtil {
 					if (index < valuePath.length - 1) {
 						index++;
 						SceneDataObject matchItem = null;
-						for (SceneDataBase sdbInner : currData.value_array) {
+						for (SceneDataObject sdbInner : currData.value_array.set) {
 							SceneDataObject sodInner = (SceneDataObject) sdbInner;
-							if (sodInner.containsKey("id") && sodInner.get("id").value_primitive.equals(valuePath[index])) {
+							if (sodInner.containsKey("id") && sodInner.get("id").value_prim.value.equals(valuePath[index])) {
 								matchItem = sodInner;
 								break;
 							}
 						}
 						if (matchItem == null) {
-							for (SceneDataBase sdbInner : currData.value_array) {
+							for (SceneDataObject sdbInner : currData.value_array.set) {
 								SceneDataObject sodInner = (SceneDataObject) sdbInner;
-								if (sodInner.containsKey("名称") && sodInner.get("名称").value_primitive.equals(valuePath[index])) {
+								if (sodInner.containsKey("名称") && sodInner.get("名称").value_prim.value.equals(valuePath[index])) {
 									matchItem = sodInner;
 									break;
 								}

+ 9 - 7
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/ControlUtil.java

@@ -4,9 +4,10 @@ import java.util.List;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.ibms.data.sdk.data.SceneDataBase;
 import com.persagy.ibms.data.sdk.data.SceneDataObject;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
+import com.persagy.ibms.data.sdk.data.SceneDataPrimitive;
+
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
@@ -37,7 +38,7 @@ public class ControlUtil {
 			SceneDataValue currData = (SceneDataValue) valueObject;
 			if (currData.value_array != null) {
 				SceneDataValue detail = currData.parentObjectData.get("详情");
-				setInner(Repository, detail, currData.value_array, infoValueSet);
+				setInner(Repository, detail, currData.value_array.set, infoValueSet);
 			} else if (currData.value_object != null) {
 				set(Repository, currData.value_object, infoValueSet);
 			} else {
@@ -53,7 +54,7 @@ public class ControlUtil {
 		if (object.containsKey("清单")) {
 			SceneDataValue list = object.get("清单");
 			SceneDataValue detail = object.get("详情");
-			setInner(Repository, detail, list.value_array, infoValueSet);
+			setInner(Repository, detail, list.value_array.set, infoValueSet);
 		} else {
 			setInner(Repository, object, infoValueSet);
 		}
@@ -66,13 +67,13 @@ public class ControlUtil {
 		post(points);
 	}
 
-	private static void setInner(Repository Repository, SceneDataValue detail, List<SceneDataBase> objectArray, JSONObject infoValueSet)
+	private static void setInner(Repository Repository, SceneDataValue detail, List<SceneDataObject> objectArray, JSONObject infoValueSet)
 			throws Exception {
 		if (detail != null) {
 			build_object(detail.value_object, infoValueSet);
 		}
 		JSONArray points = new JSONArray();
-		for (SceneDataBase object : objectArray) {
+		for (SceneDataObject object : objectArray) {
 			build_points(Repository, (SceneDataObject) object, infoValueSet, points);
 			build_object((SceneDataObject) object, infoValueSet);
 		}
@@ -80,7 +81,7 @@ public class ControlUtil {
 	}
 
 	private static void build_points(Repository Repository, SceneDataObject object, JSONObject infoValueSet, JSONArray points) {
-		String id = (String) object.get("id").value_primitive;
+		String id = (String) object.get("id").value_prim.value;
 		JSONObject obj = Repository.id2object.get(id);
 		for (String key : infoValueSet.keySet()) {
 			String infoValue = (String) obj.get(key);
@@ -101,7 +102,8 @@ public class ControlUtil {
 		for (String key : infoValueSet.keySet()) {
 			SceneDataValue sdv = object.get(key);
 			if (sdv != null) {
-				sdv.value_primitive = infoValueSet.get(key);
+				sdv.value_prim = new SceneDataPrimitive();
+				sdv.value_prim.value = infoValueSet.get(key);
 			}
 		}
 	}

+ 15 - 12
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/DataUtil.java

@@ -5,25 +5,26 @@ import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
 
-import com.persagy.ibms.data.sdk.data.SceneDataBase;
 import com.persagy.ibms.data.sdk.data.SceneDataObject;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
+import com.persagy.ibms.data.sdk.data.SceneDataPrimitive;
+
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
 public class DataUtil {
-	public static List<SceneDataBase> avg(List<List<SceneDataBase>> dataListList) throws Exception {
-		List<SceneDataBase> result = new ArrayList<SceneDataBase>();
+	public static List<SceneDataObject> avg(List<List<SceneDataObject>> dataListList) throws Exception {
+		List<SceneDataObject> result = new ArrayList<SceneDataObject>();
 		int[] indexs = new int[dataListList.size()];
 		while (true) {
 			String data_time_min = null;
 			int min_index = -1;
 			for (int i = 0; i < dataListList.size(); i++) {
-				List<SceneDataBase> dataListInner = dataListList.get(i);
+				List<SceneDataObject> dataListInner = dataListList.get(i);
 				if (indexs[i] < dataListInner.size()) {
 					SceneDataObject datainner = (SceneDataObject) dataListInner.get(indexs[i]);
 					SceneDataValue sdvInner = datainner.get("data_time");
-					String data_time = (String) sdvInner.value_primitive;
+					String data_time = (String) sdvInner.value_prim.value;
 					if (data_time_min == null || data_time_min.compareTo(data_time) > 0) {
 						data_time_min = data_time;
 						min_index = i;
@@ -38,22 +39,24 @@ public class DataUtil {
 			int totalCount = 0;
 			double totalValue = 0.0;
 			for (int i = 0; i < dataListList.size(); i++) {
-				List<SceneDataBase> dataListInner = dataListList.get(i);
+				List<SceneDataObject> dataListInner = dataListList.get(i);
 				if (indexs[i] < dataListInner.size()) {
 					SceneDataObject datainner = (SceneDataObject) dataListInner.get(indexs[i]);
 					SceneDataValue sdvInner = datainner.get("data_time");
-					String data_time = (String) sdvInner.value_primitive;
+					String data_time = (String) sdvInner.value_prim.value;
 					if (data_time.equals(data_time_min)) {
 						totalCount++;
-						totalValue += DataUtil.primitive2double(datainner.get("data_value").value_primitive);
+						totalValue += DataUtil.primitive2double(datainner.get("data_value").value_prim.value);
 						indexs[i]++;
 					}
 				}
 			}
-			SceneDataValue data_time = new SceneDataValue(null, null, null, null, false);
-			data_time.value_primitive = data_time_min;
-			SceneDataValue data_value = new SceneDataValue(null, null, null, null, false);
-			data_value.value_primitive = totalValue / totalCount;
+			SceneDataValue data_time = new SceneDataValue(null, null, null, null);
+			data_time.value_prim = new SceneDataPrimitive();
+			data_time.value_prim.value = data_time_min;
+			SceneDataValue data_value = new SceneDataValue(null, null, null, null);
+			data_value.value_prim = new SceneDataPrimitive();
+			data_value.value_prim.value = totalValue / totalCount;
 			avgData.put("data_time", data_time);
 			avgData.put("data_value", data_value);
 			result.add(avgData);

+ 14 - 14
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/DeamonUtil.java

@@ -10,9 +10,9 @@ import java.util.Map;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.ibms.data.sdk.data.SceneDataBase;
 import com.persagy.ibms.data.sdk.data.SceneDataObject;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
+
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
@@ -63,16 +63,16 @@ public class DeamonUtil {
 		for (SceneDataValue sdv : Repository.deamon_sdv2pointList.keySet()) {
 			JSONObject sql_json = (JSONObject) JSON.parse(sdv.rel_property.query_sql);
 			String QueryType = (String) sql_json.get("QueryType");
-			List<SceneDataBase> dataList;
+			List<SceneDataObject> dataList;
 			List<String> pointList = Repository.deamon_sdv2pointList.get(sdv);
 			if (pointList.size() == 0) {
 				continue;
 			} else if (pointList.size() == 1) {
 				dataList = RepositoryBase.point2curve.get(pointList.get(0));
 			} else {
-				List<List<SceneDataBase>> dataListList = new ArrayList<List<SceneDataBase>>();
+				List<List<SceneDataObject>> dataListList = new ArrayList<List<SceneDataObject>>();
 				for (String point : pointList) {
-					List<SceneDataBase> dataListInner = RepositoryBase.point2curve.get(point);
+					List<SceneDataObject> dataListInner = RepositoryBase.point2curve.get(point);
 					dataListList.add(dataListInner);
 				}
 				dataList = DataUtil.avg(dataListList);
@@ -80,23 +80,23 @@ public class DeamonUtil {
 			if (QueryType.equals("trend")) {
 				if (dataList.size() >= 3) {
 					double dataLast1 = DataUtil
-							.primitive2double(((SceneDataObject) dataList.get(dataList.size() - 1)).get("data_value").value_primitive);
+							.primitive2double(((SceneDataObject) dataList.get(dataList.size() - 1)).get("data_value").value_prim.value);
 					double dataLast2 = DataUtil
-							.primitive2double(((SceneDataObject) dataList.get(dataList.size() - 2)).get("data_value").value_primitive);
+							.primitive2double(((SceneDataObject) dataList.get(dataList.size() - 2)).get("data_value").value_prim.value);
 					double dataLast3 = DataUtil
-							.primitive2double(((SceneDataObject) dataList.get(dataList.size() - 3)).get("data_value").value_primitive);
+							.primitive2double(((SceneDataObject) dataList.get(dataList.size() - 3)).get("data_value").value_prim.value);
 					if (dataLast1 - dataLast2 > 0.1 && dataLast1 - dataLast3 > 0.1) {
-						sdv.value_primitive = 1;
+						sdv.value_prim.value = 1;
 					} else if (dataLast1 - dataLast2 < -0.1 && dataLast1 - dataLast3 < -0.1) {
-						sdv.value_primitive = -1;
+						sdv.value_prim.value = -1;
 					} else {
-						sdv.value_primitive = 0;
+						sdv.value_prim.value = 0;
 					}
 				} else {
-					sdv.value_primitive = 0;
+					sdv.value_prim.value = 0;
 				}
 			} else if (QueryType.equals("curve")) {
-				sdv.value_array = dataList;
+				sdv.value_array.set = dataList;
 			}
 		}
 		log.info("deamon finish");
@@ -119,9 +119,9 @@ public class DeamonUtil {
 			String meter = point.getString("meter");
 			int funcid = point.getIntValue("funcid");
 			JSONArray datas = (JSONArray) point.get("datas");
-			SceneDataValue sv = new SceneDataValue(null, null, null, null, false);
+			SceneDataValue sv = new SceneDataValue(null, null, null, null);
 			RWDUtil.array2SDV(datas, sv);
-			RepositoryBase.point2curve.put(meter + "-" + funcid, sv.value_array);
+			RepositoryBase.point2curve.put(meter + "-" + funcid, sv.value_array.set);
 		}
 	}
 }

+ 17 - 17
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/FastJsonUtil.java

@@ -325,27 +325,27 @@ public class FastJsonUtil {
 			if (modifiers == 1 && methodName.startsWith("set")) {
 				Class<?>[] parameterTypes = method.getParameterTypes();
 				if (parameterTypes.length == 1) {
-					//自适应大小写
+					// 自适应大小写
 					{
-					String fieldName = methodName.substring(3);
-					fieldName = fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1);
-					Class<?> paramClass = parameterTypes[0];
-					if (json.containsKey(fieldName)) {
-						Object sourceFieldValue = json.get(fieldName);
-						Object targetFieldValue = To_JavaObject(sourceFieldValue, paramClass);
+						String fieldName = methodName.substring(3);
+						fieldName = fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1);
+						Class<?> paramClass = parameterTypes[0];
+						if (json.containsKey(fieldName)) {
+							Object sourceFieldValue = json.get(fieldName);
+							Object targetFieldValue = To_JavaObject(sourceFieldValue, paramClass);
 
-						method.invoke(entity, new Object[] { targetFieldValue });
-					}
+							method.invoke(entity, new Object[] { targetFieldValue });
+						}
 					}
 					{
-					String fieldName = methodName.substring(3);
-					Class<?> paramClass = parameterTypes[0];
-					if (json.containsKey(fieldName)) {
-						Object sourceFieldValue = json.get(fieldName);
-						Object targetFieldValue = To_JavaObject(sourceFieldValue, paramClass);
+						String fieldName = methodName.substring(3);
+						Class<?> paramClass = parameterTypes[0];
+						if (json.containsKey(fieldName)) {
+							Object sourceFieldValue = json.get(fieldName);
+							Object targetFieldValue = To_JavaObject(sourceFieldValue, paramClass);
 
-						method.invoke(entity, new Object[] { targetFieldValue });
-					}
+							method.invoke(entity, new Object[] { targetFieldValue });
+						}
 					}
 				}
 			}
@@ -437,7 +437,7 @@ public class FastJsonUtil {
 				if (modifiers == 1 && methodName.startsWith("set")) {
 					Class<?>[] parameterTypes = method.getParameterTypes();
 					if (parameterTypes.length == 1) {
-						//自适应大小写
+						// 自适应大小写
 						{
 							String fieldName = methodName.substring(3);
 							fieldName = fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1);

文件差异内容过多而无法显示
+ 577 - 200
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/QueryUtil.java


+ 24 - 21
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDAlarmUtil.java

@@ -6,8 +6,9 @@ import java.util.List;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.ibms.data.sdk.data.SceneDataBase;
 import com.persagy.ibms.data.sdk.data.SceneDataObject;
+import com.persagy.ibms.data.sdk.data.SceneDataPrimitive;
+import com.persagy.ibms.data.sdk.data.SceneDataSet;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
 
 public class RWDAlarmUtil {
@@ -29,13 +30,17 @@ public class RWDAlarmUtil {
 			SceneDataValue alarmList = RepositoryBase.id2alarmList.get(objId);
 			SceneDataValue alarmCount = RepositoryBase.id2alarmCount.get(objId);
 			if (alarmList == null) {
-				SceneDataValue sv_alarmList = new SceneDataValue(null, null, "报警列表", null, true);
-				sv_alarmList.value_array = new ArrayList<SceneDataBase>();
+				SceneDataValue sv_alarmList = new SceneDataValue(null, null, "报警列表", null);
+				sv_alarmList.value_array = new SceneDataSet(false);
+				sv_alarmList.value_array.set = new ArrayList<SceneDataObject>();
+				sv_alarmList.value_array.setRowChange(true);
 				RepositoryBase.id2alarmList.putIfAbsent(objId, sv_alarmList);
 			}
 			if (alarmCount == null) {
-				SceneDataValue sv_alarmCount = new SceneDataValue(null, null, "报警数量", null, true);
-				sv_alarmCount.value_primitive = 0;
+				SceneDataValue sv_alarmCount = new SceneDataValue(null, null, "报警数量", null);
+				sv_alarmCount.value_prim = new SceneDataPrimitive();
+				sv_alarmCount.value_prim.value = 0;
+				sv_alarmCount.value_prim.change = true;
 				RepositoryBase.id2alarmCount.putIfAbsent(objId, sv_alarmCount);
 			}
 			alarmList = RepositoryBase.id2alarmList.get(objId);
@@ -43,46 +48,44 @@ public class RWDAlarmUtil {
 
 			// 从设备下删除
 			int existIndex = -1;
-			for (int i = 0; i < alarmList.value_array.size(); i++) {
-				SceneDataObject sdoInner = (SceneDataObject) alarmList.value_array.get(i);
-				String idInner = (String) sdoInner.get("id").value_primitive;
+			for (int i = 0; i < alarmList.value_array.set.size(); i++) {
+				SceneDataObject sdoInner = (SceneDataObject) alarmList.value_array.set.get(i);
+				String idInner = (String) sdoInner.get("id").value_prim.value;
 				if (idInner.equals(id)) {
 					existIndex = i;
 					break;
 				}
 			}
 			if (existIndex != -1) {
-				alarmList.value_array.remove(existIndex);
+				alarmList.value_array.set.remove(existIndex);
 			}
 			// 从报警列表下删除
 			List<Integer> removeIndexList = new ArrayList<Integer>();
-			for (int index_alarm = 0; index_alarm < RepositoryBase.alarmArray.size(); index_alarm++) {
-				SceneDataValue alarmItem = RepositoryBase.alarmArray.get(index_alarm);
-				if (alarmItem.value_object.get("id").value_primitive.equals(id)) {
+			for (int index_alarm = 0; index_alarm < RepositoryBase.alarmArray.set.size(); index_alarm++) {
+				SceneDataObject alarmItem = RepositoryBase.alarmArray.set.get(index_alarm);
+				if (alarmItem.value_object.get("id").value_prim.value.equals(id)) {
 					removeIndexList.add(0, index_alarm);
 				}
 			}
 			for (int removeIndex : removeIndexList) {
-				RepositoryBase.alarmArray.remove(removeIndex);
+				RepositoryBase.alarmArray.set.remove(removeIndex);
 			}
 
 			if (!treatState.equals("3")) {
 				SceneDataObject sodInner = RWDUtil.object2sod(alarm);
-				alarmList.value_array.add(sodInner);
-				SceneDataValue sdvInner = new SceneDataValue(null, null, null, null, false);
-				sdvInner.value_object = sodInner;
-				RepositoryBase.alarmArray.add(sdvInner);
+				alarmList.value_array.set.add(sodInner);
+				RepositoryBase.alarmArray.set.add(sodInner);
 			}
-			alarmCount.value_primitive = alarmList.value_array.size();
+			alarmCount.value_prim.value = alarmList.value_array.set.size();
 		}
 	}
 
 	public static synchronized int refresh() throws Exception {
-		RepositoryBase.alarmArray.clear();
+		RepositoryBase.alarmArray.set.clear();
 		String[] objIds = RepositoryBase.id2alarmList.keySet().toArray(new String[0]);
 		for (String objId : objIds) {
-			RepositoryBase.id2alarmList.get(objId).value_array.clear();
-			RepositoryBase.id2alarmCount.get(objId).value_primitive = 0;
+			RepositoryBase.id2alarmList.get(objId).value_array.set.clear();
+			RepositoryBase.id2alarmCount.get(objId).value_prim.value = 0;
 		}
 
 		String post_url = Constant.alarm_rest + "/alarm/queryAlarmList";

+ 112 - 98
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDLoadUtil.java

@@ -9,8 +9,9 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.ibms.data.sdk.data.SceneDataBase;
 import com.persagy.ibms.data.sdk.data.SceneDataObject;
+import com.persagy.ibms.data.sdk.data.SceneDataPrimitive;
+import com.persagy.ibms.data.sdk.data.SceneDataSet;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
 
 import lombok.extern.slf4j.Slf4j;
@@ -60,7 +61,7 @@ public class RWDLoadUtil {
 		{
 			File root = new File(infoPath);
 			File[] files = root.listFiles();
-			Map<String, List<SceneDataValue>> infoArrayDic = new HashMap<String, List<SceneDataValue>>();
+			Map<String, SceneDataSet> infoArrayDic = new HashMap<String, SceneDataSet>();
 			for (File file : files) {
 				int index_ = file.getName().indexOf('.');
 				String code = file.getName().substring(0, index_);
@@ -81,7 +82,9 @@ public class RWDLoadUtil {
 							array.add(info);
 						}
 					}
-					infoArrayDic.put(code, RWDUtil.array2SDVList(array));
+					SceneDataSet SceneDataSet = new SceneDataSet(false);
+					SceneDataSet.set = RWDUtil.array2SDOList(array);
+					infoArrayDic.put(code, SceneDataSet);
 				} catch (Exception e) {
 					log.warn(e.getMessage(), e);
 				}
@@ -93,7 +96,7 @@ public class RWDLoadUtil {
 		{
 			File root = new File(objectPath);
 			File[] files = root.listFiles();
-			Map<String, List<SceneDataValue>> objectArrayDic = new HashMap<String, List<SceneDataValue>>();
+			Map<String, SceneDataSet> objectArrayDic = new HashMap<String, SceneDataSet>();
 			for (File file : files) {
 				int index_ = file.getName().indexOf('.');
 				String code = file.getName().substring(0, index_);
@@ -127,38 +130,39 @@ public class RWDLoadUtil {
 					arrayItem.put("数据字典类型名称", className);
 					Repository.id2object.put(id, arrayItem);
 				}
-				List<SceneDataValue> sdvList = RWDUtil.array2SDVList(array);
-				Repository.objectArrayAll.addAll(sdvList);
-				for (SceneDataValue sdv : sdvList) {
-					String id = (String) sdv.value_object.get("id").value_primitive;
+				SceneDataSet SceneDataSet = new SceneDataSet(false);
+				SceneDataSet.set = RWDUtil.array2SDOList(array);
+				Repository.objectArrayAll.set.addAll(SceneDataSet.set);
+				for (SceneDataObject sdv : SceneDataSet.set) {
+					String id = (String) sdv.value_object.get("id").value_prim.value;
 					Repository.id2sdv.put(id, sdv);
 				}
 				// 一级对象
 				if (Repository.objTypeMap.containsKey(code)) {
 					if (Repository.objTypeMap.get(code)) {
-						objectArrayDic.put(code + "-self", sdvList);
+						objectArrayDic.put(code + "-self", SceneDataSet);
 					} else {
-						objectArrayDic.put(code, sdvList);
+						objectArrayDic.put(code, SceneDataSet);
 					}
 				} else {
-					objectArrayDic.put(code, sdvList);
+					objectArrayDic.put(code, SceneDataSet);
 					String objType = Repository.code2objTypeMap.get(code);
 					if (!objectArrayDic.containsKey(objType)) {
-						objectArrayDic.put(objType, new ArrayList<SceneDataValue>());
+						objectArrayDic.put(objType, new SceneDataSet(false));
 					}
-					objectArrayDic.get(objType).addAll(sdvList);
+					objectArrayDic.get(objType).set.addAll(SceneDataSet.set);
 				}
 			}
 			Repository.objectArrayDic = objectArrayDic;
 		}
 
 		{
-			Map<String, Map<String, SceneDataValue>> objType2id2Value = new HashMap<String, Map<String, SceneDataValue>>();
+			Map<String, Map<String, SceneDataObject>> objType2id2Value = new HashMap<String, Map<String, SceneDataObject>>();
 			for (String objType : Constant.objType_hasRelation.keySet()) {
-				Map<String, SceneDataValue> id2Value = new HashMap<String, SceneDataValue>();
-				List<SceneDataValue> sdvList = Repository.objectArrayDic.get(objType);
-				for (SceneDataValue sdv : sdvList) {
-					String id = (String) sdv.value_object.get("id").value_primitive;
+				Map<String, SceneDataObject> id2Value = new HashMap<String, SceneDataObject>();
+				SceneDataSet sdvList = Repository.objectArrayDic.get(objType);
+				for (SceneDataObject sdv : sdvList.set) {
+					String id = (String) sdv.value_object.get("id").value_prim.value;
 					id2Value.put(id, sdv);
 				}
 				objType2id2Value.put(objType, id2Value);
@@ -168,19 +172,21 @@ public class RWDLoadUtil {
 
 		String relationPath = validPath + Constant.getSeperator() + "relation";
 		{
-			Map<String, Map<String, List<SceneDataValue>>> relationArrayDic = new HashMap<String, Map<String, List<SceneDataValue>>>();
+			Map<String, Map<String, SceneDataSet>> relationArrayDic = new HashMap<String, Map<String, SceneDataSet>>();
 			File root = new File(relationPath);
 			File[] dirs = root.listFiles();
 			for (File dir : dirs) {
 				File[] files = dir.listFiles();
-				Map<String, List<SceneDataValue>> oneDic = new HashMap<String, List<SceneDataValue>>();
+				Map<String, SceneDataSet> oneDic = new HashMap<String, SceneDataSet>();
 				for (File file : files) {
 					int index_ = file.getName().indexOf('.');
 					String code = file.getName().substring(0, index_);
 					log.info(relationPath + Constant.getSeperator() + "" + dir.getName() + Constant.getSeperator() + file.getName());
 					JSONArray array = FastJsonReaderUtil.Instance().ReadJSONArray(
 							new File(relationPath + Constant.getSeperator() + "" + dir.getName() + Constant.getSeperator() + file.getName()));
-					oneDic.put(code, RWDUtil.array2SDVList(array));
+					SceneDataSet SceneDataSet = new SceneDataSet(false);
+					SceneDataSet.set = RWDUtil.array2SDOList(array);
+					oneDic.put(code, SceneDataSet);
 				}
 				relationArrayDic.put(dir.getName(), oneDic);
 			}
@@ -191,14 +197,14 @@ public class RWDLoadUtil {
 			if (Repository.objTypeMap.containsKey(classCode)) {
 				continue;
 			}
-			List<SceneDataValue> infoArray = Repository.infoArrayDic.get(classCode);
-			List<SceneDataValue> objectArray = Repository.objectArrayDic.get(classCode);
-			for (int index_object = 0; index_object < objectArray.size(); index_object++) {
-				SceneDataObject obj = objectArray.get(index_object).value_object;
-				String obj_id = (String) obj.get("id").value_primitive;
+			SceneDataSet infoArray = Repository.infoArrayDic.get(classCode);
+			SceneDataSet objectArray = Repository.objectArrayDic.get(classCode);
+			for (int index_object = 0; index_object < objectArray.set.size(); index_object++) {
+				SceneDataObject obj = objectArray.set.get(index_object);
+				String obj_id = (String) obj.get("id").value_prim.value;
 				for (String Key : obj.keySet()) {
-					Object value_primitive = obj.get(Key).value_primitive;
-					if (RWDUtil.isRunParam(infoArray, Key)) {
+					Object value_primitive = obj.get(Key).value_prim.value;
+					if (RWDUtil.isRunParam(infoArray.set, Key)) {
 						if (!(value_primitive instanceof String)) {
 							continue;
 						}
@@ -210,8 +216,9 @@ public class RWDLoadUtil {
 								pointMap.putIfAbsent(Key, point);
 								// 表号功能号改为null
 								{
-									SceneDataValue sdv = new SceneDataValue(Repository, obj, Key, null, true);
-									sdv.value_primitive = 0.0;
+									SceneDataValue sdv = new SceneDataValue(Repository, obj, Key, null);
+									sdv.value_prim = new SceneDataPrimitive();
+									sdv.value_prim.change = true;
 									SceneDataValue exist_sdv = RepositoryBase.point2sdv.putIfAbsent(point, sdv);
 									if (exist_sdv == null) {
 										RepositoryBase.sdv2point.putIfAbsent(sdv, point);
@@ -223,7 +230,7 @@ public class RWDLoadUtil {
 								obj.remove(Key);
 							}
 						}
-					} else if (RWDUtil.isSetParam(infoArray, Key)) {
+					} else if (RWDUtil.isSetParam(infoArray.set, Key)) {
 						if (!(value_primitive instanceof String)) {
 							continue;
 						}
@@ -232,8 +239,9 @@ public class RWDLoadUtil {
 							if (RWDLoadUtil.infoValue_is_point(point)) {
 								// 表号功能号改为null
 								{
-									SceneDataValue sdv = new SceneDataValue(Repository, obj, Key, null, true);
-									sdv.value_primitive = 0;
+									SceneDataValue sdv = new SceneDataValue(Repository, obj, Key, null);
+									sdv.value_prim = new SceneDataPrimitive();
+									sdv.value_prim.change = true;
 									SceneDataValue exist_sdv = RepositoryBase.set2sdv.putIfAbsent(point, sdv);
 									if (exist_sdv == null) {
 										RepositoryBase.sdv2set.putIfAbsent(sdv, point);
@@ -253,81 +261,83 @@ public class RWDLoadUtil {
 
 	public static void LoadReference(Repository Repository) throws Exception {
 		for (ConfigRelation ConfigRelation : Constant.ConfigRelationList) {
-			Map<String, SceneDataValue> fromMap = Repository.objType2id2Value.get(ConfigRelation.objFrom);
-			Map<String, SceneDataValue> toMap = Repository.objType2id2Value.get(ConfigRelation.objTo);
+			Map<String, SceneDataObject> fromMap = Repository.objType2id2Value.get(ConfigRelation.objFrom);
+			Map<String, SceneDataObject> toMap = Repository.objType2id2Value.get(ConfigRelation.objTo);
 			for (String key : fromMap.keySet()) {
-				SceneDataValue sdv = fromMap.get(key);
+				SceneDataObject sdv = fromMap.get(key);
 				if (!sdv.value_object.containsKey(ConfigRelation.nameInFrom)) {
-					SceneDataValue sdvInner = new SceneDataValue(Repository, sdv.value_object, ConfigRelation.nameInFrom, null, false);
+					SceneDataValue sdvInner = new SceneDataValue(Repository, sdv, ConfigRelation.nameInFrom, null);
 					sdv.value_object.put(ConfigRelation.nameInFrom, sdvInner);
 				}
 			}
 			for (String key : toMap.keySet()) {
-				SceneDataValue sdv = toMap.get(key);
+				SceneDataObject sdv = toMap.get(key);
 				if (!sdv.value_object.containsKey(ConfigRelation.nameInTo)) {
-					SceneDataValue sdvInner = new SceneDataValue(Repository, sdv.value_object, ConfigRelation.nameInTo, null, false);
+					SceneDataValue sdvInner = new SceneDataValue(Repository, sdv, ConfigRelation.nameInTo, null);
 					sdv.value_object.put(ConfigRelation.nameInTo, sdvInner);
 				}
 			}
 		}
 		for (ConfigRelation ConfigRelation : Constant.ConfigRelationList) {
-			List<SceneDataValue> sdvList = Repository.relationArrayDic.get(ConfigRelation.graphCode).get(ConfigRelation.relCode);
-			Map<String, SceneDataValue> fromMap = Repository.objType2id2Value.get(ConfigRelation.objFrom);
-			Map<String, SceneDataValue> toMap = Repository.objType2id2Value.get(ConfigRelation.objTo);
-			for (SceneDataValue sdv : sdvList) {
+			List<SceneDataObject> sdvList = Repository.relationArrayDic.get(ConfigRelation.graphCode).get(ConfigRelation.relCode).set;
+			Map<String, SceneDataObject> fromMap = Repository.objType2id2Value.get(ConfigRelation.objFrom);
+			Map<String, SceneDataObject> toMap = Repository.objType2id2Value.get(ConfigRelation.objTo);
+			for (SceneDataObject sdv : sdvList) {
 				if (ConfigRelation.relValue != null) {
 					if (sdv.value_object.get("relValue") == null) {
 						continue;
 					}
-					String relValue = (String) sdv.value_object.get("relValue").value_primitive;
+					String relValue = (String) sdv.value_object.get("relValue").value_prim.value;
 					if (!relValue.equals(ConfigRelation.relValue)) {
 						continue;
 					}
 				}
 
-				String objFrom = (String) sdv.value_object.get("objFrom").value_primitive;
-				String objTo = (String) sdv.value_object.get("objTo").value_primitive;
-				SceneDataValue fromObject = fromMap.get(objFrom);
-				SceneDataValue toObject = toMap.get(objTo);
+				String objFrom = (String) sdv.value_object.get("objFrom").value_prim.value;
+				String objTo = (String) sdv.value_object.get("objTo").value_prim.value;
+				SceneDataObject fromObject = fromMap.get(objFrom);
+				SceneDataObject toObject = toMap.get(objTo);
 				if (fromObject == null || toObject == null) {
 					continue;
 				}
 
 				SceneDataValue sdvFromItem = fromObject.value_object.get(ConfigRelation.nameInFrom);
 				if (sdvFromItem.value_array == null) {
-					sdvFromItem.value_array = new ArrayList<SceneDataBase>();
+					sdvFromItem.value_array = new SceneDataSet(false);
+					sdvFromItem.value_array.set = new ArrayList<SceneDataObject>();
 				}
 				SceneDataValue sdvToItem = toObject.value_object.get(ConfigRelation.nameInTo);
 				if (sdvToItem.value_array == null) {
-					sdvToItem.value_array = new ArrayList<SceneDataBase>();
+					sdvToItem.value_array = new SceneDataSet(false);
+					sdvToItem.value_array.set = new ArrayList<SceneDataObject>();
 				}
-				sdvFromItem.value_array.add(toObject.value_object);
-				sdvToItem.value_array.add(fromObject.value_object);
+				sdvFromItem.value_array.set.add(toObject);
+				sdvToItem.value_array.set.add(fromObject);
 			}
 		}
 		for (ConfigRelation ConfigRelation : Constant.ConfigRelationList) {
 			if (ConfigRelation.multiplicityFrom != null) {
-				Map<String, SceneDataValue> FromMap = Repository.objType2id2Value.get(ConfigRelation.objFrom);
+				Map<String, SceneDataObject> FromMap = Repository.objType2id2Value.get(ConfigRelation.objFrom);
 				for (String objFrom : FromMap.keySet()) {
-					SceneDataValue FromObject = FromMap.get(objFrom);
+					SceneDataObject FromObject = FromMap.get(objFrom);
 					SceneDataValue sdvFromItem = FromObject.value_object.get(ConfigRelation.nameInFrom);
 					if (sdvFromItem != null && sdvFromItem.value_array != null) {
 						if (ConfigRelation.multiplicityFrom.equalsIgnoreCase("1")) {
-							SceneDataValue sdvInner = new SceneDataValue(Repository, FromObject.value_object, ConfigRelation.nameInFrom + "-id", null,
-									false);
-							if (sdvFromItem.value_array.size() == 0) {
-							} else if (sdvFromItem.value_array.size() == 1) {
-								sdvInner.value_primitive = ((SceneDataObject) sdvFromItem.value_array.get(0)).get("id").value_primitive;
+							SceneDataValue sdvInner = new SceneDataValue(Repository, FromObject, ConfigRelation.nameInFrom + "-id", null);
+							sdvInner.value_prim = new SceneDataPrimitive();
+							if (sdvFromItem.value_array.set.size() == 0) {
+							} else if (sdvFromItem.value_array.set.size() == 1) {
+								sdvInner.value_prim.value = ((SceneDataObject) sdvFromItem.value_array.set.get(0)).get("id").value_prim.value;
 							} else {
-								for (SceneDataBase sdbInner : sdvFromItem.value_array) {
+								for (SceneDataObject sdbInner : sdvFromItem.value_array.set) {
 									SceneDataObject sdoInner = (SceneDataObject) sdbInner;
-									if (sdvInner.value_primitive == null) {
-										sdvInner.value_primitive = sdoInner.get("id").value_primitive;
+									if (sdvInner.value_prim.value == null) {
+										sdvInner.value_prim.value = sdoInner.get("id").value_prim.value;
 									} else {
-										if (!sdvInner.value_primitive.equals(sdoInner.get("id").value_primitive)) {
+										if (!sdvInner.value_prim.value.equals(sdoInner.get("id").value_prim.value)) {
 											log.error(ConfigRelation.graphCode + "\t" + ConfigRelation.relCode + "\t"
 													+ FromObject.value_object.get("id") + " " + "有多个" + " " + ConfigRelation.nameInFrom + "\t"
-													+ sdvInner.value_primitive + "\t" + sdoInner.get("id").value_primitive);
+													+ sdvInner.value_prim.value + "\t" + sdoInner.get("id").value_prim.value);
 											// TODO
 											// throw new Exception(ConfigRelation.graphCode + "\t" + ConfigRelation.relCode + "\t"
 											// + FromObject.value_object.get("id") + " " + "有多个" + " " + ConfigRelation.nameInFrom + "\t"
@@ -338,14 +348,15 @@ public class RWDLoadUtil {
 							}
 							FromObject.value_object.put(ConfigRelation.nameInFrom + "-id", sdvInner);
 						} else {
-							SceneDataValue sdvInner = new SceneDataValue(Repository, FromObject.value_object, ConfigRelation.nameInFrom + "-id清单",
-									null, false);
-							sdvInner.value_array = new ArrayList<SceneDataBase>();
-							for (SceneDataBase sdbInner : sdvFromItem.value_array) {
+							SceneDataValue sdvInner = new SceneDataValue(Repository, FromObject, ConfigRelation.nameInFrom + "-id清单", null);
+							sdvInner.value_array = new SceneDataSet(true);
+							sdvInner.value_array.singleValueSet = new ArrayList<SceneDataValue>();
+							for (SceneDataObject sdbInner : sdvFromItem.value_array.set) {
 								SceneDataObject sdoInner = (SceneDataObject) sdbInner;
-								SceneDataValue sdvOne = new SceneDataValue(Repository, null, null, null, false);
-								sdvOne.value_primitive = sdoInner.get("id").value_primitive;
-								sdvInner.value_array.add(sdvOne);
+								SceneDataValue sdvOne = new SceneDataValue(Repository, null, null, null);
+								sdvOne.value_prim = new SceneDataPrimitive();
+								sdvOne.value_prim.value = sdoInner.get("id").value_prim.value;
+								sdvInner.value_array.singleValueSet.add(sdvOne);
 							}
 							FromObject.value_object.put(ConfigRelation.nameInFrom + "-id清单", sdvInner);
 						}
@@ -353,27 +364,27 @@ public class RWDLoadUtil {
 				}
 			}
 			if (ConfigRelation.multiplicityTo != null) {
-				Map<String, SceneDataValue> ToMap = Repository.objType2id2Value.get(ConfigRelation.objTo);
+				Map<String, SceneDataObject> ToMap = Repository.objType2id2Value.get(ConfigRelation.objTo);
 				for (String objTo : ToMap.keySet()) {
-					SceneDataValue ToObject = ToMap.get(objTo);
+					SceneDataObject ToObject = ToMap.get(objTo);
 					SceneDataValue sdvToItem = ToObject.value_object.get(ConfigRelation.nameInTo);
 					if (sdvToItem != null && sdvToItem.value_array != null) {
 						if (ConfigRelation.multiplicityTo.equalsIgnoreCase("1")) {
-							SceneDataValue sdvInner = new SceneDataValue(Repository, ToObject.value_object, ConfigRelation.nameInTo + "-id", null,
-									false);
-							if (sdvToItem.value_array.size() == 0) {
-							} else if (sdvToItem.value_array.size() == 1) {
-								sdvInner.value_primitive = ((SceneDataObject) sdvToItem.value_array.get(0)).get("id").value_primitive;
+							SceneDataValue sdvInner = new SceneDataValue(Repository, ToObject, ConfigRelation.nameInTo + "-id", null);
+							sdvInner.value_prim = new SceneDataPrimitive();
+							if (sdvToItem.value_array.set.size() == 0) {
+							} else if (sdvToItem.value_array.set.size() == 1) {
+								sdvInner.value_prim.value = ((SceneDataObject) sdvToItem.value_array.set.get(0)).get("id").value_prim.value;
 							} else {
-								for (SceneDataBase sdbInner : sdvToItem.value_array) {
+								for (SceneDataObject sdbInner : sdvToItem.value_array.set) {
 									SceneDataObject sdoInner = (SceneDataObject) sdbInner;
-									if (sdvInner.value_primitive == null) {
-										sdvInner.value_primitive = sdoInner.get("id").value_primitive;
+									if (sdvInner.value_prim.value == null) {
+										sdvInner.value_prim.value = sdoInner.get("id").value_prim.value;
 									} else {
-										if (!sdvInner.value_primitive.equals(sdoInner.get("id").value_primitive)) {
+										if (!sdvInner.value_prim.value.equals(sdoInner.get("id").value_prim.value)) {
 											log.error(ConfigRelation.graphCode + "\t" + ConfigRelation.relCode + "\t"
 													+ ToObject.value_object.get("id") + " " + "有多个" + " " + ConfigRelation.nameInTo + "\t"
-													+ sdvInner.value_primitive + "\t" + sdoInner.get("id").value_primitive);
+													+ sdvInner.value_prim.value + "\t" + sdoInner.get("id").value_prim.value);
 											// TODO
 											// throw new Exception(ConfigRelation.graphCode + "\t" + ConfigRelation.relCode + "\t"
 											// + ToObject.value_object.get("id") + " " + "有多个" + " " + ConfigRelation.nameInTo + "\t"
@@ -384,14 +395,15 @@ public class RWDLoadUtil {
 							}
 							ToObject.value_object.put(ConfigRelation.nameInTo + "-id", sdvInner);
 						} else {
-							SceneDataValue sdvInner = new SceneDataValue(Repository, ToObject.value_object, ConfigRelation.nameInTo + "-id清单", null,
-									false);
-							sdvInner.value_array = new ArrayList<SceneDataBase>();
-							for (SceneDataBase sdbInner : sdvToItem.value_array) {
+							SceneDataValue sdvInner = new SceneDataValue(Repository, ToObject, ConfigRelation.nameInTo + "-id清单", null);
+							sdvInner.value_array = new SceneDataSet(true);
+							sdvInner.value_array.singleValueSet = new ArrayList<SceneDataValue>();
+							for (SceneDataObject sdbInner : sdvToItem.value_array.set) {
 								SceneDataObject sdoInner = (SceneDataObject) sdbInner;
-								SceneDataValue sdvOne = new SceneDataValue(Repository, null, null, null, false);
-								sdvOne.value_primitive = sdoInner.get("id").value_primitive;
-								sdvInner.value_array.add(sdvOne);
+								SceneDataValue sdvOne = new SceneDataValue(Repository, null, null, null);
+								sdvOne.value_prim = new SceneDataPrimitive();
+								sdvOne.value_prim.value = sdoInner.get("id").value_prim.value;
+								sdvInner.value_array.singleValueSet.add(sdvOne);
 							}
 							ToObject.value_object.put(ConfigRelation.nameInTo + "-id清单", sdvInner);
 						}
@@ -410,20 +422,22 @@ public class RWDLoadUtil {
 			if (!objType.equals("equipment") && !objType.equals("system")) {
 				continue;
 			}
-			List<SceneDataValue> objectArray = Repository.objectArrayDic.get(classCode);
-			for (int i = 0; i < objectArray.size(); i++) {
-				SceneDataObject objectItem = objectArray.get(i).value_object;
-				String objId = (String) objectItem.get("id").value_primitive;
+			SceneDataSet objectArray = Repository.objectArrayDic.get(classCode);
+			for (int i = 0; i < objectArray.set.size(); i++) {
+				SceneDataObject objectItem = objectArray.set.get(i);
+				String objId = (String) objectItem.get("id").value_prim.value;
 				{
-					SceneDataValue sv_alarmList = new SceneDataValue(null, objectItem, "报警列表", null, true);
-					sv_alarmList.value_array = new ArrayList<SceneDataBase>();
+					SceneDataValue sv_alarmList = new SceneDataValue(null, objectItem, "报警列表", null);
+					sv_alarmList.value_array = new SceneDataSet(false);
+					sv_alarmList.value_array.set = new ArrayList<SceneDataObject>();
 					RepositoryBase.id2alarmList.putIfAbsent(objId, sv_alarmList);
 				}
 				SceneDataValue alarmList = RepositoryBase.id2alarmList.get(objId);
 				objectItem.put("报警列表", alarmList);
 				{
-					SceneDataValue sv_alarmCount = new SceneDataValue(null, objectItem, "报警数量", null, true);
-					sv_alarmCount.value_primitive = 0;
+					SceneDataValue sv_alarmCount = new SceneDataValue(null, objectItem, "报警数量", null);
+					sv_alarmCount.value_prim = new SceneDataPrimitive();
+					sv_alarmCount.value_prim.value = 0;
 					RepositoryBase.id2alarmCount.putIfAbsent(objId, sv_alarmCount);
 				}
 				SceneDataValue alarmCount = RepositoryBase.id2alarmCount.get(objId);

+ 44 - 45
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDUtil.java

@@ -5,8 +5,9 @@ import java.util.List;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.ibms.data.sdk.data.SceneDataBase;
 import com.persagy.ibms.data.sdk.data.SceneDataObject;
+import com.persagy.ibms.data.sdk.data.SceneDataPrimitive;
+import com.persagy.ibms.data.sdk.data.SceneDataSet;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
 
 public class RWDUtil {
@@ -14,8 +15,9 @@ public class RWDUtil {
 		SceneDataObject sod = new SceneDataObject(null, null, null, null, null, null, null);
 		for (String kpKey : arrayItem.keySet()) {
 			Object kpValue = arrayItem.get(kpKey);
-			SceneDataValue svInner = new SceneDataValue(null, null, null, null, false);
-			svInner.value_primitive = kpValue;
+			SceneDataValue svInner = new SceneDataValue(null, null, null, null);
+			svInner.value_prim = new SceneDataPrimitive();
+			svInner.value_prim.value = kpValue;
 			svInner.finish = true;
 			sod.put(kpKey, svInner);
 		}
@@ -23,68 +25,65 @@ public class RWDUtil {
 	}
 
 	public static void array2SDV(JSONArray array, SceneDataValue sv) {
-		sv.value_array = new ArrayList<SceneDataBase>();
+		sv.value_array = new SceneDataSet(false);
+		sv.value_array.set = new ArrayList<SceneDataObject>();
 		for (int i = 0; i < array.size(); i++) {
 			JSONObject arrayItem = (JSONObject) array.get(i);
 			SceneDataObject sod = new SceneDataObject(null, null, null, sv, null, null, null);
 			for (String kpKey : arrayItem.keySet()) {
 				Object kpValue = arrayItem.get(kpKey);
-				SceneDataValue svInner = new SceneDataValue(null, sod, kpKey, null, false);
-				svInner.value_primitive = kpValue;
+				SceneDataValue svInner = new SceneDataValue(null, sod, kpKey, null);
+				svInner.value_prim = new SceneDataPrimitive();
+				svInner.value_prim.value = kpValue;
 				svInner.finish = true;
 				sod.put(kpKey, svInner);
 			}
-			sv.value_array.add(sod);
+			sv.value_array.set.add(sod);
 		}
 	}
 
-	public static List<SceneDataValue> array2SDVList(JSONArray array) {
-		List<SceneDataValue> result = new ArrayList<SceneDataValue>();
+	public static List<SceneDataObject> array2SDOList(JSONArray array) {
+		List<SceneDataObject> result = new ArrayList<SceneDataObject>();
 		for (int i = 0; i < array.size(); i++) {
 			Object item = array.get(i);
-			if (item instanceof JSONObject) {
-				JSONObject arrayItem = (JSONObject) item;
-				SceneDataValue sdv = new SceneDataValue(null, null, null, null, false);
-				SceneDataObject sod = new SceneDataObject(null, null, null, sdv, null, null, null);
-				// SceneDataObject sod = new SceneDataObject(null, null, null, null, null, null);
-				for (String kpKey : arrayItem.keySet()) {
-					Object kpValue = arrayItem.get(kpKey);
-					SceneDataValue svInner = new SceneDataValue(null, sod, kpKey, null, false);
-					// SceneDataValue svInner = new SceneDataValue(null, null, null);
-					svInner.value_primitive = kpValue;
-					svInner.finish = true;
-					sod.put(kpKey, svInner);
-				}
-				sdv.value_object = sod;
-				result.add(sdv);
-			} else {
-				SceneDataValue sdv = new SceneDataValue(null, null, null, null, false);
-				sdv.value_primitive = item;
-				result.add(sdv);
+			JSONObject arrayItem = (JSONObject) item;
+			SceneDataObject sod = new SceneDataObject(null, null, null, null, null, null, null);
+			// SceneDataObject sod = new SceneDataObject(null, null, null, null, null, null);
+			for (String kpKey : arrayItem.keySet()) {
+				Object kpValue = arrayItem.get(kpKey);
+				SceneDataValue svInner = new SceneDataValue(null, sod, kpKey, null);
+				// SceneDataValue svInner = new SceneDataValue(null, null, null);
+				svInner.value_prim = new SceneDataPrimitive();
+				svInner.value_prim.value = kpValue;
+				svInner.finish = true;
+				sod.put(kpKey, svInner);
 			}
+			result.add(sod);
 		}
 		return result;
 	}
 
-	public static List<SceneDataValue> sdv2sdvList(SceneDataValue sdv) {
+	public static List<SceneDataValue> array2SDVList(JSONArray array) {
 		List<SceneDataValue> result = new ArrayList<SceneDataValue>();
-		for (int i = 0; i < sdv.value_array.size(); i++) {
-			SceneDataValue sdvInner = new SceneDataValue(null, null, null, null, false);
-			sdvInner.value_object = (SceneDataObject) sdv.value_array.get(i);
-			result.add(sdvInner);
+		for (int i = 0; i < array.size(); i++) {
+			Object item = array.get(i);
+			SceneDataValue svInner = new SceneDataValue(null, null, null, null);
+			svInner.value_prim = new SceneDataPrimitive();
+			svInner.value_prim.value = item;
+			result.add(svInner);
 		}
 		return result;
 	}
 
-	public static boolean isRunParam(List<SceneDataValue> infoArray, String code) {
+	public static boolean isRunParam(List<SceneDataObject> infoArray, String code) {
 		for (int i = 0; i < infoArray.size(); i++) {
-			SceneDataObject infoJSON = (SceneDataObject) infoArray.get(i).value_object;
-			if (!infoJSON.get("code").value_primitive.equals(code)) {
+			SceneDataObject infoJSON = infoArray.get(i);
+			if (!infoJSON.get("code").value_prim.value.equals(code)) {
 				continue;
 			}
-			String firstTag = infoJSON.get("firstTag") == null ? null : (String) infoJSON.get("firstTag").value_primitive;
-			String secondTag = infoJSON.get("secondTag") == null ? null : (String) infoJSON.get("secondTag").value_primitive;
-			String category = (String) infoJSON.get("category").value_primitive;
+			String firstTag = infoJSON.get("firstTag") == null ? null : (String) infoJSON.get("firstTag").value_prim.value;
+			String secondTag = infoJSON.get("secondTag") == null ? null : (String) infoJSON.get("secondTag").value_prim.value;
+			String category = (String) infoJSON.get("category").value_prim.value;
 			if (category.equals("SEQUENTIAL")) {
 				if (firstTag != null && (firstTag.contains("运行参数"))) {
 					return true;
@@ -122,15 +121,15 @@ public class RWDUtil {
 		return false;
 	}
 
-	public static boolean isSetParam(List<SceneDataValue> infoArray, String code) {
+	public static boolean isSetParam(List<SceneDataObject> infoArray, String code) {
 		for (int i = 0; i < infoArray.size(); i++) {
-			SceneDataObject infoJSON = (SceneDataObject) infoArray.get(i).value_object;
-			if (!infoJSON.get("code").value_primitive.equals(code)) {
+			SceneDataObject infoJSON = infoArray.get(i);
+			if (!infoJSON.get("code").value_prim.value.equals(code)) {
 				continue;
 			}
-			String firstTag = infoJSON.get("firstTag") == null ? null : (String) infoJSON.get("firstTag").value_primitive;
-			String secondTag = infoJSON.get("secondTag") == null ? null : (String) infoJSON.get("secondTag").value_primitive;
-			String category = (String) infoJSON.get("category").value_primitive;
+			String firstTag = infoJSON.get("firstTag") == null ? null : (String) infoJSON.get("firstTag").value_prim.value;
+			String secondTag = infoJSON.get("secondTag") == null ? null : (String) infoJSON.get("secondTag").value_prim.value;
+			String category = (String) infoJSON.get("category").value_prim.value;
 			if (category.equals("SEQUENTIAL")) {
 				if (firstTag != null && (firstTag.contains("设定参数"))) {
 					return true;

+ 20 - 20
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RecursiveUtil.java

@@ -9,8 +9,8 @@ import java.util.concurrent.locks.ReentrantLock;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.ibms.data.sdk.data.SceneDataBase;
 import com.persagy.ibms.data.sdk.data.SceneDataObject;
+import com.persagy.ibms.data.sdk.data.SceneDataSet;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
 import com.persagy.ibms.data.sdk.data.SceneProperty;
 
@@ -138,14 +138,14 @@ public class RecursiveUtil {
 		int depthInner = depth == -1 ? -1 : (depth > 0 ? depth - 1 : 0);
 		if (sdo.containsKey("id")) {
 			JSONObject result = new JSONObject();
-			String id = (String) sdo.get("id").value_primitive;
+			String id = (String) sdo.get("id").value_prim.value;
 			result.put("id", id);
 			JSONObject obj = Repository.id2object.get(id);
 			String classCode = (String) obj.get("classCode");
-			List<SceneDataValue> infoArray = Repository.infoArrayDic.get(classCode);
+			SceneDataSet infoArray = Repository.infoArrayDic.get(classCode);
 			for (String Key : obj.keySet()) {
 				if (obj.get(Key) != null && obj.get(Key) instanceof String) {
-					if (RWDUtil.isRunParam(infoArray, Key)) {
+					if (RWDUtil.isRunParam(infoArray.set, Key)) {
 						String infoValue = (String) obj.get(Key);
 						if (RWDLoadUtil.infoValue_is_point(infoValue)) {
 							result.put(Key, "point:" + infoValue);
@@ -157,7 +157,7 @@ public class RecursiveUtil {
 			return result;
 		} else if (sdo.containsKey("名称") && sdo.containsKey("清单")) {
 			JSONObject result = new JSONObject();
-			result.put("名称", sdo.get("名称").value_primitive);
+			result.put("名称", sdo.get("名称").value_prim.value);
 			Object list = draw(Repository, (SceneDataValue) sdo.get("清单"), depthInner, currTime, ObjInfo2Point);
 			result.put("清单", list);
 			return result;
@@ -185,8 +185,8 @@ public class RecursiveUtil {
 				return result;
 			} else if (sdv.value_array != null) {
 				JSONArray result = new JSONArray();
-				for (int i = 0; i < sdv.value_array.size(); i++) {
-					SceneDataBase sdb = sdv.value_array.get(i);
+				for (int i = 0; i < sdv.value_array.set.size(); i++) {
+					SceneDataObject sdb = sdv.value_array.set.get(i);
 					if (sdb instanceof SceneDataObject) {
 						SceneDataObject sod = (SceneDataObject) sdb;
 						JSONObject resultItem = draw(Repository, sod, curr_depth, currTime, ObjInfo2Point);
@@ -255,8 +255,8 @@ public class RecursiveUtil {
 			if (sdv.value_object != null) {
 				refresh(Repository, sdv.value_object, curr_depth, currTime);
 			} else if (sdv.value_array != null) {
-				for (int i = 0; i < sdv.value_array.size(); i++) {
-					SceneDataBase sdb = sdv.value_array.get(i);
+				for (int i = 0; i < sdv.value_array.set.size(); i++) {
+					SceneDataObject sdb = sdv.value_array.set.get(i);
 					if (sdb instanceof SceneDataObject) {
 						SceneDataObject sod = (SceneDataObject) sdb;
 						refresh(Repository, sod, curr_depth, currTime);
@@ -279,7 +279,7 @@ public class RecursiveUtil {
 
 		if (sdv.rel_property != null && sdv.rel_property.propertyValueType.equals("query")) {
 			if (sdv.rel_property.propertyValueSchema.equals("JSONObject") || sdv.rel_property.propertyValueSchema.equals("JSONArray")) {
-				if (sdv.rel_property.variable.equals("1")) {
+				{
 					// 递归计算当前节点及下级
 					computeInner(Repository, sdv);
 				}
@@ -333,7 +333,7 @@ public class RecursiveUtil {
 					if (svInner.value_object != null) {
 						svListInner.add(svInner.value_object.get(splits[i]));
 					} else if (svInner.value_array != null) {
-						for (SceneDataBase sdb : svInner.value_array) {
+						for (SceneDataObject sdb : svInner.value_array.set) {
 							if (sdb instanceof SceneDataObject) {
 								SceneDataObject sod = (SceneDataObject) sdb;
 								svListInner.add(sod.get(splits[i]));
@@ -386,7 +386,7 @@ public class RecursiveUtil {
 				SceneDataObject tmpData = (SceneDataObject) tmp;
 				if (tmpData.myPropertyName == null) {
 					SceneDataValue sdvInner = tmpData.get("名称") != null ? tmpData.get("名称") : tmpData.get("id");
-					sb.append((sb.length() > 0 ? "." : "") + "[" + sdvInner.value_primitive + "]");
+					sb.append((sb.length() > 0 ? "." : "") + "[" + sdvInner.value_prim.value + "]");
 				} else {
 					sb.append((sb.length() > 0 ? "." : "") + tmpData.myPropertyName);
 				}
@@ -420,16 +420,16 @@ public class RecursiveUtil {
 		}
 
 		if (sdv.rel_property.propertyValueSchema.equals("JSONObject")) {
-			if (sdv.rel_property.variable.equals("1") && sdv.rel_property.propertyValueType.equals("query")) {
-				log.info(path + "\t" + "variable set object" + "\t" + sdv.rel_property.propertyValueType + "\t" + sdv.variable);
+			if (sdv.rel_property.propertyValueType.equals("query")) {
+				log.info(path + "\t" + "variable set object" + "\t" + sdv.rel_property.propertyValueType + "\t");
 			}
 			print_variable_set(path, sdv.value_object);
 		} else if (sdv.rel_property.propertyValueSchema.equals("JSONArray")) {
-			if (sdv.rel_property.variable.equals("1") && sdv.rel_property.propertyValueType.equals("query")) {
-				log.info(path + "\t" + "variable set array" + "\t" + sdv.rel_property.propertyValueType + "\t" + sdv.variable);
+			if (sdv.rel_property.propertyValueType.equals("query")) {
+				log.info(path + "\t" + "variable set array" + "\t" + sdv.rel_property.propertyValueType + "\t");
 			}
-			for (int i = 0; i < sdv.value_array.size(); i++) {
-				SceneDataBase sdb = sdv.value_array.get(i);
+			for (int i = 0; i < sdv.value_array.set.size(); i++) {
+				SceneDataObject sdb = sdv.value_array.set.get(i);
 				if (sdb instanceof SceneDataObject) {
 					SceneDataObject sod = (SceneDataObject) sdb;
 					print_variable_set(path + "[" + i + "]", sod);
@@ -437,8 +437,8 @@ public class RecursiveUtil {
 			}
 		} else {
 			if (sdv.rel_property.propertyValueType.equals("query")) {
-				if (!sdv.variable) {
-					log.info(path + "\t" + "variable value" + "\t" + sdv.variable);
+				{
+					log.info(path + "\t" + "variable value" + "\t");
 				}
 			}
 		}

+ 8 - 8
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/Repository.java

@@ -1,6 +1,5 @@
 package com.persagy.ibms.data.sdk.util;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -12,6 +11,7 @@ import com.persagy.ibms.data.sdk.data.SceneDataObject;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
 import com.persagy.ibms.data.sdk.data.SceneObject;
 import com.persagy.ibms.data.sdk.data.SceneProperty;
+import com.persagy.ibms.data.sdk.data.SceneDataSet;
 import com.sagacloud.advanced.expression.AdvancedExpressionScanner;
 import com.sagacloud.advanced.expression.AdvancedExpressionWalker;
 
@@ -24,19 +24,19 @@ public class Repository {
 	public Map<String, String> code2objTypeMap = new HashMap<String, String>();
 
 	// 对象类型下属信息点
-	public Map<String, List<SceneDataValue>> infoArrayDic = new HashMap<String, List<SceneDataValue>>();
+	public Map<String, SceneDataSet> infoArrayDic = new HashMap<String, SceneDataSet>();
 	// 对象类型到对象实例清单
-	public Map<String, List<SceneDataValue>> objectArrayDic = new HashMap<String, List<SceneDataValue>>();
+	public Map<String, SceneDataSet> objectArrayDic = new HashMap<String, SceneDataSet>();
 	// 所有对象实例清单
-	public List<SceneDataValue> objectArrayAll = new ArrayList<SceneDataValue>();
+	public SceneDataSet objectArrayAll = new SceneDataSet(false);
 	// 对象类型到map,map里面是id到对象值。只有关联表里面的对象才有
-	public Map<String, Map<String, SceneDataValue>> objType2id2Value = new HashMap<String, Map<String, SceneDataValue>>();
+	public Map<String, Map<String, SceneDataObject>> objType2id2Value = new HashMap<String, Map<String, SceneDataObject>>();
 	// 图类型到边类型到变实例清单
-	public Map<String, Map<String, List<SceneDataValue>>> relationArrayDic = new HashMap<String, Map<String, List<SceneDataValue>>>();
+	public Map<String, Map<String, SceneDataSet>> relationArrayDic = new HashMap<String, Map<String, SceneDataSet>>();
 	// 对象id到JSONObject
 	public Map<String, JSONObject> id2object = new HashMap<String, JSONObject>();
 	// 对象id到SceneDataValue
-	public Map<String, SceneDataValue> id2sdv = new HashMap<String, SceneDataValue>();
+	public Map<String, SceneDataObject> id2sdv = new HashMap<String, SceneDataObject>();
 
 	// deamon任务到点位清单
 	public ConcurrentHashMap<SceneDataValue, List<String>> deamon_sdv2pointList = new ConcurrentHashMap<SceneDataValue, List<String>>();
@@ -63,5 +63,5 @@ public class Repository {
 	public Map<SceneProperty, ReentrantLock> property2lock = new HashMap<SceneProperty, ReentrantLock>();
 
 	// 公用target,减少解析量
-	public Map<String, List<SceneDataValue>> targetListMap = new HashMap<String, List<SceneDataValue>>();
+	public Map<String, SceneDataSet> targetListMap = new HashMap<String, SceneDataSet>();
 }

+ 4 - 4
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RepositoryBase.java

@@ -1,12 +1,12 @@
 package com.persagy.ibms.data.sdk.util;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.ibms.data.sdk.data.SceneDataBase;
+import com.persagy.ibms.data.sdk.data.SceneDataObject;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
+import com.persagy.ibms.data.sdk.data.SceneDataSet;
 
 public class RepositoryBase {
 	public static Repository instance = new Repository();
@@ -20,12 +20,12 @@ public class RepositoryBase {
 	public static ConcurrentHashMap<String, ConcurrentHashMap<String, String>> info2point = new ConcurrentHashMap<String, ConcurrentHashMap<String, String>>();
 	public static ConcurrentHashMap<String, SceneDataValue> point2sdv = new ConcurrentHashMap<String, SceneDataValue>();
 	public static ConcurrentHashMap<SceneDataValue, String> sdv2point = new ConcurrentHashMap<SceneDataValue, String>();
-	public static ConcurrentHashMap<String, List<SceneDataBase>> point2curve = new ConcurrentHashMap<String, List<SceneDataBase>>();
+	public static ConcurrentHashMap<String, List<SceneDataObject>> point2curve = new ConcurrentHashMap<String, List<SceneDataObject>>();
 	// IOT设置数据
 	public static ConcurrentHashMap<String, SceneDataValue> set2sdv = new ConcurrentHashMap<String, SceneDataValue>();
 	public static ConcurrentHashMap<SceneDataValue, String> sdv2set = new ConcurrentHashMap<SceneDataValue, String>();
 	// 报警数据
-	public static List<SceneDataValue> alarmArray = new ArrayList<SceneDataValue>();
+	public static SceneDataSet alarmArray = new SceneDataSet(false);
 	public static ConcurrentHashMap<String, SceneDataValue> id2alarmList = new ConcurrentHashMap<String, SceneDataValue>();
 	public static ConcurrentHashMap<String, SceneDataValue> id2alarmCount = new ConcurrentHashMap<String, SceneDataValue>();
 

+ 5 - 5
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/SceneDataValueComparator.java

@@ -6,9 +6,9 @@ import java.util.Comparator;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.ibms.data.sdk.data.SceneDataValue;
+import com.persagy.ibms.data.sdk.data.SceneDataObject;
 
-public class SceneDataValueComparator implements Comparator<SceneDataValue> {
+public class SceneDataValueComparator implements Comparator<SceneDataObject> {
 	JSONArray OrderBy;
 
 	public SceneDataValueComparator(JSONArray OrderBy) {
@@ -16,13 +16,13 @@ public class SceneDataValueComparator implements Comparator<SceneDataValue> {
 	}
 
 	@Override
-	public int compare(SceneDataValue o1, SceneDataValue o2) {
+	public int compare(SceneDataObject o1, SceneDataObject o2) {
 		for (int i = 0; i < OrderBy.size(); i++) {
 			JSONObject item = (JSONObject) OrderBy.get(i);
 			String Column = (String) item.get("Column");
 			Boolean Asc = (Boolean) item.get("Asc");
-			Object v1 = o1.value_object.get(Column).value_primitive;
-			Object v2 = o2.value_object.get(Column).value_primitive;
+			Object v1 = o1.value_object.get(Column).value_prim.value;
+			Object v2 = o2.value_object.get(Column).value_prim.value;
 			if (v1 == null && v2 != null) {
 				if (Asc) {
 					return -1;

+ 11 - 8
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/websocket/IOTWebSocketClient.java

@@ -7,6 +7,7 @@ import org.java_websocket.handshake.ServerHandshake;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.ibms.data.sdk.data.SceneDataPrimitive;
 import com.persagy.ibms.data.sdk.data.SceneDataValue;
 import com.persagy.ibms.data.sdk.util.DataUtil;
 import com.persagy.ibms.data.sdk.util.RepositoryBase;
@@ -60,18 +61,20 @@ public class IOTWebSocketClient extends WebSocketClient {
 					String funcid = splits[i + 2];
 					String value = splits[i + 3];
 					try {
-						SceneDataValue sdvInner = new SceneDataValue(null, null, null, null, true);
+						SceneDataValue sdvInner = new SceneDataValue(null, null, null, null);
+						sdvInner.value_prim = new SceneDataPrimitive();
+						sdvInner.value_prim.change = true;
 						SceneDataValue exist_sdv = RepositoryBase.point2sdv.putIfAbsent(meter + "-" + funcid, sdvInner);
 						if (exist_sdv == null) {
 							RepositoryBase.sdv2point.putIfAbsent(sdvInner, meter + "-" + funcid);
 						}
 						SceneDataValue data = RepositoryBase.point2sdv.get(meter + "-" + funcid);
 						double dataValue = Double.parseDouble(value);
-						if (data.value_primitive == null || dataValue != DataUtil.primitive2double(data.value_primitive)) {
-							data.value_primitive = dataValue;
+						if (data.value_prim.value == null || dataValue != DataUtil.primitive2double(data.value_prim.value)) {
+							data.value_prim.value = dataValue;
 						}
 					} catch (Exception e) {
-						log.info("onMessage" + "\t" + meter + "-" + funcid + "\t" + value);
+						// log.info("onMessage" + "\t" + meter + "-" + funcid + "\t" + value);
 					}
 				}
 			} else if (type.equals("pointset")) {
@@ -84,18 +87,18 @@ public class IOTWebSocketClient extends WebSocketClient {
 					String funcid = splits[i + 2];
 					String value = splits[i + 3];
 					try {
-						SceneDataValue sdvInner = new SceneDataValue(null, null, null, null, true);
+						SceneDataValue sdvInner = new SceneDataValue(null, null, null, null);
 						SceneDataValue exist_sdv = RepositoryBase.set2sdv.putIfAbsent(meter + "-" + funcid, sdvInner);
 						if (exist_sdv == null) {
 							RepositoryBase.sdv2set.putIfAbsent(sdvInner, meter + "-" + funcid);
 						}
 						SceneDataValue data = RepositoryBase.set2sdv.get(meter + "-" + funcid);
 						double dataValue = Double.parseDouble(value);
-						if (data.value_primitive == null || dataValue != DataUtil.primitive2double(data.value_primitive)) {
-							data.value_primitive = dataValue;
+						if (data.value_prim.value == null || dataValue != DataUtil.primitive2double(data.value_prim.value)) {
+							data.value_prim.value = dataValue;
 						}
 					} catch (Exception e) {
-						log.info("onMessage" + "\t" + meter + "-" + funcid + "\t" + value);
+						// log.info("onMessage" + "\t" + meter + "-" + funcid + "\t" + value);
 					}
 				}