From bf7ab3fe2ba246208d729901c33a9402209ee26a Mon Sep 17 00:00:00 2001
From: songww <songww@inspur.com>
Date: 星期五, 08 五月 2020 21:57:07 +0800
Subject: [PATCH] 优化代码结构,提供NVR录像检索接口

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java |  156 +++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 113 insertions(+), 43 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
index 9a5551b..453420a 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -2,8 +2,10 @@
 
 import java.io.ByteArrayInputStream;
 import java.text.ParseException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
 import javax.sip.InvalidArgumentException;
@@ -24,9 +26,14 @@
 import com.genersoft.iot.vmp.gb28181.SipLayer;
 import com.genersoft.iot.vmp.gb28181.bean.Device;
 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
+import com.genersoft.iot.vmp.gb28181.bean.RecordInfo;
+import com.genersoft.iot.vmp.gb28181.bean.RecordItem;
 import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
+import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
 import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
 import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor;
+import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
 
@@ -51,6 +58,9 @@
 	@Autowired
 	private EventPublisher publisher;
 	
+	@Autowired
+	private DeferredResultHolder deferredResultHolder;
+	
 	/**   
 	 * 澶勭悊MESSAGE璇锋眰
 	 *  
@@ -74,8 +84,40 @@
 			processMessageDeviceInfo(evt);
 		} else if (new String(request.getRawContent()).contains("<CmdType>Alarm</CmdType>")) {
 			processMessageAlarm(evt);
+		} else if (new String(request.getRawContent()).contains("<CmdType>recordInfo</CmdType>")) {
+			processMessageRecordInfo(evt);
 		}
 		
+	}
+	
+	/**
+	 * 鏀跺埌deviceInfo璁惧淇℃伅璇锋眰 澶勭悊
+	 * @param evt
+	 */
+	private void processMessageDeviceInfo(RequestEvent evt) {
+		try {
+			Element rootElement = getRootElement(evt);
+			Element deviceIdElement = rootElement.element("DeviceID");
+			String deviceId = deviceIdElement.getText().toString();
+			
+			Device device = storager.queryVideoDevice(deviceId);
+			if (device == null) {
+				return;
+			}
+			device.setName(XmlUtil.getText(rootElement,"DeviceName"));
+			device.setManufacturer(XmlUtil.getText(rootElement,"Manufacturer"));
+			device.setModel(XmlUtil.getText(rootElement,"Model"));
+			device.setFirmware(XmlUtil.getText(rootElement,"Firmware"));
+			storager.update(device);
+			
+			RequestMessage msg = new RequestMessage();
+			msg.setDeviceId(deviceId);
+			msg.setType(DeferredResultHolder.CALLBACK_CMD_DEVICEINFO);
+			msg.setData(device);
+			deferredResultHolder.invokeResult(msg);
+		} catch (DocumentException e) {
+			e.printStackTrace();
+		}
 	}
 	
 	/***
@@ -84,11 +126,7 @@
 	 */
 	private void processMessageCatalogList(RequestEvent evt) {
 		try {
-			Request request = evt.getRequest();
-			SAXReader reader = new SAXReader();
-			reader.setEncoding("GB2312");
-			Document xml = reader.read(new ByteArrayInputStream(request.getRawContent()));
-			Element rootElement = xml.getRootElement();
+			Element rootElement = getRootElement(evt);
 			Element deviceIdElement = rootElement.element("DeviceID");
 			String deviceId = deviceIdElement.getText().toString();
 			Element deviceListElement = rootElement.element("DeviceList");
@@ -152,36 +190,12 @@
 				}
 				// 鏇存柊
 				storager.update(device);
+				RequestMessage msg = new RequestMessage();
+				msg.setDeviceId(deviceId);
+				msg.setType(DeferredResultHolder.CALLBACK_CMD_CATALOG);
+				msg.setData(device);
+				deferredResultHolder.invokeResult(msg);
 			}
-		} catch (DocumentException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	/***
-	 * 鏀跺埌deviceInfo璁惧淇℃伅璇锋眰 澶勭悊
-	 * @param evt
-	 */
-	private void processMessageDeviceInfo(RequestEvent evt) {
-		try {
-			Request request = evt.getRequest();
-			SAXReader reader = new SAXReader();
-			// reader.setEncoding("GB2312");
-			Document xml = reader.read(new ByteArrayInputStream(request.getRawContent()));
-			Element rootElement = xml.getRootElement();
-			Element deviceIdElement = rootElement.element("DeviceID");
-			String deviceId = deviceIdElement.getText().toString();
-			
-			Device device = storager.queryVideoDevice(deviceId);
-			if (device == null) {
-				return;
-			}
-			device.setName(XmlUtil.getText(rootElement,"DeviceName"));
-			device.setManufacturer(XmlUtil.getText(rootElement,"Manufacturer"));
-			device.setModel(XmlUtil.getText(rootElement,"Model"));
-			device.setFirmware(XmlUtil.getText(rootElement,"Firmware"));
-			storager.update(device);
-			cmder.catalogQuery(device);
 		} catch (DocumentException e) {
 			e.printStackTrace();
 		}
@@ -193,11 +207,7 @@
 	 */
 	private void processMessageAlarm(RequestEvent evt) {
 		try {
-			Request request = evt.getRequest();
-			SAXReader reader = new SAXReader();
-			// reader.setEncoding("GB2312");
-			Document xml = reader.read(new ByteArrayInputStream(request.getRawContent()));
-			Element rootElement = xml.getRootElement();
+			Element rootElement = getRootElement(evt);
 			Element deviceIdElement = rootElement.element("DeviceID");
 			String deviceId = deviceIdElement.getText().toString();
 			
@@ -224,10 +234,7 @@
 		try {
 			Request request = evt.getRequest();
 			Response response = layer.getMessageFactory().createResponse(Response.OK,request);
-			SAXReader reader = new SAXReader();
-			Document xml = reader.read(new ByteArrayInputStream(request.getRawContent()));
-			// reader.setEncoding("GB2312");
-			Element rootElement = xml.getRootElement();
+			Element rootElement = getRootElement(evt);
 			Element deviceIdElement = rootElement.element("DeviceID");
 			transaction.sendResponse(response);
 			publisher.onlineEventPublish(deviceIdElement.getText(), VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
@@ -235,5 +242,68 @@
 			e.printStackTrace();
 		}
 	}
+	
+	/***
+	 * 鏀跺埌catalog璁惧鐩綍鍒楄〃璇锋眰 澶勭悊
+	 * @param evt
+	 */
+	private void processMessageRecordInfo(RequestEvent evt) {
+		try {
+			RecordInfo recordInfo = new RecordInfo();
+			Element rootElement = getRootElement(evt);
+			Element deviceIdElement = rootElement.element("DeviceID");
+			String deviceId = deviceIdElement.getText().toString();
+			recordInfo.setDeviceId(deviceId);
+			recordInfo.setName(XmlUtil.getText(rootElement,"Name"));
+			recordInfo.setSumNum(Integer.parseInt(XmlUtil.getText(rootElement,"SumNum")));
+			Element recordListElement = rootElement.element("RecordList");
+			if (recordListElement == null) {
+				return;
+			}
+			
+			Iterator<Element> recordListIterator = recordListElement.elementIterator();
+			if (recordListIterator != null) {
+				
+				List<RecordItem> recordList = new ArrayList<RecordItem>();
+				RecordItem record = new RecordItem();
+				// 閬嶅巻DeviceList
+				while (recordListIterator.hasNext()) {
+					Element itemRecord = recordListIterator.next();
+					Element recordElement = itemRecord.element("DeviceID");
+					if (recordElement == null) {
+						continue;
+					}
+					record.setDeviceId(XmlUtil.getText(itemRecord,"DeviceID"));
+					record.setName(XmlUtil.getText(itemRecord,"Name"));
+					record.setFilePath(XmlUtil.getText(itemRecord,"FilePath"));
+					record.setAddress(XmlUtil.getText(itemRecord,"Address"));
+					record.setStartTime(DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(XmlUtil.getText(itemRecord,"StartTime")));
+					record.setEndTime(DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(XmlUtil.getText(itemRecord,"EndTime")));
+					record.setSecrecy(itemRecord.element("Secrecy") == null? 0:Integer.parseInt(XmlUtil.getText(itemRecord,"Secrecy")));
+					record.setType(XmlUtil.getText(itemRecord,"Type"));
+					record.setRecordId(XmlUtil.getText(itemRecord,"RecordID"));
+					recordList.add(record);
+				}
+				recordInfo.setRecordList(recordList);
+			}
+			
+			
+			RequestMessage msg = new RequestMessage();
+			msg.setDeviceId(deviceId);
+			msg.setType(DeferredResultHolder.CALLBACK_CMD_RECORDINFO);
+			msg.setData(recordInfo);
+			deferredResultHolder.invokeResult(msg);
+		} catch (DocumentException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private Element getRootElement(RequestEvent evt) throws DocumentException {
+		Request request = evt.getRequest();
+		SAXReader reader = new SAXReader();
+		reader.setEncoding("GB2312");
+		Document xml = reader.read(new ByteArrayInputStream(request.getRawContent()));
+		return xml.getRootElement();
+	}
 
 }

--
Gitblit v1.8.0