From 6b3732b8c43165342b7521b1e3ea788e471d58e8 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 19 六月 2023 20:19:31 +0800
Subject: [PATCH] Merge branch '2.6.8' into wvp-28181-2.0

---
 src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java |  541 ++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 344 insertions(+), 197 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 750cd8b..2117c1d 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,6 +2,8 @@
 
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
+import com.genersoft.iot.vmp.common.CivilCodePo;
+import com.genersoft.iot.vmp.conf.CivilCodeFileConf;
 import com.genersoft.iot.vmp.gb28181.bean.Device;
 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
 import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
@@ -192,7 +194,7 @@
         CivilCode, BusinessGroup,VirtualOrganization,Other
     }
 
-    public static DeviceChannel channelContentHander(Element itemDevice, Device device, String event){
+    public static DeviceChannel channelContentHandler(Element itemDevice, Device device, String event, CivilCodeFileConf civilCodeFileConf){
         DeviceChannel deviceChannel = new DeviceChannel();
         deviceChannel.setDeviceId(device.getDeviceId());
         Element channdelIdElement = itemDevice.element("DeviceID");
@@ -210,208 +212,353 @@
             // 闄や簡ADD鍜寀pdate鎯呭喌涓嬮渶瑕佽瘑鍒叏閮ㄥ唴瀹癸紝
             return deviceChannel;
         }
-
-        ChannelType channelType = ChannelType.Other;
-        if (channelId.length() <= 8) {
-            channelType = ChannelType.CivilCode;
+        Element nameElement = itemDevice.element("Name");
+        if (nameElement != null) {
+            deviceChannel.setName(nameElement.getText());
+        }
+        if(channelId.length() <= 8) {
             deviceChannel.setHasAudio(false);
-        }else {
-            if (channelId.length() == 20) {
-                int code = Integer.parseInt(channelId.substring(10, 13));
-                switch (code){
-                    case 215:
-                        channelType = ChannelType.BusinessGroup;
-                        deviceChannel.setHasAudio(false);
-                        break;
-                    case 216:
-                        channelType = ChannelType.VirtualOrganization;
-                        deviceChannel.setHasAudio(false);
-                        break;
-                    case 136:
-                    case 137:
-                    case 138:
-                        deviceChannel.setHasAudio(true);
-                        break;
-                    default:
-                        deviceChannel.setHasAudio(false);
-                        break;
-
-                }
-            }
-        }
-
-        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(true);
-            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);
+            CivilCodePo parentCode = civilCodeFileConf.getParentCode(channelId);
+            if (parentCode != null) {
+                deviceChannel.setParentId(parentCode.getCode());
+                deviceChannel.setCivilCode(parentCode.getCode());
             }else {
-                deviceChannel.setParentId(parentId);
+                logger.warn("[xml瑙f瀽] 鏃犳硶纭畾琛屾斂鍖哄垝{}鐨勪笂绾ц鏀垮尯鍒�", channelId);
             }
-            // 鍏煎璁惧閫氶亾淇℃伅涓嚜宸变负鑷繁鐖惰妭鐐圭殑鎯呭喌
-            if (deviceChannel.getParentId().equals(deviceChannel.getChannelId())) {
-                deviceChannel.setParentId(null);
-            }
-        }
-        deviceChannel.setBusinessGroupId(businessGroupID);
-        if (channelType.equals(ChannelType.BusinessGroup) || channelType.equals(ChannelType.VirtualOrganization)) {
-            // 涓氬姟鍒嗙粍鍜岃櫄鎷熺粍缁� 鍏朵粬瀛楁娌″繀瑕佽瘑鍒簡锛岄粯璁ゅ湪绾垮嵆鍙�
-            deviceChannel.setStatus(true);
-            deviceChannel.setParental(1);
-            deviceChannel.setCreateTime(DateUtil.getNow());
-            deviceChannel.setUpdateTime(DateUtil.getNow());
+            deviceChannel.setStatus(1);
             return deviceChannel;
-        }
-
-        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(true);
-            }
-            if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) {
-                deviceChannel.setStatus(false);
-            }
         }else {
-            deviceChannel.setStatus(true);
-        }
-        // 璇嗗埆鑷甫鐨勭洰褰曟爣璇�
-        String parental = XmlUtil.getText(itemDevice, "Parental");
-        // 鐢变簬娴峰悍浼氶敊璇殑鍙戦��65535浣滀负杩欓噷鐨勫彇鍊�,鎵�浠ヨ繖閲岄櫎闈炴槸0鍚﹀垯璁や负鏄�1
-        if (!ObjectUtils.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 (ObjectUtils.isEmpty(safetyWay)) {
-            deviceChannel.setSafetyWay(0);
-        } else {
-            deviceChannel.setSafetyWay(Integer.parseInt(safetyWay));
-        }
-
-        String registerWay = XmlUtil.getText(itemDevice, "RegisterWay");
-        if (ObjectUtils.isEmpty(registerWay)) {
-            deviceChannel.setRegisterWay(1);
-        } else {
-            deviceChannel.setRegisterWay(Integer.parseInt(registerWay));
-        }
-
-        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"));
-        if (XmlUtil.getText(itemDevice, "Port") == null || XmlUtil.getText(itemDevice, "Port") == "") {
-            deviceChannel.setPort(0);
-        } else {
-            deviceChannel.setPort(Integer.parseInt(XmlUtil.getText(itemDevice, "Port")));
-        }
-
-
-        String longitude = XmlUtil.getText(itemDevice, "Longitude");
-        if (NumericUtil.isDouble(longitude)) {
-            deviceChannel.setLongitude(Double.parseDouble(longitude));
-        } else {
-            deviceChannel.setLongitude(0.00);
-        }
-        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");
-            if(XmlUtil.getText(info, "PTZType") == null || "".equals(XmlUtil.getText(info, "PTZType"))){
-                deviceChannel.setPTZType(0);
-            }else{
-                deviceChannel.setPTZType(Integer.parseInt(XmlUtil.getText(info, "PTZType")));
+            if(channelId.length() != 20) {
+                logger.warn("[xml瑙f瀽] 澶辫触锛岀紪鍙蜂笉绗﹀悎鍥芥爣28181瀹氫箟锛� {}", channelId);
+                return null;
             }
-        } else {
-            deviceChannel.setPTZType(Integer.parseInt(XmlUtil.getText(itemDevice, "PTZType")));
+
+            int code = Integer.parseInt(channelId.substring(10, 13));
+            if (code == 136 || code == 137 || code == 138) {
+                deviceChannel.setHasAudio(true);
+            }else {
+                deviceChannel.setHasAudio(false);
+            }
+            // 璁惧鍘傚晢
+            String manufacturer = getText(itemDevice, "Manufacturer");
+            // 璁惧鍨嬪彿
+            String model = getText(itemDevice, "Model");
+            // 璁惧褰掑睘
+            String owner = getText(itemDevice, "Owner");
+            // 琛屾斂鍖哄煙
+            String civilCode = getText(itemDevice, "CivilCode");
+            // 铏氭嫙缁勭粐鎵�灞炵殑涓氬姟鍒嗙粍ID,涓氬姟鍒嗙粍鏍规嵁鐗瑰畾鐨勪笟鍔¢渶姹傚埗瀹�,涓�涓笟鍔″垎缁勫寘鍚竴缁勭壒瀹氱殑铏氭嫙缁勭粐
+            String businessGroupID = getText(itemDevice, "BusinessGroupID");
+            // 鐖惰澶�/鍖哄煙/绯荤粺ID
+            String parentID = getText(itemDevice, "ParentID");
+            if (parentID != null && parentID.equalsIgnoreCase("null")) {
+                parentID = null;
+            }
+            // 娉ㄥ唽鏂瑰紡(蹇呴��)缂虹渷涓�1;1:绗﹀悎IETFRFC3261鏍囧噯鐨勮璇佹敞鍐屾ā寮�;2:鍩轰簬鍙d护鐨勫弻鍚戣璇佹敞鍐屾ā寮�;3:鍩轰簬鏁板瓧璇佷功鐨勫弻鍚戣璇佹敞鍐屾ā寮�
+            String registerWay = getText(itemDevice, "RegisterWay");
+            // 淇濆瘑灞炴��(蹇呴��)缂虹渷涓�0;0:涓嶆秹瀵�,1:娑夊瘑
+            String secrecy = getText(itemDevice, "Secrecy");
+            // 瀹夎鍦板潃
+            String address = getText(itemDevice, "Address");
+
+            switch (code){
+                case 200:
+                    // 绯荤粺鐩綍
+                    if (!ObjectUtils.isEmpty(manufacturer)) {
+                        deviceChannel.setManufacture(manufacturer);
+                    }
+                    if (!ObjectUtils.isEmpty(model)) {
+                        deviceChannel.setModel(model);
+                    }
+                    if (!ObjectUtils.isEmpty(owner)) {
+                        deviceChannel.setOwner(owner);
+                    }
+                    if (!ObjectUtils.isEmpty(civilCode)) {
+                        deviceChannel.setCivilCode(civilCode);
+                        deviceChannel.setParentId(civilCode);
+                    }else {
+                        if (!ObjectUtils.isEmpty(parentID)) {
+                            deviceChannel.setParentId(parentID);
+                        }
+                    }
+                    if (!ObjectUtils.isEmpty(address)) {
+                        deviceChannel.setAddress(address);
+                    }
+                    deviceChannel.setStatus(1);
+                    if (!ObjectUtils.isEmpty(registerWay)) {
+                        try {
+                            deviceChannel.setRegisterWay(Integer.parseInt(registerWay));
+                        }catch (NumberFormatException exception) {
+                            logger.warn("[xml瑙f瀽] 浠庨�氶亾鏁版嵁鑾峰彇registerWay澶辫触锛� {}", registerWay);
+                        }
+                    }
+                    if (!ObjectUtils.isEmpty(secrecy)) {
+                        deviceChannel.setSecrecy(secrecy);
+                    }
+                    return deviceChannel;
+                case 215:
+                    // 涓氬姟鍒嗙粍
+                    deviceChannel.setStatus(1);
+                    if (!ObjectUtils.isEmpty(parentID)) {
+                        if (!parentID.trim().equalsIgnoreCase(device.getDeviceId())) {
+                            deviceChannel.setParentId(parentID);
+                        }
+                    }else {
+                        logger.warn("[xml瑙f瀽] 涓氬姟鍒嗙粍鏁版嵁涓己灏戝叧閿俊鎭�->ParentId");
+                        if (!ObjectUtils.isEmpty(civilCode)) {
+                            deviceChannel.setCivilCode(civilCode);
+                        }
+                    }
+                    break;
+                case 216:
+                    // 铏氭嫙缁勭粐
+                    deviceChannel.setStatus(1);
+                    if (!ObjectUtils.isEmpty(businessGroupID)) {
+                        deviceChannel.setBusinessGroupId(businessGroupID);
+                    }
+
+
+                    if (!ObjectUtils.isEmpty(parentID)) {
+                        if (parentID.contains("/")) {
+                            String[] parentIdArray = parentID.split("/");
+                            parentID = parentIdArray[parentIdArray.length - 1];
+                        }
+                        deviceChannel.setParentId(parentID);
+                    }else {
+                        if (!ObjectUtils.isEmpty(businessGroupID)) {
+                            deviceChannel.setParentId(businessGroupID);
+                        }
+                    }
+                    break;
+                default:
+                    // 璁惧鐩綍
+                    if (!ObjectUtils.isEmpty(manufacturer)) {
+                        deviceChannel.setManufacture(manufacturer);
+                    }
+                    if (!ObjectUtils.isEmpty(model)) {
+                        deviceChannel.setModel(model);
+                    }
+                    if (!ObjectUtils.isEmpty(owner)) {
+                        deviceChannel.setOwner(owner);
+                    }
+                    if (!ObjectUtils.isEmpty(civilCode)) {
+                        deviceChannel.setCivilCode(civilCode);
+                    }
+                    if (!ObjectUtils.isEmpty(businessGroupID)) {
+                        deviceChannel.setBusinessGroupId(businessGroupID);
+                    }
+
+                    // 璀﹀尯
+                    String block = getText(itemDevice, "Block");
+                    if (!ObjectUtils.isEmpty(block)) {
+                        deviceChannel.setBlock(block);
+                    }
+                    if (!ObjectUtils.isEmpty(address)) {
+                        deviceChannel.setAddress(address);
+                    }
+
+                    if (!ObjectUtils.isEmpty(secrecy)) {
+                        deviceChannel.setSecrecy(secrecy);
+                    }
+
+                    // 褰撲负璁惧鏃�,鏄惁鏈夊瓙璁惧(蹇呴��)1鏈�,0娌℃湁
+                    String parental = getText(itemDevice, "Parental");
+                    if (!ObjectUtils.isEmpty(parental)) {
+                        try {
+                            // 鐢变簬娴峰悍浼氶敊璇殑鍙戦��65535浣滀负杩欓噷鐨勫彇鍊�,鎵�浠ヨ繖閲岄櫎闈炴槸0鍚﹀垯璁や负鏄�1
+                            if (!ObjectUtils.isEmpty(parental) && parental.length() == 1 && Integer.parseInt(parental) == 0) {
+                                deviceChannel.setParental(0);
+                            }else {
+                                deviceChannel.setParental(1);
+                            }
+                        }catch (NumberFormatException e) {
+                            logger.warn("[xml瑙f瀽] 浠庨�氶亾鏁版嵁鑾峰彇 parental澶辫触锛� {}", parental);
+                        }
+                    }
+                    // 鐖惰澶�/鍖哄煙/绯荤粺ID
+                    String realParentId = parentID;
+                    if (!ObjectUtils.isEmpty(parentID)) {
+                        if (parentID.contains("/")) {
+                            String[] parentIdArray = parentID.split("/");
+                            realParentId = parentIdArray[parentIdArray.length - 1];
+                        }
+                        deviceChannel.setParentId(realParentId);
+                    }else {
+                        if (!ObjectUtils.isEmpty(businessGroupID)) {
+                            deviceChannel.setParentId(businessGroupID);
+                        }else {
+                            if (!ObjectUtils.isEmpty(civilCode)) {
+                                deviceChannel.setParentId(civilCode);
+                            }
+                        }
+                    }
+                    // 娉ㄥ唽鏂瑰紡
+                    if (!ObjectUtils.isEmpty(registerWay)) {
+                        try {
+                            int registerWayInt = Integer.parseInt(registerWay);
+                            deviceChannel.setRegisterWay(registerWayInt);
+                        }catch (NumberFormatException exception) {
+                            logger.warn("[xml瑙f瀽] 浠庨�氶亾鏁版嵁鑾峰彇registerWay澶辫触锛� {}", registerWay);
+                            deviceChannel.setRegisterWay(1);
+                        }
+                    }else {
+                        deviceChannel.setRegisterWay(1);
+                    }
+
+                    // 淇′护瀹夊叏妯″紡(鍙��)缂虹渷涓�0; 0:涓嶉噰鐢�;2:S/MIME 绛惧悕鏂瑰紡;3:S/MIME鍔犲瘑绛惧悕鍚屾椂閲囩敤鏂瑰紡;4:鏁板瓧鎽樿鏂瑰紡
+                    String safetyWay = getText(itemDevice, "SafetyWay");
+                    if (!ObjectUtils.isEmpty(safetyWay)) {
+                        try {
+                            deviceChannel.setSafetyWay(Integer.parseInt(safetyWay));
+                        }catch (NumberFormatException e) {
+                            logger.warn("[xml瑙f瀽] 浠庨�氶亾鏁版嵁鑾峰彇 safetyWay澶辫触锛� {}", safetyWay);
+                        }
+                    }
+
+                    // 璇佷功搴忓垪鍙�(鏈夎瘉涔︾殑璁惧蹇呴��)
+                    String certNum = getText(itemDevice, "CertNum");
+                    if (!ObjectUtils.isEmpty(certNum)) {
+                        deviceChannel.setCertNum(certNum);
+                    }
+
+                    // 璇佷功鏈夋晥鏍囪瘑(鏈夎瘉涔︾殑璁惧蹇呴��)缂虹渷涓�0;璇佷功鏈夋晥鏍囪瘑:0:鏃犳晥 1:鏈夋晥
+                    String certifiable = getText(itemDevice, "Certifiable");
+                    if (!ObjectUtils.isEmpty(certifiable)) {
+                        try {
+                            deviceChannel.setCertifiable(Integer.parseInt(certifiable));
+                        }catch (NumberFormatException e) {
+                            logger.warn("[xml瑙f瀽] 浠庨�氶亾鏁版嵁鑾峰彇 Certifiable澶辫触锛� {}", certifiable);
+                        }
+                    }
+
+                    // 鏃犳晥鍘熷洜鐮�(鏈夎瘉涔︿笖璇佷功鏃犳晥鐨勮澶囧繀閫�)
+                    String errCode = getText(itemDevice, "ErrCode");
+                    if (!ObjectUtils.isEmpty(errCode)) {
+                        try {
+                            deviceChannel.setErrCode(Integer.parseInt(errCode));
+                        }catch (NumberFormatException e) {
+                            logger.warn("[xml瑙f瀽] 浠庨�氶亾鏁版嵁鑾峰彇 ErrCode澶辫触锛� {}", errCode);
+                        }
+                    }
+
+                    // 璇佷功缁堟鏈夋晥鏈�(鏈夎瘉涔︾殑璁惧蹇呴��)
+                    String endTime = getText(itemDevice, "EndTime");
+                    if (!ObjectUtils.isEmpty(endTime)) {
+                        deviceChannel.setEndTime(endTime);
+                    }
+
+
+                    // 璁惧/鍖哄煙/绯荤粺IP鍦板潃
+                    String ipAddress = getText(itemDevice, "IPAddress");
+                    if (!ObjectUtils.isEmpty(ipAddress)) {
+                        deviceChannel.setIpAddress(ipAddress);
+                    }
+
+                    // 璁惧/鍖哄煙/绯荤粺绔彛
+                    String port = getText(itemDevice, "Port");
+                    if (!ObjectUtils.isEmpty(port)) {
+                        try {
+                            deviceChannel.setPort(Integer.parseInt(port));
+                        }catch (NumberFormatException e) {
+                            logger.warn("[xml瑙f瀽] 浠庨�氶亾鏁版嵁鑾峰彇 Port澶辫触锛� {}", port);
+                        }
+                    }
+
+                    // 璁惧鍙d护
+                    String password = getText(itemDevice, "Password");
+                    if (!ObjectUtils.isEmpty(password)) {
+                        deviceChannel.setPassword(password);
+                    }
+
+
+                    // 璁惧鐘舵��
+                    String status = getText(itemDevice, "Status");
+                    if (status != null) {
+                        // 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 longitude = getText(itemDevice, "Longitude");
+                    if (NumericUtil.isDouble(longitude)) {
+                        deviceChannel.setLongitude(Double.parseDouble(longitude));
+                    } else {
+                        deviceChannel.setLongitude(0.00);
+                    }
+
+                    // 绾害
+                    String latitude = getText(itemDevice, "Latitude");
+                    if (NumericUtil.isDouble(latitude)) {
+                        deviceChannel.setLatitude(Double.parseDouble(latitude));
+                    } else {
+                        deviceChannel.setLatitude(0.00);
+                    }
+
+                    deviceChannel.setGpsTime(DateUtil.getNow());
+
+                    // -鎽勫儚鏈虹被鍨嬫墿灞�,鏍囪瘑鎽勫儚鏈虹被鍨�:1-鐞冩満;2-鍗婄悆;3-鍥哄畾鏋満;4-閬ユ帶鏋満銆傚綋鐩綍椤逛负鎽勫儚鏈烘椂鍙��
+                    String ptzType = getText(itemDevice, "PTZType");
+                    if (ObjectUtils.isEmpty(ptzType)) {
+                        //鍏煎INFO涓殑淇℃伅
+                        Element info = itemDevice.element("Info");
+                        String ptzTypeFromInfo = XmlUtil.getText(info, "PTZType");
+                        if(!ObjectUtils.isEmpty(ptzTypeFromInfo)){
+                            try {
+                                deviceChannel.setPTZType(Integer.parseInt(ptzTypeFromInfo));
+                            }catch (NumberFormatException e){
+                                logger.warn("[xml瑙f瀽] 浠庨�氶亾鏁版嵁info涓幏鍙朠TZType澶辫触锛� {}", ptzTypeFromInfo);
+                            }
+                        }
+                    } else {
+                        try {
+                            deviceChannel.setPTZType(Integer.parseInt(ptzType));
+                        }catch (NumberFormatException e){
+                            logger.warn("[xml瑙f瀽] 浠庨�氶亾鏁版嵁涓幏鍙朠TZType澶辫触锛� {}", ptzType);
+                        }
+                    }
+
+                    // TODO 鎽勫儚鏈轰綅缃被鍨嬫墿灞曘��
+                    // 1-鐪侀檯妫�鏌ョ珯銆�
+                    // 2-鍏氭斂鏈哄叧銆�
+                    // 3-杞︾珯鐮佸ご銆�
+                    // 4-涓績骞垮満銆�
+                    // 5-浣撹偛鍦洪銆�
+                    // 6-鍟嗕笟涓績銆�
+                    // 7-瀹楁暀鍦烘墍銆�
+                    // 8-鏍″洯鍛ㄨ竟銆�
+                    // 9-娌诲畨澶嶆潅鍖哄煙銆�
+                    // 10-浜ら�氬共绾裤��
+                    // String positionType = getText(itemDevice, "PositionType");
+
+                    // TODO 鎽勫儚鏈哄畨瑁呬綅缃澶栥�佸鍐呭睘鎬с��1-瀹ゅ銆�2-瀹ゅ唴銆�
+                    // String roomType = getText(itemDevice, "RoomType");
+                    // TODO 鎽勫儚鏈虹敤閫斿睘鎬�
+                    // String useType = getText(itemDevice, "UseType");
+                    // TODO 鎽勫儚鏈鸿ˉ鍏夊睘鎬с��1-鏃犺ˉ鍏夈��2-绾㈠琛ュ厜銆�3-鐧藉厜琛ュ厜
+                    // String supplyLightType = getText(itemDevice, "SupplyLightType");
+                    // TODO 鎽勫儚鏈虹洃瑙嗘柟浣嶅睘鎬с��1-涓溿��2-瑗裤��3-鍗椼��4-鍖椼��5-涓滃崡銆�6-涓滃寳銆�7-瑗垮崡銆�8-瑗垮寳銆�
+                    // String directionType = getText(itemDevice, "DirectionType");
+                    // TODO 鎽勫儚鏈烘敮鎸佺殑鍒嗚鲸鐜�,鍙湁澶氫釜鍒嗚鲸鐜囧��,鍚勪釜鍙栧�奸棿浠モ��/鈥濆垎闅斻�傚垎杈ㄧ巼鍙栧�煎弬瑙侀檮褰� F涓璖DPf瀛楁瑙勫畾
+                    // String resolution = getText(itemDevice, "Resolution");
+
+                    // TODO 涓嬭浇鍊嶉�熻寖鍥�(鍙��),鍚勫彲閫夊弬鏁颁互鈥�/鈥濆垎闅�,濡傝澶囨敮鎸�1,2,4鍊嶉�熶笅杞藉垯搴斿啓涓衡��1/2/4
+                    // String downloadSpeed = getText(itemDevice, "DownloadSpeed");
+                    // TODO 绌哄煙缂栫爜鑳藉姏,鍙栧��0:涓嶆敮鎸�;1:1绾у寮�(1涓寮哄眰);2:2绾у寮�(2涓寮哄眰);3:3绾у寮�(3涓寮哄眰)
+                    // String svcSpaceSupportMode = getText(itemDevice, "SVCSpaceSupportMode");
+                    // TODO 鏃跺煙缂栫爜鑳藉姏,鍙栧��0:涓嶆敮鎸�;1:1绾у寮�;2:2绾у寮�;3:3绾у寮�
+                    // String svcTimeSupportMode = getText(itemDevice, "SVCTimeSupportMode");
+
+
+                    deviceChannel.setSecrecy(secrecy);
+                    break;
+            }
         }
 
         return deviceChannel;

--
Gitblit v1.8.0