Bladeren bron

加载物理世界时强化关联关系

menglu 4 jaren geleden
bovenliggende
commit
70128b0867

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

@@ -61,14 +61,14 @@ public class SceneDataValue extends SceneDataBase {
 		}
 
 		int curr_depth = depth;
-		if (this.rel_property != null && curr_depth != -1) {
+		if (!is_direct && this.rel_property != null && curr_depth != -1) {
 			curr_depth -= Integer.parseInt(this.rel_property.offset_level);
 			if (curr_depth < 0) {
 				return null;
 			}
 		}
 
-		if (depth > 0 || depth == -1) {
+		if (curr_depth > 0 || curr_depth == -1) {
 			if (this.value_object != null) {
 				JSONObject result = (JSONObject) this.value_object.toJSON(curr_depth);
 				return result;

+ 1 - 0
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/ComputeUtil.java

@@ -37,6 +37,7 @@ public class ComputeUtil {
 			Repository.code2objTypeMap = RepositoryBase.instance.code2objTypeMap;
 			Repository.infoArrayDic = RepositoryBase.instance.infoArrayDic;
 			Repository.objectArrayDic = RepositoryBase.instance.objectArrayDic;
+			Repository.objectArrayAll = RepositoryBase.instance.objectArrayAll;
 			Repository.objType2id2Value = RepositoryBase.instance.objType2id2Value;
 			Repository.relationArrayDic = RepositoryBase.instance.relationArrayDic;
 			Repository.id2object = RepositoryBase.instance.id2object;

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

@@ -7,4 +7,6 @@ public class ConfigRelation {
 	public String objTo;
 	public String nameInFrom;
 	public String nameInTo;
+	public String multiplicityFrom;
+	public String multiplicityTo;
 }

+ 7 - 1
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/Constant.java

@@ -24,7 +24,7 @@ public class Constant {
 	public static boolean physical_world_download_enable;
 	public static String config;
 	public static boolean config_download_enable;
-	public static String iot_websocket_url;	
+	public static String iot_websocket_url;
 	public static String iot_collect_url;
 	public static String iot_project_url;
 	public static boolean alarm_enable;
@@ -132,6 +132,12 @@ public class Constant {
 						ConfigRelation.objTo = element.attribute("objTo").getValue();
 						ConfigRelation.nameInFrom = element.attribute("nameInFrom").getValue();
 						ConfigRelation.nameInTo = element.attribute("nameInTo").getValue();
+						if (element.attribute("multiplicityFrom") != null) {
+							ConfigRelation.multiplicityFrom = element.attribute("multiplicityFrom").getValue();
+						}
+						if (element.attribute("multiplicityTo") != null) {
+							ConfigRelation.multiplicityTo = element.attribute("multiplicityTo").getValue();
+						}
 						ConfigRelationList.add(ConfigRelation);
 						keyWordMap.put(ConfigRelation.nameInFrom, true);
 						keyWordMap.put(ConfigRelation.nameInTo, true);

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

@@ -388,8 +388,11 @@ public class QueryUtil {
 						} else {
 							result = Repository.objectArrayDic.get(objType);
 						}
+					} else if (descSet.containsKey("classCode")) {
+						String classCode = (descSet.get("classCode")).toString();
+						result = Repository.objectArrayDic.get(classCode);
 					} else {
-						result = Repository.objectArrayDic.get("object");
+						result = Repository.objectArrayAll;
 					}
 				} else if (rwd.equals("info")) {
 					String objType = (descSet.get("objType")).toString();

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

@@ -129,6 +129,7 @@ public class RWDLoadUtil {
 					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;
 					Repository.id2sdv.put(id, sdv);
@@ -295,6 +296,72 @@ public class RWDLoadUtil {
 				sdvToItem.value_array.add(fromObject.value_object);
 			}
 		}
+		for (ConfigRelation ConfigRelation : Constant.ConfigRelationList) {
+			if (ConfigRelation.multiplicityFrom != null) {
+				Map<String, SceneDataValue> FromMap = Repository.objType2id2Value.get(ConfigRelation.objFrom);
+				for (String objFrom : FromMap.keySet()) {
+					SceneDataValue 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;
+							} else {
+								throw new Exception(ConfigRelation.graphCode + "\t" + ConfigRelation.relCode + "\t"
+										+ FromObject.value_object.get("id") + " " + "有多个" + " " + ConfigRelation.nameInFrom);
+							}
+							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) {
+								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);
+							}
+							FromObject.value_object.put(ConfigRelation.nameInFrom + "-id清单", sdvInner);
+						}
+					}
+				}
+			}
+			if (ConfigRelation.multiplicityTo != null) {
+				Map<String, SceneDataValue> ToMap = Repository.objType2id2Value.get(ConfigRelation.objTo);
+				for (String objTo : ToMap.keySet()) {
+					SceneDataValue 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;
+							} else {
+								log.error(ConfigRelation.graphCode + "\t" + ConfigRelation.relCode + "\t" + ToObject.value_object.get("id") + " "
+										+ "有多个" + " " + ConfigRelation.nameInTo);
+							}
+							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) {
+								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);
+							}
+							ToObject.value_object.put(ConfigRelation.nameInTo + "-id清单", sdvInner);
+						}
+					}
+				}
+			}
+		}
 	}
 
 	public static void LoadAlarm(Repository Repository, boolean use_sample) throws Exception {

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

@@ -1,5 +1,6 @@
 package com.persagy.ibms.data.sdk.util;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -21,17 +22,19 @@ public class Repository {
 	// classCode到objType
 	public Map<String, String> code2objTypeMap = new HashMap<String, String>();
 
-	// 设备类型下属信息点
+	// 对象类型下属信息点
 	public Map<String, List<SceneDataValue>> infoArrayDic = new HashMap<String, List<SceneDataValue>>();
-	// 设备类型到设备实例清单
+	// 对象类型到对象实例清单
 	public Map<String, List<SceneDataValue>> objectArrayDic = new HashMap<String, List<SceneDataValue>>();
-	// 设备类型到map,map里面是id到对象值。只有关联表里面的对象才有
+	// 所有对象实例清单
+	public List<SceneDataValue> objectArrayAll = new ArrayList<SceneDataValue>();
+	// 对象类型到map,map里面是id到对象值。只有关联表里面的对象才有
 	public Map<String, Map<String, SceneDataValue>> objType2id2Value = new HashMap<String, Map<String, SceneDataValue>>();
 	// 图类型到边类型到变实例清单
 	public Map<String, Map<String, List<SceneDataValue>>> relationArrayDic = new HashMap<String, Map<String, List<SceneDataValue>>>();
-	// 设备id到JSONObject
+	// 对象id到JSONObject
 	public Map<String, JSONObject> id2object = new HashMap<String, JSONObject>();
-	// 设备id到JSONObject
+	// 对象id到SceneDataValue
 	public Map<String, SceneDataValue> id2sdv = new HashMap<String, SceneDataValue>();
 
 	// deamon任务到点位清单

+ 8 - 7
ibms-data-sdk/src/main/resources/config.xml

@@ -20,12 +20,13 @@
 	<!-- 报警的websocket地址和服务地址 -->
 	<alarm enable="true" websocket="ws://39.102.43.179:9983/webSocketServer" rest="http://39.102.40.239:9970/zkt-alarm/"/>
 
-	<ConfigRelation graphCode="ArchSubset" relCode="Bd2Fl" objFrom="building" objTo="floor" nameInFrom="包含楼层" nameInTo="所属建筑" />
-	<ConfigRelation graphCode="ArchSubset" relCode="Fl2Sp" objFrom="floor" objTo="space" nameInFrom="包含空间" nameInTo="所属楼层" />
-	<ConfigRelation graphCode="MechInArch" relCode="Eq2Bd" objFrom="equipment" objTo="building" nameInFrom="所在建筑" nameInTo="包含设备" />
-	<ConfigRelation graphCode="MechInArch" relCode="Eq2Fl" objFrom="equipment" objTo="floor" nameInFrom="所在楼层" nameInTo="包含设备" />
-	<ConfigRelation graphCode="MechInArch" relCode="Eq2Sp" objFrom="equipment" objTo="space" nameInFrom="所在空间" nameInTo="包含设备" />
-	<ConfigRelation graphCode="MechForArch" relCode="Eq2Sp" objFrom="equipment" objTo="space" nameInFrom="服务于空间" nameInTo="被设备服务" />
-	<ConfigRelation graphCode="MechCtrl" relCode="EqCtrl" objFrom="equipment" objTo="equipment" nameInFrom="控制设备" nameInTo="被设备控制" />
+	<ConfigRelation graphCode="ArchSubset" relCode="Bd2Fl" objFrom="building" objTo="floor" nameInFrom="包含楼层" multiplicityFrom="n" nameInTo="所属建筑" multiplicityTo="1" />
+	<ConfigRelation graphCode="ArchSubset" relCode="Fl2Sp" objFrom="floor" objTo="space" nameInFrom="包含空间" multiplicityFrom="n" nameInTo="所属楼层" multiplicityTo="1" />
+	<ConfigRelation graphCode="MechInArch" relCode="Eq2Bd" objFrom="equipment" objTo="building" nameInFrom="所在建筑" multiplicityFrom="1" nameInTo="包含设备" multiplicityTo="n" />
+	<ConfigRelation graphCode="MechInArch" relCode="Eq2Fl" objFrom="equipment" objTo="floor" nameInFrom="所在楼层" multiplicityFrom="1" nameInTo="包含设备" multiplicityTo="n" />
+	<ConfigRelation graphCode="MechInArch" relCode="Eq2Sp" objFrom="equipment" objTo="space" nameInFrom="所在空间" multiplicityFrom="1" nameInTo="包含设备" multiplicityTo="n" />
+	<ConfigRelation graphCode="MechForArch" relCode="Eq2Sp" objFrom="equipment" objTo="space" nameInFrom="服务于空间" multiplicityFrom="n" nameInTo="被设备服务" multiplicityTo="n" />
+	<ConfigRelation graphCode="MechCtrl" relCode="EqCtrl" objFrom="equipment" objTo="equipment" nameInFrom="控制设备" multiplicityFrom="n" nameInTo="被设备控制" multiplicityTo="n" />
+	<ConfigRelation graphCode="ValveRelationship" relCode="Vv2Eq" objFrom="equipment" objTo="equipment" nameInFrom="限制设备" multiplicityFrom="n" nameInTo="被设备限制" multiplicityTo="n" />
 
 </root>