Browse Source

对接ibms编组

menglu 3 years ago
parent
commit
5d831bc6b0

+ 17 - 1
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/DaemonThread.java

@@ -46,7 +46,8 @@ public class DaemonThread extends Thread {
 		// 没有就下载
 		{
 			Date currTime = new Date();
-			String[] pathArray = { Constant.physical_world, Constant.zkt_physical_world, Constant.config, Constant.ibms_physical_world,Constant.zkt_alarm_config };
+			String[] pathArray = { Constant.physical_world, Constant.zkt_physical_world, Constant.config, Constant.ibms_physical_world,
+					Constant.zkt_alarm_config };
 			for (String path : pathArray) {
 				File root = new File(path);
 				if (!root.exists()) {
@@ -81,6 +82,21 @@ public class DaemonThread extends Thread {
 					log.error(e.getMessage(), e);
 				}
 			}
+			if (Constant.ibms_physical_world_enable) {
+				try {
+					String validPath = Constant.getLatestPath(Constant.ibms_physical_world, true);
+					if (validPath == null) {
+						while (true) {
+							boolean changed_physical_world = RWDDownloadUtil.Process_ibms_physical_world();
+							if (changed_physical_world) {
+								break;
+							}
+						}
+					}
+				} catch (Exception e) {
+					log.error(e.getMessage(), e);
+				}
+			}
 			try {
 				String validPath = Constant.getLatestPath(Constant.config, false);
 				if (validPath == null) {

+ 121 - 3
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDDownloadUtil.java

@@ -311,11 +311,129 @@ public class RWDDownloadUtil {
 			FileUtil.Save(path + Constant.getSeperator() + "object" + Constant.getSeperator() + ibmsSceneCode + Constant.getSeperator()
 					+ ibmsClassCode + ".json", FastJsonUtil.toFormatString(infoArray));
 		}
-		Map<String, Map<String, Integer>> relDic = new HashMap<String, Map<String, Integer>>();
-		ExcelRelationUtil.ReadRel(Constant.GetPath() + Constant.getSeperator() + "relation.xlsx", relDic);
 		log.debug("Download zkt physical world finish " + path);
 	}
 
+	public static boolean Process_ibms_physical_world() throws Exception {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+		String validPath = Constant.getLatestPath(Constant.zkt_physical_world, true);
+		// 存储临时文件
+		File dir1;
+		{
+			String tmpPath = Constant.ibms_physical_world + Constant.getSeperator() + "tmp1";
+			dir1 = new File(tmpPath);
+			RWDDownloadUtil.LoadIBMSPhysicalWorld(tmpPath);
+		}
+		File dir2;
+		{
+			String tmpPath = Constant.ibms_physical_world + Constant.getSeperator() + "tmp2";
+			dir2 = new File(tmpPath);
+			RWDDownloadUtil.LoadIBMSPhysicalWorld(tmpPath);
+		}
+		// 检查一致性
+		boolean compare = FileUtil.compareRecursive(dir1, dir2);
+		log.debug("Compare tmp1" + (compare ? "==" : "!=") + "tmp2");
+		boolean result;
+		if (compare) {
+			File valid = null;
+			if (validPath != null) {
+				valid = new File(validPath);
+			}
+			if (valid != null && valid.exists()) {
+				boolean compare_valid = FileUtil.compareRecursive(valid, dir2);
+				log.debug("Compare valid" + (compare_valid ? "==" : "!=") + "tmp2");
+				if (compare_valid) {
+					result = false;
+				} else {
+					// 移动tmp2
+					Date currTime = new Date();
+					dir2.renameTo(new File(Constant.ibms_physical_world + Constant.getSeperator() + sdf.format(currTime)));
+					result = true;
+				}
+			} else {
+				// 移动tmp2
+				Date currTime = new Date();
+				dir2.renameTo(new File(Constant.ibms_physical_world + Constant.getSeperator() + sdf.format(currTime)));
+				result = true;
+			}
+		} else {
+			result = false;
+		}
+		Clear(Constant.ibms_physical_world, true);
+		return result;
+	}
+
+	public static void LoadIBMSPhysicalWorld(String path) throws Exception {
+		log.debug("Download ibms physical world refresh dir");
+		FileUtil.deleteRecursive(new File(path));
+		{
+			File root = new File(path);
+			if (!root.exists()) {
+				root.mkdir();
+			}
+			File object = new File(path + Constant.getSeperator() + "object");
+			if (!object.exists()) {
+				object.mkdir();
+			}
+		}
+
+		log.debug("Download ibms physical world begin " + path);
+		JSONArray classArray;
+		{
+			JSONObject criteria = new JSONObject();
+			criteria.put("userId", "systemId");
+			criteria.put("projectId", RepositoryContainer.RepositoryBase.projectId);
+			criteria.put("groupCode", RepositoryContainer.RepositoryBase.groupCode);
+			String post_result = HttpClientUtil.post(Constant.zkt_monitor_url + "logicalGrouping/list", criteria.toJSONString());
+			JSONObject resultJSON = JSON.parseObject(post_result);
+			classArray = resultJSON.getJSONArray("Content");
+			classArray = classArray == null ? new JSONArray() : classArray;
+			FileUtil.Save(path + Constant.getSeperator() + "classArray.json", FastJsonUtil.toFormatString(classArray));
+		}
+		Map<String, Map<String, List<String>>> idListMapMap = new HashMap<String, Map<String, List<String>>>();
+		for (int i = 0; i < classArray.size(); i++) {
+			JSONObject item = (JSONObject) classArray.get(i);
+			String ibmsSceneCode = item.getString("ibmsSceneCode");
+			String ibmsClassCode = item.getString("ibmsClassCode");
+			String logicalGroupingId = item.getString("logicalGroupingId");
+			if (!idListMapMap.containsKey(ibmsSceneCode)) {
+				idListMapMap.put(ibmsSceneCode, new HashMap<String, List<String>>());
+			}
+			Map<String, List<String>> idListMap = idListMapMap.get(ibmsSceneCode);
+			if (!idListMap.containsKey(ibmsClassCode)) {
+				idListMap.put(ibmsClassCode, new ArrayList<String>());
+			}
+			idListMap.get(ibmsClassCode).add(logicalGroupingId);
+		}
+		for (String ibmsSceneCode : idListMapMap.keySet()) {
+			File sceneDir = new File(path + Constant.getSeperator() + "object" + Constant.getSeperator() + ibmsSceneCode);
+			if (!sceneDir.exists()) {
+				sceneDir.mkdir();
+			}
+			Map<String, List<String>> idListMap = idListMapMap.get(ibmsSceneCode);
+			for (String ibmsClassCode : idListMap.keySet()) {
+				List<String> idList = idListMap.get(ibmsClassCode);
+				log.debug("Download object " + ibmsSceneCode + "-" + ibmsClassCode);
+				JSONArray infoArray = new JSONArray();
+				for (String logicalGroupingId : idList) {
+					JSONObject criteria = new JSONObject();
+					criteria.put("userId", "systemId");
+					criteria.put("projectId", RepositoryContainer.RepositoryBase.projectId);
+					criteria.put("groupCode", RepositoryContainer.RepositoryBase.groupCode);
+					criteria.put("logicalGroupingId", logicalGroupingId);
+					String post_result = HttpClientUtil.post(Constant.zkt_monitor_url + "logicalObject/listPage", criteria.toJSONString());
+					JSONObject resultJSON = JSON.parseObject(post_result);
+					JSONArray Content = resultJSON.getJSONArray("Content");
+					infoArray.addAll(Content);
+				}
+				infoArray = infoArray == null ? new JSONArray() : infoArray;
+				FileUtil.Save(path + Constant.getSeperator() + "object" + Constant.getSeperator() + ibmsSceneCode + Constant.getSeperator()
+						+ ibmsClassCode + ".json", FastJsonUtil.toFormatString(infoArray));
+			}
+		}
+		log.debug("Download ibms physical world finish " + path);
+	}
+
 	public static void Clear(String path, boolean is_dir) throws Exception {
 		if (is_dir) {
 			{
@@ -394,7 +512,7 @@ public class RWDDownloadUtil {
 		boolean result;
 		if (!compare_valid) {
 			Date currTime = new Date();
-			tmp.renameTo(new File(Constant.zkt_alarm_config + Constant.getSeperator() + "zkt_alarm_config.json"));//sdf.format(currTime)+".json"
+			tmp.renameTo(new File(Constant.zkt_alarm_config + Constant.getSeperator() + "zkt_alarm_config.json"));// sdf.format(currTime)+".json"
 			result = true;
 		} else {
 			result = false;

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

@@ -559,6 +559,12 @@ public class RWDLoadUtil {
 
 	public static void LoadIBMSPhysicalWorld(RepositoryImpl Repository) throws Exception {
 		String validPath = Constant.getLatestPath(Constant.ibms_physical_world, true);
+		{
+			JSONArray array = FastJsonReaderUtil.Instance().ReadJSONArray(new File(validPath + Constant.getSeperator() + "classArray.json"));
+			SceneDataSet SceneDataSet = new SceneDataSet(false);
+			SceneDataSet.set = RWDUtil.array2SDOList(array);
+			Repository.IBMSGroupArray = SceneDataSet;
+		}
 		File[] dirs = (new File(validPath)).listFiles(new FileFilter() {
 			@Override
 			public boolean accept(File pathname) {
@@ -586,14 +592,144 @@ public class RWDLoadUtil {
 			Repository.IBMSArrayDic.put(product, infoArrayDic);
 
 			if (product.equals("yjzm") || product.equals("ggzm")) {
-				if (!Repository.IBMSArrayDic.containsKey(product)) {
-					continue;
-				}
 				Map<String, SceneDataSet> arrayDic = Repository.IBMSArrayDic.get(product);
-				if (!arrayDic.containsKey("回路")) {
-					continue;
+				// 自动生成 一级编组
+				JSONArray level1 = new JSONArray();
+				for (SceneDataObject sdo : Repository.IBMSGroupArray.set) {
+					String ibmsSceneCode = (String) sdo.get("ibmsSceneCode").value_prim.value;
+					String ibmsClassCode = (String) sdo.get("ibmsClassCode").value_prim.value;
+					String parentId = (String) sdo.get("parentId").value_prim.value;
+					if (!ibmsSceneCode.equals(product)) {
+						continue;
+					}
+					if (!ibmsClassCode.equals("zhaominghuilu")) {
+						continue;
+					}
+					if (!parentId.equals("0")) {
+						continue;
+					}
+					String logicalGroupingId = (String) sdo.get("logicalGroupingId").value_prim.value;
+					String logicalGroupingName = (String) sdo.get("logicalGroupingName").value_prim.value;
+					JSONObject itemInner = new JSONObject();
+					itemInner.put("id", logicalGroupingId);
+					itemInner.put("name", logicalGroupingName);
+					level1.add(itemInner);
 				}
-				SceneDataSet huilu = arrayDic.get("回路");
+				SceneDataSet SceneDataSet_level1 = new SceneDataSet(false);
+				SceneDataSet_level1.set = RWDUtil.array2SDOList(level1);
+				arrayDic.put("一级编组", SceneDataSet_level1);
+				// 自动生成二级编组
+				JSONArray level2 = new JSONArray();
+				for (SceneDataObject sdo : Repository.IBMSGroupArray.set) {
+					String ibmsSceneCode = (String) sdo.get("ibmsSceneCode").value_prim.value;
+					String ibmsClassCode = (String) sdo.get("ibmsClassCode").value_prim.value;
+					String parentId = (String) sdo.get("parentId").value_prim.value;
+					if (!ibmsSceneCode.equals(product)) {
+						continue;
+					}
+					if (!ibmsClassCode.equals("zhaominghuilu")) {
+						continue;
+					}
+					if (parentId.equals("0")) {
+						continue;
+					}
+					String logicalGroupingId = (String) sdo.get("logicalGroupingId").value_prim.value;
+					String logicalGroupingName = (String) sdo.get("logicalGroupingName").value_prim.value;
+					String firstCode = (String) sdo.get("firstCode").value_prim.value;
+					JSONObject itemInner = new JSONObject();
+					itemInner.put("id", logicalGroupingId);
+					itemInner.put("name", logicalGroupingName);
+					itemInner.put("一级编组", parentId);
+					itemInner.put("编组类型", firstCode);
+					if (product.equals("ggzm")) {
+						String floorId = (String) sdo.get("floorId").value_prim.value;
+						itemInner.put("楼层编号", floorId);
+					}
+					level2.add(itemInner);
+				}
+				SceneDataSet SceneDataSet_level2 = new SceneDataSet(false);
+				SceneDataSet_level2.set = RWDUtil.array2SDOList(level2);
+				arrayDic.put("二级编组", SceneDataSet_level2);
+				// 自动生成回路
+				SceneDataSet zhaominghuilu = arrayDic.get("zhaominghuilu");
+				if (zhaominghuilu == null) {
+					zhaominghuilu = new SceneDataSet(false);
+				}
+				JSONArray huiluArray = new JSONArray();
+				for (SceneDataObject sdo : zhaominghuilu.set) {
+					String logicalGroupingId = (String) sdo.get("logicalGroupingId").value_prim.value;
+					SceneDataObject level1_item = null;
+					SceneDataObject level2_item = null;
+					for (SceneDataObject sdoInner : SceneDataSet_level2.set) {
+						String idInner = (String) sdoInner.get("id").value_prim.value;
+						if (idInner.equals(logicalGroupingId)) {
+							level2_item = sdoInner;
+							break;
+						}
+					}
+					String level1_id = null;
+					String level2_id = null;
+					if (level2_item != null) {
+						level2_id = (String) level2_item.get("id").value_prim.value;
+						level1_id = (String) level2_item.get("一级编组").value_prim.value;
+						for (SceneDataObject sdoInner : SceneDataSet_level1.set) {
+							String idInner = (String) sdoInner.get("id").value_prim.value;
+							if (idInner.equals(level1_id)) {
+								level1_item = sdoInner;
+								break;
+							}
+						}
+					}
+					String objId = (String) sdo.get("objId").value_prim.value;
+					JSONObject itemInner = new JSONObject();
+					itemInner.put("回路编号", objId);
+					if (level1_id != null && level1_item != null && level2_id != null && level2_item != null) {
+						String groupType = (String) level2_item.get("编组类型").value_prim.value;
+						String level1_name = (String) level1_item.get("name").value_prim.value;
+						String level2_name = (String) level2_item.get("name").value_prim.value;
+						itemInner.put("编组类型", groupType);
+						itemInner.put("一级编组", level1_id);
+						itemInner.put("一级编组名称", level1_name);
+						itemInner.put("二级编组", level2_id);
+						itemInner.put("二级编组名称", level2_name);
+						SceneDataObject SELTCC = Repository.id2sdv.get(objId);
+						SceneDataValue SELTCUArray = SELTCC.get("被设备控制");
+						if (SELTCUArray.value_array.set.size() == 1) {
+							SceneDataObject SELTCU = SELTCUArray.value_array.set.get(0);
+							String SELTCU_id = (String) SELTCU.get("id").value_prim.value;
+							String SELTCU_name = (String) SELTCU.get("localName").value_prim.value;
+							itemInner.put("模块编号", SELTCU_id);
+							itemInner.put("模块名称", SELTCU_name);
+							SceneDataValue SETDLSArray = SELTCU.get("被设备供电");
+							if (SETDLSArray.value_array.set.size() == 1) {
+								SceneDataObject SETDLS = SETDLSArray.value_array.set.get(0);
+								String SETDLS_id = (String) SETDLS.get("id").value_prim.value;
+								String SETDLS_name = (String) SETDLS.get("localName").value_prim.value;
+								itemInner.put("配电箱编号", SETDLS_id);
+								itemInner.put("配电箱名称", SETDLS_name);
+								SceneDataValue GeneralZoneArray = SETDLS.get("所在物业空间");
+								if (GeneralZoneArray.value_array.set.size() == 1) {
+									SceneDataObject GeneralZone = GeneralZoneArray.value_array.set.get(0);
+									String GeneralZone_id = (String) GeneralZone.get("id").value_prim.value;
+									String GeneralZone_name = (String) GeneralZone.get("localName").value_prim.value;
+									itemInner.put("电井编号", GeneralZone_id);
+									itemInner.put("电井名称", GeneralZone_name);
+								}
+							}
+						}
+						if (product.equals("ggzm")) {
+							String floorId = (String) level2_item.get("floorId").value_prim.value;
+							String floorName = (String) level2_item.get("floorName").value_prim.value;
+							itemInner.put("楼层编号", floorId);
+							itemInner.put("楼层名称", floorName);
+						}
+					}
+					huiluArray.add(itemInner);
+				}
+				SceneDataSet huilu = new SceneDataSet(false);
+				huilu.set = RWDUtil.array2SDOList(huiluArray);
+				arrayDic.put("回路", huilu);
+
 				for (SceneDataObject sdo : huilu.set) {
 					String id = (String) sdo.get("回路编号").value_prim.value;
 					if (Repository.id2sdv.containsKey(id)) {

+ 113 - 120
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RepositoryImpl.java

@@ -11,130 +11,123 @@ import com.persagy.ibms.core.data.SceneDataValue;
 import com.persagy.ibms.core.util.RepositoryBase;
 
 public class RepositoryImpl extends RepositoryBase {
-    public Map<String, JSONObject> general_queryMap;
-    public RepositoryProject RepositoryBase;
+	public Map<String, JSONObject> general_queryMap;
+	public RepositoryProject RepositoryBase;
 
-    //to do lirong
-    // 报警配置数据
-    public SceneDataSet alarmConfigArray = new SceneDataSet(false);//id2alarmConfigTrigger
-    public SceneDataSet alarmConfigTrigger = new SceneDataSet(false);
+	// to do lirong
+	// 报警配置数据
+	public SceneDataSet alarmConfigArray = new SceneDataSet(false);// id2alarmConfigTrigger
+	public SceneDataSet alarmConfigTrigger = new SceneDataSet(false);
 
-    // 对象类型,true表示有二级类型
-    public Map<String, Boolean> objTypeMap = new HashMap<String, Boolean>();
-    public Map<String, String> classCode2NameMap = new HashMap<String, String>();
-    // classCode到objType
-    public Map<String, String> code2objTypeMap = new HashMap<String, String>();
-    // 对象类型下属信息点
-    public SceneDataSet classArray = new SceneDataSet(false);
-    public Map<String, SceneDataSet> infoArrayDic = new HashMap<String, SceneDataSet>();
-    // 对象类型到对象实例清单
-    public Map<String, SceneDataSet> objectArrayDic = new HashMap<String, SceneDataSet>();
-    // 所有对象实例清单
-    public SceneDataSet objectArrayAll = new SceneDataSet(false);
-    public ConcurrentHashMap<String, ConcurrentHashMap<String, String>> info2point = new ConcurrentHashMap<String, ConcurrentHashMap<String, String>>();
-    // 对象类型到map,map里面是id到对象值。只有关联表里面的对象才有
-    public Map<String, Map<String, SceneDataObject>> objType2id2Value = new HashMap<String, Map<String, SceneDataObject>>();
-    // 图类型到边类型到变实例清单
-    public Map<String, Map<String, SceneDataSet>> relationArrayDic = new HashMap<String, Map<String, SceneDataSet>>();
-    public Map<String, SceneDataSet> graphCodeDic = new HashMap<String, SceneDataSet>();
-    public Map<String, SceneDataSet> relCodeDic = new HashMap<String, SceneDataSet>();
-    public SceneDataSet relationAll = new SceneDataSet(false);
-    // 对象id到JSONObject
-    public Map<String, JSONObject> id2object = new HashMap<String, JSONObject>();
-    // 对象id到SceneDataValue
-    public Map<String, SceneDataObject> id2sdv = new HashMap<String, SceneDataObject>();
+	// 对象类型,true表示有二级类型
+	public Map<String, Boolean> objTypeMap = new HashMap<String, Boolean>();
+	public Map<String, String> classCode2NameMap = new HashMap<String, String>();
+	// classCode到objType
+	public Map<String, String> code2objTypeMap = new HashMap<String, String>();
+	// 对象类型下属信息点
+	public SceneDataSet classArray = new SceneDataSet(false);
+	public Map<String, SceneDataSet> infoArrayDic = new HashMap<String, SceneDataSet>();
+	// 对象类型到对象实例清单
+	public Map<String, SceneDataSet> objectArrayDic = new HashMap<String, SceneDataSet>();
+	// 所有对象实例清单
+	public SceneDataSet objectArrayAll = new SceneDataSet(false);
+	public ConcurrentHashMap<String, ConcurrentHashMap<String, String>> info2point = new ConcurrentHashMap<String, ConcurrentHashMap<String, String>>();
+	// 对象类型到map,map里面是id到对象值。只有关联表里面的对象才有
+	public Map<String, Map<String, SceneDataObject>> objType2id2Value = new HashMap<String, Map<String, SceneDataObject>>();
+	// 图类型到边类型到变实例清单
+	public Map<String, Map<String, SceneDataSet>> relationArrayDic = new HashMap<String, Map<String, SceneDataSet>>();
+	public Map<String, SceneDataSet> graphCodeDic = new HashMap<String, SceneDataSet>();
+	public Map<String, SceneDataSet> relCodeDic = new HashMap<String, SceneDataSet>();
+	public SceneDataSet relationAll = new SceneDataSet(false);
+	// 对象id到JSONObject
+	public Map<String, JSONObject> id2object = new HashMap<String, JSONObject>();
+	// 对象id到SceneDataValue
+	public Map<String, SceneDataObject> id2sdv = new HashMap<String, SceneDataObject>();
 
-    // 对象类型到对象实例清单
-    public SceneDataSet classArrayZKT = new SceneDataSet(false);
-    public Map<String, Map<String, SceneDataSet>> objectArrayDicZKT = new HashMap<String, Map<String, SceneDataSet>>();
+	// 对象类型到对象实例清单
+	public SceneDataSet classArrayZKT = new SceneDataSet(false);
+	public Map<String, Map<String, SceneDataSet>> objectArrayDicZKT = new HashMap<String, Map<String, SceneDataSet>>();
 
-    // 图类型到边类型到变实例清单
-    public Map<String, Map<String, SceneDataSet>> IBMSArrayDic = new HashMap<String, Map<String, SceneDataSet>>();
+	//
+	public SceneDataSet IBMSGroupArray = new SceneDataSet(false);
+	public Map<String, Map<String, SceneDataSet>> IBMSArrayDic = new HashMap<String, Map<String, SceneDataSet>>();
 
-    public ConcurrentHashMap<SceneDataValue, String> sdv2point() {
-        return RepositoryBase.sdv2point;
-    }
+	public ConcurrentHashMap<SceneDataValue, String> sdv2point() {
+		return RepositoryBase.sdv2point;
+	}
 
-    public SceneDataSet ParseSource(JSONObject descSet, String Source) {
-        SceneDataSet result = null;
-        if (Source.equals("class")) {
-            result = this.classArray;
-        }
-        else if (Source.equals("rwd")) {
-            String rwd = (descSet.get("rwd")).toString();
-            if (rwd.equals("object")) {
-                if (descSet.containsKey("objType")) {
-                    String objType = (descSet.get("objType")).toString();
-                    if (objType.equals("equipment") || objType.equals("system") || objType.equals("space")) {
-                        if (descSet.containsKey("classCode")) {
-                            String classCode = (descSet.get("classCode")).toString();
-                            result = this.objectArrayDic.get(classCode);
-                        } else {
-                            result = this.objectArrayDic.get(objType);
-                        }
-                    } else {
-                        result = this.objectArrayDic.get(objType);
-                    }
-                } else if (descSet.containsKey("classCode")) {
-                    String classCode = (descSet.get("classCode")).toString();
-                    result = this.objectArrayDic.get(classCode);
-                } else {
-                    result = this.objectArrayAll;
-                }
-            }
-            else if (rwd.equals("info")) {
-                String objType = (descSet.get("objType")).toString();
-                if (objType.equals("equipment") || objType.equals("system") || objType.equals("space")) {
-                    String classCode = (descSet.get("classCode")).toString();
-                    result = this.infoArrayDic.get(classCode);
-                } else {
-                    result = this.infoArrayDic.get(objType);
-                }
-            }
-            else if (rwd.equals("relation")) {
-                if (descSet.get("graphCode") != null && descSet.get("relCode") != null) {
-                    String graphCode = (descSet.get("graphCode")).toString();
-                    String relCode = (descSet.get("relCode")).toString();
-                    result = this.relationArrayDic.get(graphCode).get(relCode);
-                } else if (descSet.get("graphCode") != null) {
-                    String graphCode = (descSet.get("graphCode")).toString();
-                    result = this.graphCodeDic.get(graphCode);
-                } else if (descSet.get("relCode") != null) {
-                    String relCode = (descSet.get("relCode")).toString();
-                    result = this.relCodeDic.get(relCode);
-                } else {
-                    result = this.relationAll;
-                }
-            }
-            if (result == null) {
-                result = new SceneDataSet(false);
-                result.setRowChange(false);
-            }
-        }
-        else if (Source.equals("zkt-class")) {
-            result = this.classArrayZKT;
-        }
-        else if (Source.equals("zkt-object")) {
-            String ibmsSceneCode = (descSet.get("ibmsSceneCode")).toString();
-            String ibmsClassCode = (descSet.get("ibmsClassCode")).toString();
-            result = this.objectArrayDicZKT.get(ibmsSceneCode).get(ibmsClassCode);
-        }
-        else if (Source.equals("ibms")) {
-            String product = (descSet.get("product")).toString();
-            String type = (descSet.get("type")).toString();
-            result = this.IBMSArrayDic.get(product).get(type);
-        }
-        else if (Source.equals("alarm")) {
-            result = this.RepositoryBase.alarmArray;
-        }
-        else if (Source.equals("alarmConfig")) {
-            String alarmConfig = (descSet.get("alarmConfig")).toString();
-            if (alarmConfig.equals("configTrigger")) {
-                result = this.alarmConfigTrigger;
-            } else {
-                result = this.alarmConfigArray;
-            }
-        }
-        return result;
-    }
+	public SceneDataSet ParseSource(JSONObject descSet, String Source) {
+		SceneDataSet result = null;
+		if (Source.equals("class")) {
+			result = this.classArray;
+		} else if (Source.equals("rwd")) {
+			String rwd = (descSet.get("rwd")).toString();
+			if (rwd.equals("object")) {
+				if (descSet.containsKey("objType")) {
+					String objType = (descSet.get("objType")).toString();
+					if (objType.equals("equipment") || objType.equals("system") || objType.equals("space")) {
+						if (descSet.containsKey("classCode")) {
+							String classCode = (descSet.get("classCode")).toString();
+							result = this.objectArrayDic.get(classCode);
+						} else {
+							result = this.objectArrayDic.get(objType);
+						}
+					} else {
+						result = this.objectArrayDic.get(objType);
+					}
+				} else if (descSet.containsKey("classCode")) {
+					String classCode = (descSet.get("classCode")).toString();
+					result = this.objectArrayDic.get(classCode);
+				} else {
+					result = this.objectArrayAll;
+				}
+			} else if (rwd.equals("info")) {
+				String objType = (descSet.get("objType")).toString();
+				if (objType.equals("equipment") || objType.equals("system") || objType.equals("space")) {
+					String classCode = (descSet.get("classCode")).toString();
+					result = this.infoArrayDic.get(classCode);
+				} else {
+					result = this.infoArrayDic.get(objType);
+				}
+			} else if (rwd.equals("relation")) {
+				if (descSet.get("graphCode") != null && descSet.get("relCode") != null) {
+					String graphCode = (descSet.get("graphCode")).toString();
+					String relCode = (descSet.get("relCode")).toString();
+					result = this.relationArrayDic.get(graphCode).get(relCode);
+				} else if (descSet.get("graphCode") != null) {
+					String graphCode = (descSet.get("graphCode")).toString();
+					result = this.graphCodeDic.get(graphCode);
+				} else if (descSet.get("relCode") != null) {
+					String relCode = (descSet.get("relCode")).toString();
+					result = this.relCodeDic.get(relCode);
+				} else {
+					result = this.relationAll;
+				}
+			}
+			if (result == null) {
+				result = new SceneDataSet(false);
+				result.setRowChange(false);
+			}
+		} else if (Source.equals("zkt-class")) {
+			result = this.classArrayZKT;
+		} else if (Source.equals("zkt-object")) {
+			String ibmsSceneCode = (descSet.get("ibmsSceneCode")).toString();
+			String ibmsClassCode = (descSet.get("ibmsClassCode")).toString();
+			result = this.objectArrayDicZKT.get(ibmsSceneCode).get(ibmsClassCode);
+		} else if (Source.equals("ibms")) {
+			String product = (descSet.get("product")).toString();
+			String type = (descSet.get("type")).toString();
+			result = this.IBMSArrayDic.get(product).get(type);
+		} else if (Source.equals("alarm")) {
+			result = this.RepositoryBase.alarmArray;
+		} else if (Source.equals("alarmConfig")) {
+			String alarmConfig = (descSet.get("alarmConfig")).toString();
+			if (alarmConfig.equals("configTrigger")) {
+				result = this.alarmConfigTrigger;
+			} else {
+				result = this.alarmConfigArray;
+			}
+		}
+		return result;
+	}
 }

+ 1 - 0
ibms-data-sdk/src/main/resources/config.xml

@@ -32,6 +32,7 @@
 	<ConfigRelation graphCode="MechInArch" relCode="Eq2Sp" relValue="GeneralZone" objFrom="equipment" objTo="space" nameInFrom="所在物业空间" multiplicityFrom="n" nameInTo="包含设备" multiplicityTo="n" />
 	<ConfigRelation graphCode="MechInArch" relCode="Eq2Sp" relValue="EnvironmentZone" objFrom="equipment" objTo="space" nameInFrom="所在环境空间" multiplicityFrom="n" nameInTo="包含设备" multiplicityTo="n" />
 	<ConfigRelation graphCode="MechForArch" relCode="Eq2Sp" objFrom="equipment" objTo="space" nameInFrom="服务于空间" multiplicityFrom="n" nameInTo="被设备服务" multiplicityTo="n" />
+	<ConfigRelation graphCode="MechPower" relCode="EqNormal" objFrom="equipment" objTo="equipment" 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" />
 	<ConfigRelation graphCode="ArchForArch" relCode="Sp2Sp" objFrom="space" objTo="space" nameInFrom="服务于空间" multiplicityFrom="n" nameInTo="被空间服务" multiplicityTo="n" />