From 3b5a37c270e5b6649b9a168ee753c2b3353a257a Mon Sep 17 00:00:00 2001
From: zouyaoji <370681295@qq.com>
Date: 星期六, 06 八月 2022 11:27:02 +0800
Subject: [PATCH] 前端显示媒体服务器配置时报错修复
---
src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java | 212 +++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 158 insertions(+), 54 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
index 1a87996..ced97ef 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
@@ -2,7 +2,11 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
+import com.genersoft.iot.vmp.gb28181.bean.TreeType;
+import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
+import com.genersoft.iot.vmp.utils.DateUtil;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
@@ -27,7 +31,7 @@
/**
* 鏃ュ織鏈嶅姟
*/
- private static Logger LOG = LoggerFactory.getLogger(XmlUtil.class);
+ private static Logger logger = LoggerFactory.getLogger(XmlUtil.class);
/**
* 瑙f瀽XML涓篋ocument瀵硅薄
@@ -44,7 +48,7 @@
try {
document = saxReader.read(sr);
} catch (DocumentException e) {
- LOG.error("瑙f瀽澶辫触", e);
+ logger.error("瑙f瀽澶辫触", e);
}
return null == document ? null : document.getRootElement();
}
@@ -180,87 +184,181 @@
return xml.getRootElement();
}
- public static DeviceChannel channelContentHander(Element itemDevice){
- Element channdelNameElement = itemDevice.element("Name");
- String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim().toString() : "";
- Element statusElement = itemDevice.element("Status");
- String status = statusElement != null ? statusElement.getTextTrim().toString() : "ON";
+ private enum ChannelType{
+ CivilCode, BusinessGroup,VirtualOrganization,Other
+ }
+
+ public static DeviceChannel channelContentHander(Element itemDevice, Device device, String event){
DeviceChannel deviceChannel = new DeviceChannel();
- deviceChannel.setName(channelName);
+ deviceChannel.setDeviceId(device.getDeviceId());
Element channdelIdElement = itemDevice.element("DeviceID");
- String channelId = channdelIdElement != null ? channdelIdElement.getTextTrim().toString() : "";
- deviceChannel.setChannelId(channelId);
- // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR鐨勫吋瀹规�у鐞�
- if (status.equals("ON") || status.equals("On") || status.equals("ONLINE") || status.equals("OK")) {
- deviceChannel.setStatus(1);
+ if (channdelIdElement == null) {
+ logger.warn("瑙f瀽Catalog娑堟伅鏃跺彂鐜扮己灏� DeviceID");
+ return null;
}
- if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) {
- deviceChannel.setStatus(0);
+ String channelId = channdelIdElement.getTextTrim();
+ if (StringUtils.isEmpty(channelId)) {
+ logger.warn("瑙f瀽Catalog娑堟伅鏃跺彂鐜扮己灏� DeviceID");
+ return null;
+ }
+ deviceChannel.setChannelId(channelId);
+ if (event != null && !event.equals(CatalogEvent.ADD) && !event.equals(CatalogEvent.UPDATE)) {
+ // 闄や簡ADD鍜寀pdate鎯呭喌涓嬮渶瑕佽瘑鍒叏閮ㄥ唴瀹癸紝
+ return deviceChannel;
}
- deviceChannel.setManufacture(XmlUtil.getText(itemDevice, "Manufacturer"));
- deviceChannel.setModel(XmlUtil.getText(itemDevice, "Model"));
- deviceChannel.setOwner(XmlUtil.getText(itemDevice, "Owner"));
- deviceChannel.setCivilCode(XmlUtil.getText(itemDevice, "CivilCode"));
- deviceChannel.setBlock(XmlUtil.getText(itemDevice, "Block"));
- deviceChannel.setAddress(XmlUtil.getText(itemDevice, "Address"));
- String businessGroupID = XmlUtil.getText(itemDevice, "BusinessGroupID");
- if (XmlUtil.getText(itemDevice, "Parental") == null
- || XmlUtil.getText(itemDevice, "Parental") == "") {
- deviceChannel.setParental(0);
- } else {
- deviceChannel.setParental(Integer.parseInt(XmlUtil.getText(itemDevice, "Parental")));
+ ChannelType channelType = ChannelType.Other;
+ if (channelId.length() <= 8) {
+ channelType = ChannelType.CivilCode;
+ }else {
+ if (channelId.length() == 20) {
+ int code = Integer.parseInt(channelId.substring(10, 13));
+ switch (code){
+ case 215:
+ channelType = ChannelType.BusinessGroup;
+ break;
+ case 216:
+ channelType = ChannelType.VirtualOrganization;
+ break;
+ default:
+ break;
+
+ }
+ }
}
- deviceChannel.setParentId(XmlUtil.getText(itemDevice, "ParentID"));
+
+ Element channdelNameElement = itemDevice.element("Name");
+ String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim() : "";
+ deviceChannel.setName(channelName);
+
+ String civilCode = XmlUtil.getText(itemDevice, "CivilCode");
+ deviceChannel.setCivilCode(civilCode);
+ if (channelType == ChannelType.CivilCode && civilCode == null) {
+ deviceChannel.setParental(1);
+ // 琛屾斂鍖哄垝濡傛灉娌℃湁浼犻�掑叿浣撳�硷紝鍒欐帹娴嬩竴涓�
+ if (channelId.length() > 2) {
+ deviceChannel.setCivilCode(channelId.substring(0, channelId.length() - 2));
+ }
+ }
+ if (channelType.equals(ChannelType.CivilCode)) {
+ // 琛屾斂鍖哄垝鍏朵粬瀛楁娌″繀瑕佽瘑鍒簡锛岄粯璁ゅ湪绾垮嵆鍙�
+ deviceChannel.setStatus(1);
+ deviceChannel.setParental(1);
+ deviceChannel.setCreateTime(DateUtil.getNow());
+ deviceChannel.setUpdateTime(DateUtil.getNow());
+ return deviceChannel;
+ }
+ /**
+ * 琛屾斂鍖哄垝灞曠ず璁惧鏍戜笌涓氬姟鍒嗙粍灞曠ず璁惧鏍戞槸涓ょ涓嶅悓鐨勬ā寮�
+ * 琛屾斂鍖哄垝灞曠ず璁惧鏍� 鍚勪釜鐩綍涔嬮棿涓昏闈燿eviceId鍋氬叧鑱�,鎽勫儚澶撮�氳繃CivilCode鎸囧畾鍏跺睘浜庨偅涓鏀垮尯鍒�;閮芥槸涓嶈秴杩囧崄浣嶇殑缂栧彿; 缁撴瀯濡備笅:
+ * 娌冲寳鐪�
+ * --> 鐭冲搴勫競
+ * --> 鎽勫儚澶�
+ *String parentId = XmlUtil.getText(itemDevice, "ParentID");
+ if (parentId != null) {
+ if (parentId.contains("/")) {
+ String lastParentId = parentId.substring(parentId.lastIndexOf("/") + 1);
+ String businessGroup = parentId.substring(0, parentId.indexOf("/"));
+ deviceChannel.setParentId(lastParentId);
+ }else {
+ deviceChannel.setParentId(parentId);
+ }
+ }
+ deviceCh --> 姝e畾鍘�
+ * --> 鎽勫儚澶�
+ * --> 鎽勫儚澶�
+ *
+ * 涓氬姟鍒嗙粍灞曠ず璁惧鏍戞槸椤剁骇鏄笟鍔″垎缁�,鍏朵笅鐨勮櫄鎷熺粍缁囬潬BusinessGroupID鎸囧畾鍏舵墍灞炵殑涓氬姟鍒嗙粍;鎽勫儚澶撮�氳繃ParentId鏉ユ寚瀹氬叾鎵�灞炰簬鐨勮櫄鎷熺粍缁�:
+ * 涓氬姟鍒嗙粍
+ * --> 铏氭嫙缁勭粐
+ * --> 鎽勫儚澶�
+ * --> 铏氭嫙缁勭粐
+ * --> 鎽勫儚澶�
+ * --> 鎽勫儚澶�
+ */
String parentId = XmlUtil.getText(itemDevice, "ParentID");
+ String businessGroupID = XmlUtil.getText(itemDevice, "BusinessGroupID");
if (parentId != null) {
if (parentId.contains("/")) {
String lastParentId = parentId.substring(parentId.lastIndexOf("/") + 1);
+ if (businessGroupID == null) {
+ businessGroupID = parentId.substring(0, parentId.indexOf("/"));
+ }
deviceChannel.setParentId(lastParentId);
}else {
deviceChannel.setParentId(parentId);
}
- }else {
- if (deviceChannel.getChannelId().length() <= 10) { // 姝ゆ椂涓鸿鏀垮尯鍒�, 涓婁笅绾ц鏀垮尯鍒掍娇鐢―eviceId鍏宠仈
- deviceChannel.setParentId(deviceChannel.getChannelId().substring(0, deviceChannel.getChannelId().length() - 2));
- }else if (deviceChannel.getChannelId().length() == 20) {
- if (Integer.parseInt(deviceChannel.getChannelId().substring(10, 13)) == 216) { // 铏氭嫙缁勭粐
- deviceChannel.setParentId(businessGroupID);
- }else if (deviceChannel.getCivilCode() != null) {
- // 璁惧锛� 鏃爌arentId鐨�20浣嶆槸浣跨敤CivilCode琛ㄧず涓婄骇鐨勮澶囷紝
- // 娉細215 涓氬姟鍒嗙粍鏄渶瑕佹湁parentId鐨�
- deviceChannel.setParentId(deviceChannel.getCivilCode());
- }
- }else {
- deviceChannel.setParentId(deviceChannel.getDeviceId());
- }
+ }
+ deviceChannel.setBusinessGroupId(businessGroupID);
+ if (channelType.equals(ChannelType.BusinessGroup) || channelType.equals(ChannelType.VirtualOrganization)) {
+ // 涓氬姟鍒嗙粍鍜岃櫄鎷熺粍缁� 鍏朵粬瀛楁娌″繀瑕佽瘑鍒簡锛岄粯璁ゅ湪绾垮嵆鍙�
+ deviceChannel.setStatus(1);
+ deviceChannel.setParental(1);
+ deviceChannel.setCreateTime(DateUtil.getNow());
+ deviceChannel.setUpdateTime(DateUtil.getNow());
+ return deviceChannel;
}
- if (XmlUtil.getText(itemDevice, "SafetyWay") == null
- || XmlUtil.getText(itemDevice, "SafetyWay") == "") {
+ Element statusElement = itemDevice.element("Status");
+
+ if (statusElement != null) {
+ String status = statusElement.getTextTrim().trim();
+ // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR鐨勫吋瀹规�у鐞�
+ if (status.equals("ON") || status.equals("On") || status.equals("ONLINE") || status.equals("OK")) {
+ deviceChannel.setStatus(1);
+ }
+ if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) {
+ deviceChannel.setStatus(0);
+ }
+ }else {
+ deviceChannel.setStatus(1);
+ }
+ // 璇嗗埆鑷甫鐨勭洰褰曟爣璇�
+ String parental = XmlUtil.getText(itemDevice, "Parental");
+ // 鐢变簬娴峰悍浼氶敊璇殑鍙戦��65535浣滀负杩欓噷鐨勫彇鍊�,鎵�浠ヨ繖閲岄櫎闈炴槸0鍚﹀垯璁や负鏄�1
+ if (!StringUtils.isEmpty(parental) && parental.length() == 1 && Integer.parseInt(parental) == 0) {
+ deviceChannel.setParental(0);
+ }else {
+ deviceChannel.setParental(1);
+ }
+
+
+ deviceChannel.setManufacture(XmlUtil.getText(itemDevice, "Manufacturer"));
+ deviceChannel.setModel(XmlUtil.getText(itemDevice, "Model"));
+ deviceChannel.setOwner(XmlUtil.getText(itemDevice, "Owner"));
+ deviceChannel.setCertNum(XmlUtil.getText(itemDevice, "CertNum"));
+ deviceChannel.setBlock(XmlUtil.getText(itemDevice, "Block"));
+ deviceChannel.setAddress(XmlUtil.getText(itemDevice, "Address"));
+ deviceChannel.setPassword(XmlUtil.getText(itemDevice, "Password"));
+
+ String safetyWay = XmlUtil.getText(itemDevice, "SafetyWay");
+ if (StringUtils.isEmpty(safetyWay)) {
deviceChannel.setSafetyWay(0);
} else {
- deviceChannel.setSafetyWay(Integer.parseInt(XmlUtil.getText(itemDevice, "SafetyWay")));
+ deviceChannel.setSafetyWay(Integer.parseInt(safetyWay));
}
- if (XmlUtil.getText(itemDevice, "RegisterWay") == null
- || XmlUtil.getText(itemDevice, "RegisterWay") == "") {
+
+ String registerWay = XmlUtil.getText(itemDevice, "RegisterWay");
+ if (StringUtils.isEmpty(registerWay)) {
deviceChannel.setRegisterWay(1);
} else {
- deviceChannel.setRegisterWay(Integer.parseInt(XmlUtil.getText(itemDevice, "RegisterWay")));
+ deviceChannel.setRegisterWay(Integer.parseInt(registerWay));
}
- deviceChannel.setCertNum(XmlUtil.getText(itemDevice, "CertNum"));
+
if (XmlUtil.getText(itemDevice, "Certifiable") == null
|| XmlUtil.getText(itemDevice, "Certifiable") == "") {
deviceChannel.setCertifiable(0);
} else {
deviceChannel.setCertifiable(Integer.parseInt(XmlUtil.getText(itemDevice, "Certifiable")));
}
+
if (XmlUtil.getText(itemDevice, "ErrCode") == null
|| XmlUtil.getText(itemDevice, "ErrCode") == "") {
deviceChannel.setErrCode(0);
} else {
deviceChannel.setErrCode(Integer.parseInt(XmlUtil.getText(itemDevice, "ErrCode")));
}
+
deviceChannel.setEndTime(XmlUtil.getText(itemDevice, "EndTime"));
deviceChannel.setSecrecy(XmlUtil.getText(itemDevice, "Secrecy"));
deviceChannel.setIpAddress(XmlUtil.getText(itemDevice, "IPAddress"));
@@ -269,17 +367,23 @@
} else {
deviceChannel.setPort(Integer.parseInt(XmlUtil.getText(itemDevice, "Port")));
}
- deviceChannel.setPassword(XmlUtil.getText(itemDevice, "Password"));
- if (NumericUtil.isDouble(XmlUtil.getText(itemDevice, "Longitude"))) {
- deviceChannel.setLongitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Longitude")));
+
+
+ String longitude = XmlUtil.getText(itemDevice, "Longitude");
+ if (NumericUtil.isDouble(longitude)) {
+ deviceChannel.setLongitude(Double.parseDouble(longitude));
} else {
deviceChannel.setLongitude(0.00);
}
- if (NumericUtil.isDouble(XmlUtil.getText(itemDevice, "Latitude"))) {
- deviceChannel.setLatitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Latitude")));
+ String latitude = XmlUtil.getText(itemDevice, "Latitude");
+ if (NumericUtil.isDouble(latitude)) {
+ deviceChannel.setLatitude(Double.parseDouble(latitude));
} else {
deviceChannel.setLatitude(0.00);
}
+ deviceChannel.setGpsTime(DateUtil.getNow());
+
+
if (XmlUtil.getText(itemDevice, "PTZType") == null || "".equals(XmlUtil.getText(itemDevice, "PTZType"))) {
//鍏煎INFO涓殑淇℃伅
Element info = itemDevice.element("Info");
--
Gitblit v1.8.0