From ddb36e54bd51761138c536ccca889d3f80182334 Mon Sep 17 00:00:00 2001
From: lin <18010473990@163.com>
Date: 星期六, 08 一月 2022 16:47:20 +0800
Subject: [PATCH] 级联平台添加GPS订阅支持

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java |   58 ++++++++++++++++++++++++++++++----------------------------
 1 files changed, 30 insertions(+), 28 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
index de97c12..67bb56c 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
@@ -1,6 +1,7 @@
 package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
 
 import com.genersoft.iot.vmp.common.VideoManagerConstants;
+import com.genersoft.iot.vmp.conf.SipConfig;
 import com.genersoft.iot.vmp.conf.UserSetup;
 import com.genersoft.iot.vmp.gb28181.bean.*;
 import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
@@ -35,9 +36,7 @@
 import java.util.Iterator;
 
 /**
- * @description: Notify璇锋眰澶勭悊鍣�
- * @author: lawrencehj
- * @date: 2021骞�1鏈�27鏃�
+ * SIP鍛戒护绫诲瀷锛� NOTIFY璇锋眰
  */
 @Component
 public class NotifyRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
@@ -52,6 +51,9 @@
 	private IVideoManagerStorager storager;
 
 	@Autowired
+	private SipConfig sipConfig;
+
+	@Autowired
 	private IRedisCatchStorage redisCatchStorage;
 
 	@Autowired
@@ -60,9 +62,7 @@
 	@Autowired
 	private DeviceOffLineDetector offLineDetector;
 
-	private static final String NOTIFY_CATALOG = "Catalog";
-	private static final String NOTIFY_ALARM = "Alarm";
-	private static final String NOTIFY_MOBILE_POSITION = "MobilePosition";
+
 	private String method = "NOTIFY";
 
 	@Autowired
@@ -80,13 +80,13 @@
 			Element rootElement = getRootElement(evt);
 			String cmd = XmlUtil.getText(rootElement, "CmdType");
 
-			if (NOTIFY_CATALOG.equals(cmd)) {
+			if (CmdType.CATALOG.equals(cmd)) {
 				logger.info("鎺ユ敹鍒癈atalog閫氱煡");
 				processNotifyCatalogList(evt);
-			} else if (NOTIFY_ALARM.equals(cmd)) {
+			} else if (CmdType.ALARM.equals(cmd)) {
 				logger.info("鎺ユ敹鍒癆larm閫氱煡");
 				processNotifyAlarm(evt);
-			} else if (NOTIFY_MOBILE_POSITION.equals(cmd)) {
+			} else if (CmdType.MOBILE_POSITION.equals(cmd)) {
 				logger.info("鎺ユ敹鍒癕obilePosition閫氱煡");
 				processNotifyMobilePosition(evt);
 			} else {
@@ -110,7 +110,7 @@
 			MobilePosition mobilePosition = new MobilePosition();
 			Element deviceIdElement = rootElement.element("DeviceID");
 			String deviceId = deviceIdElement.getTextTrim().toString();
-			Device device = storager.queryVideoDevice(deviceId);
+			Device device = redisCatchStorage.getDevice(deviceId);
 			if (device != null) {
 				if (!StringUtils.isEmpty(device.getName())) {
 					mobilePosition.setDeviceName(device.getName());
@@ -158,12 +158,15 @@
 	 * @param evt
 	 */
 	private void processNotifyAlarm(RequestEvent evt) {
+		if (!sipConfig.isAlarm()) {
+			return;
+		}
 		try {
 			Element rootElement = getRootElement(evt);
 			Element deviceIdElement = rootElement.element("DeviceID");
 			String deviceId = deviceIdElement.getText().toString();
 
-			Device device = storager.queryVideoDevice(deviceId);
+			Device device = redisCatchStorage.getDevice(deviceId);
 			if (device == null) {
 				return;
 			}
@@ -230,9 +233,7 @@
 			String deviceId = SipUtils.getUserIdFromFromHeader(fromHeader);
 
 			Element rootElement = getRootElement(evt);
-			Element deviceIdElement = rootElement.element("DeviceID");
-			String channelId = deviceIdElement.getText();
-			Device device = storager.queryVideoDevice(deviceId);
+			Device device = redisCatchStorage.getDevice(deviceId);
 			if (device == null) {
 				return;
 			}
@@ -254,22 +255,23 @@
 						continue;
 					}
 					Element eventElement = itemDevice.element("Event");
+					DeviceChannel channel = channelContentHander(itemDevice);
 					switch (eventElement.getText().toUpperCase()) {
 						case "ON" : // 涓婄嚎
-							logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾涓婄嚎銆恵}銆戦�氱煡", device.getDeviceId(), channelId);
-							storager.deviceChannelOnline(deviceId, channelId);
+							logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾銆恵}銆戜笂绾块�氱煡", device.getDeviceId(), channel.getChannelId());
+							storager.deviceChannelOnline(deviceId, channel.getChannelId());
 							// 鍥炲200 OK
 							responseAck(evt, Response.OK);
 							break;
 						case "OFF" : // 绂荤嚎
-							logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾绂荤嚎銆恵}銆戦�氱煡", device.getDeviceId(), channelId);
-							storager.deviceChannelOffline(deviceId, channelId);
+							logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾銆恵}銆戠绾块�氱煡", device.getDeviceId(), channel.getChannelId());
+							storager.deviceChannelOffline(deviceId, channel.getChannelId());
 							// 鍥炲200 OK
 							responseAck(evt, Response.OK);
 							break;
 						case "VLOST" : // 瑙嗛涓㈠け
-							logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾瑙嗛涓㈠け銆恵}銆戦�氱煡", device.getDeviceId(), channelId);
-							storager.deviceChannelOffline(deviceId, channelId);
+							logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾銆恵}銆戣棰戜涪澶遍�氱煡", device.getDeviceId(), channel.getChannelId());
+							storager.deviceChannelOffline(deviceId, channel.getChannelId());
 							// 鍥炲200 OK
 							responseAck(evt, Response.OK);
 							break;
@@ -278,19 +280,17 @@
 							responseAck(evt, Response.OK);
 							break;
 						case "ADD" : // 澧炲姞
-							logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑澧炲姞閫氶亾銆恵}銆戦�氱煡", device.getDeviceId(), channelId);
-							DeviceChannel deviceChannel = channelContentHander(itemDevice, channelId);
-							storager.updateChannel(deviceId, deviceChannel);
+							logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑澧炲姞閫氶亾銆恵}銆戦�氱煡", device.getDeviceId(), channel.getChannelId());
+							storager.updateChannel(deviceId, channel);
 							responseAck(evt, Response.OK);
 							break;
 						case "DEL" : // 鍒犻櫎
-							logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑鍒犻櫎閫氶亾銆恵}銆戦�氱煡", device.getDeviceId(), channelId);
-							storager.delChannel(deviceId, channelId);
+							logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑鍒犻櫎閫氶亾銆恵}銆戦�氱煡", device.getDeviceId(), channel.getChannelId());
+							storager.delChannel(deviceId, channel.getChannelId());
 							responseAck(evt, Response.OK);
 							break;
 						case "UPDATE" : // 鏇存柊
-							logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑鏇存柊閫氶亾銆恵}銆戦�氱煡", device.getDeviceId(), channelId);
-							DeviceChannel channel = channelContentHander(itemDevice, channelId);
+							logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑鏇存柊閫氶亾銆恵}銆戦�氱煡", device.getDeviceId(), channel.getChannelId());
 							storager.updateChannel(deviceId, channel);
 							responseAck(evt, Response.OK);
 							break;
@@ -316,13 +316,15 @@
 		}
 	}
 
-	public DeviceChannel channelContentHander(Element itemDevice, String channelId){
+	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")) {

--
Gitblit v1.8.0