Quellcode durchsuchen

读取报警配置放入内存

lirong vor 3 Jahren
Ursprung
Commit
989c2619af

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

@@ -46,7 +46,7 @@ public class DaemonThread extends Thread {
 		// 没有就下载
 		{
 			Date currTime = new Date();
-			String[] pathArray = { Constant.physical_world, Constant.zkt_physical_world, Constant.config, Constant.ibms_physical_world };
+			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()) {
@@ -90,6 +90,15 @@ public class DaemonThread extends Thread {
 			} catch (Exception e) {
 				log.error(e.getMessage(), e);
 			}
+			try {
+				String validPath = Constant.getLatestPath(Constant.zkt_alarm_config, false);
+				if (validPath == null) {
+					String tmpPath = Constant.zkt_alarm_config + Constant.getSeperator() + "zkt_alarm_config.json";
+					RWDDownloadUtil.LoadZKTAlarmConfig(tmpPath);
+				}
+			} catch (Exception e) {
+				log.error(e.getMessage(), e);
+			}
 		}
 
 		try {

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

@@ -52,6 +52,7 @@ public class RefreshThread extends Thread {
 		Date last_refresh_config = null;
 		Date last_refresh_physical_world = null;
 		Date last_refresh_zkt_physical_world = null;
+		Date last_refresh_zkt_alarm_config = null;
 		while (!stop) {
 			try {
 				Thread.sleep(1000L);
@@ -68,6 +69,14 @@ public class RefreshThread extends Thread {
 					}
 					last_refresh_config = currTime;
 				}
+				//to do lirong
+				boolean changed_zkt_alarm_config = false;
+				if (last_refresh_zkt_alarm_config == null || currTime.getTime() - last_refresh_zkt_alarm_config.getTime() > 1000L * 15) {
+					if (Constant.zkt_alarm_config_refresh_enable) {
+						changed_zkt_alarm_config = RWDDownloadUtil.Process_zkt_alarm_config();
+					}
+					last_refresh_zkt_alarm_config = currTime;
+				}
 				boolean changed_physical_world = false;
 				if (last_refresh_physical_world == null || currTime.getTime() - last_refresh_physical_world.getTime() > 1000L * 60 * 60) {
 					if (Constant.physical_world_refresh_enable) {

+ 13 - 0
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/Constant.java

@@ -40,6 +40,11 @@ public class Constant {
 	public static String alarm_websocket;
 	public static String alarm_rest;
 	public static boolean alarm_rest_get;
+
+	//To Do lirong  增加报警配置
+	public static String zkt_alarm_config;
+	public static boolean zkt_alarm_config_refresh_enable;
+
 	public static Map<String, Boolean> objType_hasRelation = new HashMap<String, Boolean>();
 	public static List<ConfigRelation> ConfigRelationList = new ArrayList<ConfigRelation>();
 	public static Map<String, Boolean> keyWordMap = new HashMap<String, Boolean>();
@@ -122,6 +127,14 @@ public class Constant {
 						config_refresh_enable = Boolean.parseBoolean(element.attribute("refresh_enable").getValue());
 					}
 
+					//To Do lirong
+					iter = document.selectNodes("/root/zkt_alarm_config").iterator();
+					if (iter.hasNext()) {
+						element = (Element) iter.next();
+						zkt_alarm_config = element.attribute("path").getValue();
+						zkt_alarm_config_refresh_enable = Boolean.parseBoolean(element.attribute("refresh_enable").getValue());
+					}
+
 					iter = document.selectNodes("/root/iot_websocket").iterator();
 					if (iter.hasNext()) {
 						element = (Element) iter.next();

+ 53 - 0
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDDownloadUtil.java

@@ -349,4 +349,57 @@ public class RWDDownloadUtil {
 			}
 		}
 	}
+
+	public static void LoadZKTAlarmConfig(String path) throws Exception {
+		FileUtil.deleteRecursive(new File(path));
+		JSONArray alarmConfigArray = null;
+		List<String> groupCodeList = new ArrayList<String>();
+		groupCodeList.add(RepositoryContainer.RepositoryBase.groupCode);
+		groupCodeList.add(RepositoryContainer.RepositoryBase.groupCode);
+		groupCodeList.add("0");
+		List<String> projectIdList = new ArrayList<String>();
+		projectIdList.add(RepositoryContainer.RepositoryBase.projectId);
+		projectIdList.add("0");
+		projectIdList.add("0");
+		for (int i = 0; i < groupCodeList.size(); i++) {
+			String groupCode = groupCodeList.get(i);
+			String projectId = projectIdList.get(i);
+			JSONObject param = new JSONObject();
+			param.put("userId", "systemId");
+			param.put("appId", "datautils");
+			param.put("groupCode", groupCode);
+			param.put("projectId", projectId);
+			String post_result = HttpClientUtil.post(Constant.alarm_rest + "alarm/queryConfig", param.toJSONString());
+			JSONObject resultJSON = JSON.parseObject(post_result);
+			alarmConfigArray = resultJSON.getJSONArray("Content");
+			if (alarmConfigArray != null) {
+				break;
+			}
+		}
+		if (alarmConfigArray != null) {
+			FileUtil.Save(path, FastJsonUtil.toFormatString(alarmConfigArray));
+		}
+	}
+
+	public static boolean Process_zkt_alarm_config() throws Exception {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+		String validPath = Constant.zkt_alarm_config;
+		File valid = new File(validPath);
+
+		String tmpPath = Constant.zkt_alarm_config + Constant.getSeperator() + "tmp" + ".json";
+		LoadZKTAlarmConfig(tmpPath);
+		File tmp = new File(tmpPath);
+
+		boolean compare_valid = FileUtil.compareRecursive(valid, tmp);
+		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"
+			result = true;
+		} else {
+			result = false;
+		}
+		Clear(Constant.zkt_alarm_config, false);
+		return result;
+	}
 }

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

@@ -614,4 +614,32 @@ public class RWDLoadUtil {
 			}
 		}
 	}
+
+	public static void LoadZKTAlarmConfig(RepositoryImpl Repository) throws Exception {
+		String validPath = Constant.zkt_alarm_config;
+		{
+			JSONArray alarmConfigArray = FastJsonReaderUtil.Instance().ReadJSONArray(new File(validPath + Constant.getSeperator() + "zkt_alarm_config.json"));
+			{
+				SceneDataSet SceneDataSet = new SceneDataSet(false);
+				SceneDataSet.set = RWDUtil.array2SDOList(alarmConfigArray);
+				Repository.alarmConfigArray = SceneDataSet;
+			}
+			JSONArray alarmConfigTriggerArray=new JSONArray();
+			for (int i = 0; i < alarmConfigArray.size(); i++) {
+				JSONObject alarmConfigItem = (JSONObject) alarmConfigArray.get(i);
+				String objId = (String) alarmConfigItem.get("objId");
+				JSONObject condition = (JSONObject) alarmConfigItem.get("condition");
+				JSONObject configs = (JSONObject) condition.get("configs");
+				JSONArray trigger = (JSONArray) configs.get("trigger");
+				if (trigger!=null) {
+					JSONObject item=(JSONObject) trigger.get(0);
+					item.put("objId",objId);
+					alarmConfigTriggerArray.add(item);
+				}
+			}
+			SceneDataSet alarmConfigTrigger = new SceneDataSet(false);
+			alarmConfigTrigger.set = RWDUtil.array2SDOList(alarmConfigTriggerArray);
+			Repository.alarmConfigTrigger=alarmConfigTrigger;
+		}
+	}
 }

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

@@ -25,6 +25,8 @@ public class RWDRepositoryUtil {
 			RWDLoadUtil.LoadPhysicalWorld(Repository);
 			log.warn("LoadReference");
 			RWDLoadUtil.LoadReference(Repository);
+			log.warn("LoadZKTAlarmConfig");
+			RWDLoadUtil.LoadZKTAlarmConfig(Repository);
 
 			if (Constant.zkt_physical_world_enable) {
 				log.warn("LoadZKTPhysicalWorld");
@@ -39,10 +41,12 @@ public class RWDRepositoryUtil {
 			log.warn("LoadAlarm");
 			if (Constant.alarm_enable) {
 				RWDLoadUtil.LoadAlarm(Repository, false);
-			} else {
+			}
+			else {
 				RWDLoadUtil.LoadAlarm(Repository, true);
 			}
-		} else {
+		}
+		else {
 			Repository.objTypeMap = RepositoryContainer.instance.objTypeMap;
 			Repository.classCode2NameMap = RepositoryContainer.instance.classCode2NameMap;
 			Repository.code2objTypeMap = RepositoryContainer.instance.code2objTypeMap;
@@ -63,6 +67,9 @@ public class RWDRepositoryUtil {
 			Repository.objectArrayDicZKT = RepositoryContainer.instance.objectArrayDicZKT;
 
 			Repository.IBMSArrayDic = RepositoryContainer.instance.IBMSArrayDic;
+
+			Repository.alarmConfigArray = RepositoryContainer.instance.alarmConfigArray;
+			Repository.alarmConfigTrigger = RepositoryContainer.instance.alarmConfigTrigger;
 		}
 
 		log.warn("LoadConfig");

+ 121 - 102
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RepositoryImpl.java

@@ -11,111 +11,130 @@ 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;
 
-	// 对象类型,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>();	
+    //to do lirong
+    // 报警配置数据
+    public SceneDataSet alarmConfigArray = new SceneDataSet(false);//id2alarmConfigTrigger
+    public SceneDataSet alarmConfigTrigger = new SceneDataSet(false);
 
-	// 对象类型到对象实例清单
-	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>>();
+    // 对象类型,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 ConcurrentHashMap<SceneDataValue, String> sdv2point() {
-		return RepositoryBase.sdv2point;
-	}
+    // 对象类型到对象实例清单
+    public SceneDataSet classArrayZKT = new SceneDataSet(false);
+    public Map<String, Map<String, SceneDataSet>> objectArrayDicZKT = new HashMap<String, Map<String, SceneDataSet>>();
 
-	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;
-		}
-		return result;
-	}
+    // 图类型到边类型到变实例清单
+    public Map<String, Map<String, SceneDataSet>> IBMSArrayDic = new HashMap<String, Map<String, SceneDataSet>>();
 
+    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;
+    }
 }

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

@@ -20,6 +20,7 @@
 	<!-- iot-project的服务地址 -->
 	<!-- <iot_project url="http://192.168.0.30:8862/" /> -->
 	<iot_project url="http://192.168.100.33:9909/iot-project/" />
+	<zkt_alarm_config path="D-zkt_alarm_config" refresh_enable="true" />
 	<!-- 报警的websocket地址和服务地址 -->
 	<alarm enable="true" websocket="ws://192.168.100.33:9909/webSocketServer" rest="http://192.168.100.33:9909/zkt-alarm/" rest_get="true" />
 

BIN
ibms-data-sdk/src/main/resources/给水台账.xlsx