|  | @@ -4,6 +4,8 @@ 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;
 | 
	
	
		
			
				|  | @@ -29,7 +31,7 @@ public class XmlUtil {
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 日志服务
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    private static Logger LOG = LoggerFactory.getLogger(XmlUtil.class);
 | 
	
		
			
				|  |  | +    private static Logger logger = LoggerFactory.getLogger(XmlUtil.class);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 解析XML为Document对象
 | 
	
	
		
			
				|  | @@ -46,7 +48,7 @@ public class XmlUtil {
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  |              document = saxReader.read(sr);
 | 
	
		
			
				|  |  |          } catch (DocumentException e) {
 | 
	
		
			
				|  |  | -            LOG.error("解析失败", e);
 | 
	
		
			
				|  |  | +            logger.error("解析失败", e);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return null == document ? null : document.getRootElement();
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -182,47 +184,69 @@ public class XmlUtil {
 | 
	
		
			
				|  |  |          return xml.getRootElement();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    public static DeviceChannel channelContentHander(Element itemDevice, Device device){
 | 
	
		
			
				|  |  | -        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() : "";
 | 
	
		
			
				|  |  | +        if (channdelIdElement == null) {
 | 
	
		
			
				|  |  | +            logger.warn("解析Catalog消息时发现缺少 DeviceID");
 | 
	
		
			
				|  |  | +            return null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        String channelId = channdelIdElement.getTextTrim();
 | 
	
		
			
				|  |  | +        if (StringUtils.isEmpty(channelId)) {
 | 
	
		
			
				|  |  | +            logger.warn("解析Catalog消息时发现缺少 DeviceID");
 | 
	
		
			
				|  |  | +            return null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          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 (event != null && !event.equals(CatalogEvent.ADD) && !event.equals(CatalogEvent.UPDATE)) {
 | 
	
		
			
				|  |  | +            // 除了ADD和update情况下需要识别全部内容,
 | 
	
		
			
				|  |  | +            return deviceChannel;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) {
 | 
	
		
			
				|  |  | -            deviceChannel.setStatus(0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        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.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").equals("")) {
 | 
	
		
			
				|  |  | -            if (deviceChannel.getChannelId().length() <= 10
 | 
	
		
			
				|  |  | -                    || (deviceChannel.getChannelId().length() == 20 && (
 | 
	
		
			
				|  |  | -                            Integer.parseInt(deviceChannel.getChannelId().substring(10, 13)) == 215
 | 
	
		
			
				|  |  | -                                    || Integer.parseInt(deviceChannel.getChannelId().substring(10, 13)) == 216
 | 
	
		
			
				|  |  | -                            )
 | 
	
		
			
				|  |  | -                        )
 | 
	
		
			
				|  |  | -            ) {
 | 
	
		
			
				|  |  | -                deviceChannel.setParental(1);
 | 
	
		
			
				|  |  | -            }else {
 | 
	
		
			
				|  |  | -                deviceChannel.setParental(0);
 | 
	
		
			
				|  |  | +        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));
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -            // 由于海康会错误的发送65535作为这里的取值,所以这里除非是0否则认为是1
 | 
	
		
			
				|  |  | -            deviceChannel.setParental(Integer.parseInt(XmlUtil.getText(itemDevice, "Parental")) == 1?1:0);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (channelType.equals(ChannelType.CivilCode)) {
 | 
	
		
			
				|  |  | +            // 行政区划其他字段没必要识别了,默认在线即可
 | 
	
		
			
				|  |  | +            deviceChannel.setStatus(1);
 | 
	
		
			
				|  |  | +            deviceChannel.setParental(1);
 | 
	
		
			
				|  |  | +            deviceChannel.setCreateTime(DateUtil.getNow());
 | 
	
		
			
				|  |  | +            deviceChannel.setUpdateTime(DateUtil.getNow());
 | 
	
		
			
				|  |  | +            return deviceChannel;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          /**
 | 
	
		
			
				|  |  |           * 行政区划展示设备树与业务分组展示设备树是两种不同的模式
 | 
	
	
		
			
				|  | @@ -230,7 +254,17 @@ public class XmlUtil {
 | 
	
		
			
				|  |  |           * 河北省
 | 
	
		
			
				|  |  |           *    --> 石家庄市
 | 
	
		
			
				|  |  |           *          --> 摄像头
 | 
	
		
			
				|  |  | -         *          --> 正定县
 | 
	
		
			
				|  |  | +         *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          --> 正定县
 | 
	
		
			
				|  |  |           *                  --> 摄像头
 | 
	
		
			
				|  |  |           *                  --> 摄像头
 | 
	
		
			
				|  |  |           *
 | 
	
	
		
			
				|  | @@ -243,59 +277,88 @@ public class XmlUtil {
 | 
	
		
			
				|  |  |           *             --> 摄像头
 | 
	
		
			
				|  |  |           */
 | 
	
		
			
				|  |  |          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);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          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;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -//        else {
 | 
	
		
			
				|  |  | -//            if (deviceChannel.getChannelId().length() <= 10) { // 此时为行政区划, 上下级行政区划使用DeviceId关联
 | 
	
		
			
				|  |  | -//                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.setBusinessGroupId(businessGroupID);
 | 
	
		
			
				|  |  | -//                }else if (Integer.parseInt(device.getDeviceId().substring(10, 13) )== 118) {//NVR 如果上级设备编号是NVR则直接将NVR的编号设置给通道的上级编号
 | 
	
		
			
				|  |  | -//                    deviceChannel.setParentId(device.getDeviceId());
 | 
	
		
			
				|  |  | -//                }else if (deviceChannel.getCivilCode() != null) {
 | 
	
		
			
				|  |  | -//                    // 设备, 无parentId的20位是使用CivilCode表示上级的设备,
 | 
	
		
			
				|  |  | -//                    // 注:215 业务分组是需要有parentId的
 | 
	
		
			
				|  |  | -//                    deviceChannel.setParentId(deviceChannel.getCivilCode());
 | 
	
		
			
				|  |  | -//                }
 | 
	
		
			
				|  |  | -//            }else {
 | 
	
		
			
				|  |  | -//                deviceChannel.setParentId(deviceChannel.getDeviceId());
 | 
	
		
			
				|  |  | -//            }
 | 
	
		
			
				|  |  | -//        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        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"));
 | 
	
	
		
			
				|  | @@ -304,43 +367,23 @@ public class XmlUtil {
 | 
	
		
			
				|  |  |          } 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 (deviceChannel.getLongitude()*deviceChannel.getLatitude() > 0) {
 | 
	
		
			
				|  |  | -            if ("WGS84".equals(device.getGeoCoordSys())) {
 | 
	
		
			
				|  |  | -                deviceChannel.setLongitudeWgs84(deviceChannel.getLongitude());
 | 
	
		
			
				|  |  | -                deviceChannel.setLatitudeWgs84(deviceChannel.getLatitude());
 | 
	
		
			
				|  |  | -                Double[] position = Coordtransform.WGS84ToGCJ02(deviceChannel.getLongitude(), deviceChannel.getLatitude());
 | 
	
		
			
				|  |  | -                deviceChannel.setLongitudeGcj02(position[0]);
 | 
	
		
			
				|  |  | -                deviceChannel.setLatitudeGcj02(position[1]);
 | 
	
		
			
				|  |  | -            }else if ("GCJ02".equals(device.getGeoCoordSys())) {
 | 
	
		
			
				|  |  | -                deviceChannel.setLongitudeGcj02(deviceChannel.getLongitude());
 | 
	
		
			
				|  |  | -                deviceChannel.setLatitudeGcj02(deviceChannel.getLatitude());
 | 
	
		
			
				|  |  | -                Double[] position = Coordtransform.GCJ02ToWGS84(deviceChannel.getLongitude(), deviceChannel.getLatitude());
 | 
	
		
			
				|  |  | -                deviceChannel.setLongitudeWgs84(position[0]);
 | 
	
		
			
				|  |  | -                deviceChannel.setLatitudeWgs84(position[1]);
 | 
	
		
			
				|  |  | -            }else {
 | 
	
		
			
				|  |  | -                deviceChannel.setLongitudeGcj02(0.00);
 | 
	
		
			
				|  |  | -                deviceChannel.setLatitudeGcj02(0.00);
 | 
	
		
			
				|  |  | -                deviceChannel.setLongitudeWgs84(0.00);
 | 
	
		
			
				|  |  | -                deviceChannel.setLatitudeWgs84(0.00);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }else {
 | 
	
		
			
				|  |  | -            deviceChannel.setLongitudeGcj02(deviceChannel.getLongitude());
 | 
	
		
			
				|  |  | -            deviceChannel.setLatitudeGcj02(deviceChannel.getLatitude());
 | 
	
		
			
				|  |  | -            deviceChannel.setLongitudeWgs84(deviceChannel.getLongitude());
 | 
	
		
			
				|  |  | -            deviceChannel.setLatitudeWgs84(deviceChannel.getLatitude());
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          if (XmlUtil.getText(itemDevice, "PTZType") == null || "".equals(XmlUtil.getText(itemDevice, "PTZType"))) {
 | 
	
		
			
				|  |  |              //兼容INFO中的信息
 | 
	
		
			
				|  |  |              Element info = itemDevice.element("Info");
 |