648540858
2022-02-24 a42dda2bd3cc1cf8c20cc61e7ad9211eadecbaf3
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
@@ -6,6 +6,7 @@
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
@@ -49,6 +50,9 @@
   @Autowired
   private IVideoManagerStorager storager;
   @Autowired
   private EventPublisher eventPublisher;
   @Autowired
   private SipConfig sipConfig;
@@ -255,41 +259,43 @@
                  continue;
               }
               Element eventElement = itemDevice.element("Event");
               DeviceChannel channel = channelContentHander(itemDevice);
               DeviceChannel channel = XmlUtil.channelContentHander(itemDevice);
               channel.setDeviceId(device.getDeviceId());
               logger.debug("收到来自设备【{}】的通道: {}【{}】", device.getDeviceId(), channel.getName(), channel.getChannelId());
               switch (eventElement.getText().toUpperCase()) {
                  case "ON" : // 上线
                  case CatalogEvent.ON: // 上线
                     logger.info("收到来自设备【{}】的通道【{}】上线通知", device.getDeviceId(), channel.getChannelId());
                     storager.deviceChannelOnline(deviceId, channel.getChannelId());
                     // 回复200 OK
                     responseAck(evt, Response.OK);
                     break;
                  case "OFF" : // 离线
                  case CatalogEvent.OFF : // 离线
                     logger.info("收到来自设备【{}】的通道【{}】离线通知", device.getDeviceId(), channel.getChannelId());
                     storager.deviceChannelOffline(deviceId, channel.getChannelId());
                     // 回复200 OK
                     responseAck(evt, Response.OK);
                     break;
                  case "VLOST" : // 视频丢失
                  case CatalogEvent.VLOST: // 视频丢失
                     logger.info("收到来自设备【{}】的通道【{}】视频丢失通知", device.getDeviceId(), channel.getChannelId());
                     storager.deviceChannelOffline(deviceId, channel.getChannelId());
                     // 回复200 OK
                     responseAck(evt, Response.OK);
                     break;
                  case "DEFECT" : // 故障
                  case CatalogEvent.DEFECT: // 故障
                     // 回复200 OK
                     responseAck(evt, Response.OK);
                     break;
                  case "ADD" : // 增加
                  case CatalogEvent.ADD: // 增加
                     logger.info("收到来自设备【{}】的增加通道【{}】通知", device.getDeviceId(), channel.getChannelId());
                     storager.updateChannel(deviceId, channel);
                     responseAck(evt, Response.OK);
                     break;
                  case "DEL" : // 删除
                  case CatalogEvent.DEL: // 删除
                     logger.info("收到来自设备【{}】的删除通道【{}】通知", device.getDeviceId(), channel.getChannelId());
                     storager.delChannel(deviceId, channel.getChannelId());
                     responseAck(evt, Response.OK);
                     break;
                  case "UPDATE" : // 更新
                  case CatalogEvent.UPDATE: // 更新
                     logger.info("收到来自设备【{}】的更新通道【{}】通知", device.getDeviceId(), channel.getChannelId());
                     storager.updateChannel(deviceId, channel);
                     responseAck(evt, Response.OK);
@@ -298,6 +304,8 @@
                     responseAck(evt, Response.BAD_REQUEST, "event not found");
               }
               // 转发变化信息
               eventPublisher.catalogEventPublish(null, channel, eventElement.getText().toUpperCase());
            }
@@ -315,93 +323,6 @@
         e.printStackTrace();
      }
   }
   public 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";
      DeviceChannel deviceChannel = new DeviceChannel();
      deviceChannel.setName(channelName);
      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")) {
         deviceChannel.setStatus(1);
      }
      if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) {
         deviceChannel.setStatus(0);
      }
      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"));
      if (XmlUtil.getText(itemDevice, "Parental") == null
            || XmlUtil.getText(itemDevice, "Parental") == "") {
         deviceChannel.setParental(0);
      } else {
         deviceChannel.setParental(Integer.parseInt(XmlUtil.getText(itemDevice, "Parental")));
      }
      deviceChannel.setParentId(XmlUtil.getText(itemDevice, "ParentID"));
      if (XmlUtil.getText(itemDevice, "SafetyWay") == null
            || XmlUtil.getText(itemDevice, "SafetyWay") == "") {
         deviceChannel.setSafetyWay(0);
      } else {
         deviceChannel.setSafetyWay(Integer.parseInt(XmlUtil.getText(itemDevice, "SafetyWay")));
      }
      if (XmlUtil.getText(itemDevice, "RegisterWay") == null
            || XmlUtil.getText(itemDevice, "RegisterWay") == "") {
         deviceChannel.setRegisterWay(1);
      } else {
         deviceChannel.setRegisterWay(Integer.parseInt(XmlUtil.getText(itemDevice, "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"));
      if (XmlUtil.getText(itemDevice, "Port") == null || XmlUtil.getText(itemDevice, "Port") == "") {
         deviceChannel.setPort(0);
      } 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")));
      } else {
         deviceChannel.setLongitude(0.00);
      }
      if (NumericUtil.isDouble(XmlUtil.getText(itemDevice, "Latitude"))) {
         deviceChannel.setLatitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Latitude")));
      } else {
         deviceChannel.setLatitude(0.00);
      }
      if (XmlUtil.getText(itemDevice, "PTZType") == null
            || XmlUtil.getText(itemDevice, "PTZType") == "") {
         deviceChannel.setPTZType(0);
      } else {
         deviceChannel.setPTZType(Integer.parseInt(XmlUtil.getText(itemDevice, "PTZType")));
      }
      deviceChannel.setHasAudio(true); // 默认含有音频,播放时再检查是否有音频及是否AAC
      return deviceChannel;
   }
   public void setCmder(SIPCommander cmder) {
   }