From e53ce59166b38880db2762293cca06011b1f66a3 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 30 十二月 2021 18:25:26 +0800
Subject: [PATCH] Merge pull request #294 from lawrencehj/wvp-28181-2.0
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java | 53 +++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 45 insertions(+), 8 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
index 7349a7a..9e15068 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
@@ -7,6 +7,7 @@
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.session.CatalogDataCatch;
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.event.request.SIPRequestProcessorParent;
@@ -14,6 +15,7 @@
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.slf4j.Logger;
@@ -27,7 +29,11 @@
import javax.sip.SipException;
import javax.sip.message.Response;
import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
import java.util.Iterator;
+import java.util.List;
import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
@@ -37,6 +43,8 @@
private Logger logger = LoggerFactory.getLogger(CatalogResponseMessageHandler.class);
private final String cmdType = "Catalog";
+ private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
@Autowired
private ResponseMessageHandler responseMessageHandler;
@@ -45,6 +53,9 @@
@Autowired
private DeferredResultHolder deferredResultHolder;
+
+ @Autowired
+ private CatalogDataCatch catalogDataCatch;
@Autowired
private DeviceOffLineDetector offLineDetector;
@@ -67,9 +78,15 @@
try {
rootElement = getRootElement(evt, device.getCharset());
Element deviceListElement = rootElement.element("DeviceList");
+ Element sumNumElement = rootElement.element("SumNum");
+ if (sumNumElement == null || deviceListElement == null) {
+ responseAck(evt, Response.BAD_REQUEST, "xml error");
+ return;
+ }
+ int sumNum = Integer.parseInt(sumNumElement.getText());
Iterator<Element> deviceListIterator = deviceListElement.elementIterator();
if (deviceListIterator != null) {
-
+ List<DeviceChannel> channelList = new ArrayList<>();
// 閬嶅巻DeviceList
while (deviceListIterator.hasNext()) {
Element itemDevice = deviceListIterator.next();
@@ -84,6 +101,10 @@
String status = statusElement != null ? statusElement.getText().toString() : "ON";
DeviceChannel deviceChannel = new DeviceChannel();
deviceChannel.setName(channelName);
+ deviceChannel.setDeviceId(device.getDeviceId());
+ String now = this.format.format(new Date(System.currentTimeMillis()));
+ deviceChannel.setCreateTime(now);
+ deviceChannel.setUpdateTime(now);
deviceChannel.setChannelId(channelDeviceId);
// ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR鐨勫吋瀹规�у鐞�
if (status.equals("ON") || status.equals("On") || status.equals("ONLINE")) {
@@ -145,19 +166,35 @@
} else {
deviceChannel.setLatitude(0.00);
}
- if (getText(itemDevice, "PTZType") == null || getText(itemDevice, "PTZType") == "") {
+ Element InfoNode = channelDeviceElement.element("Info");
+ if (getText(InfoNode, "PTZType") == null || getText(InfoNode, "PTZType") == "") {
deviceChannel.setPTZType(0);
} else {
- deviceChannel.setPTZType(Integer.parseInt(getText(itemDevice, "PTZType")));
+ deviceChannel.setPTZType(Integer.parseInt(getText(InfoNode, "PTZType")));
}
deviceChannel.setHasAudio(true); // 榛樿鍚湁闊抽锛屾挱鏀炬椂鍐嶆鏌ユ槸鍚︽湁闊抽鍙婃槸鍚AC
- storager.updateChannel(device.getDeviceId(), deviceChannel);
+ channelList.add(deviceChannel);
}
- RequestMessage msg = new RequestMessage();
- msg.setKey(key);
- msg.setData(device);
- deferredResultHolder.invokeAllResult(msg);
+ catalogDataCatch.put(key, sumNum, device, channelList);
+ if (catalogDataCatch.get(key).size() == sumNum) {
+ // 鏁版嵁宸茬粡瀹屾暣鎺ユ敹
+ boolean resetChannelsResult = storager.resetChannels(device.getDeviceId(), catalogDataCatch.get(key));
+ RequestMessage msg = new RequestMessage();
+ msg.setKey(key);
+ WVPResult<Object> result = new WVPResult<>();
+ result.setCode(0);
+ result.setData(device);
+ if (resetChannelsResult) {
+ result.setMsg("鏇存柊鎴愬姛锛屽叡" + sumNum + "鏉★紝宸叉洿鏂�" + catalogDataCatch.get(key).size() + "鏉�");
+ }else {
+ result.setMsg("鎺ユ敹鎴愬姛锛屽啓鍏ュけ璐ワ紝鍏�" + sumNum + "鏉★紝宸叉帴鏀�" + catalogDataCatch.get(key).size() + "鏉�");
+ }
+ msg.setData(result);
+ deferredResultHolder.invokeAllResult(msg);
+ catalogDataCatch.del(key);
+ }
+
// 鍥炲200 OK
responseAck(evt, Response.OK);
if (offLineDetector.isOnline(device.getDeviceId())) {
--
Gitblit v1.8.0