From 3955e6ed53d450f8faf488d4b74ba0c0c83c5aaa Mon Sep 17 00:00:00 2001
From: 648540858 <456panlinlin>
Date: 星期二, 12 四月 2022 21:06:21 +0800
Subject: [PATCH] 异步通道刷新,优化ui效果
---
src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java | 34 +-
web_src/src/components/DeviceList.vue | 45 ++-
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 24 ++
src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java | 66 ++++-
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 48 ++--
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java | 75 +++---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java | 24 -
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java | 20 +
src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java | 4
src/main/java/com/genersoft/iot/vmp/gb28181/bean/CatalogData.java | 22 +
src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java | 21 +
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java | 13 +
web_src/src/components/dialog/SyncChannelProgress.vue | 102 ++++++++
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 1
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 1
src/main/java/com/genersoft/iot/vmp/gb28181/bean/SyncStatus.java | 34 ++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 124 ++++++---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java | 1
20 files changed, 492 insertions(+), 171 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
index c4d49a8..e1d7c49 100644
--- a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
+++ b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
@@ -22,6 +22,9 @@
public static final String DEVICE_PREFIX = "VMP_DEVICE_";
+ // 璁惧鍚屾瀹屾垚
+ public static final String DEVICE_SYNC_PREFIX = "VMP_DEVICE_SYNC_";
+
public static final String CACHEKEY_PREFIX = "VMP_CHANNEL_";
public static final String KEEPLIVEKEY_PREFIX = "VMP_KEEPALIVE_";
@@ -69,6 +72,7 @@
public static final String SYSTEM_INFO_NET_PREFIX = "VMP_SYSTEM_INFO_NET_";
+
//************************** redis 娑堟伅*********************************
// 娴佸彉鍖栫殑閫氱煡
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CatalogData.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CatalogData.java
index c74fb87..40f676e 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CatalogData.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/CatalogData.java
@@ -8,6 +8,12 @@
private List<DeviceChannel> channelList;
private Date lastTime;
private Device device;
+ private String errorMsg;
+
+ public enum CatalogDataStatus{
+ ready, runIng, end
+ }
+ private CatalogDataStatus status;
public int getTotal() {
return total;
@@ -40,4 +46,20 @@
public void setDevice(Device device) {
this.device = device;
}
+
+ public String getErrorMsg() {
+ return errorMsg;
+ }
+
+ public void setErrorMsg(String errorMsg) {
+ this.errorMsg = errorMsg;
+ }
+
+ public CatalogDataStatus getStatus() {
+ return status;
+ }
+
+ public void setStatus(CatalogDataStatus status) {
+ this.status = status;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SyncStatus.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SyncStatus.java
new file mode 100644
index 0000000..2ae50e6
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SyncStatus.java
@@ -0,0 +1,34 @@
+package com.genersoft.iot.vmp.gb28181.bean;
+
+/**
+ * 鎽勫儚鏈哄悓姝ョ姸鎬�
+ */
+public class SyncStatus {
+ private int total;
+ private int current;
+ private String errorMsg;
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public int getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(int current) {
+ this.current = current;
+ }
+
+ public String getErrorMsg() {
+ return errorMsg;
+ }
+
+ public void setErrorMsg(String errorMsg) {
+ this.errorMsg = errorMsg;
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
index 755967b..fc9eb27 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
@@ -97,8 +97,6 @@
}
// 澶勭悊涓婄嚎鐩戝惉
storager.updateDevice(device);
- List<DeviceChannel> deviceChannelList = storager.queryOnlineChannelsByDeviceId(device.getDeviceId());
- eventPublisher.catalogEventPublish(null, deviceChannelList, CatalogEvent.ON);
// 涓婄嚎娣诲姞璁㈤槄
if (device.getSubscribeCycleForCatalog() > 0) {
deviceService.addCatalogSubscribe(device);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java
index 199f826..fbc2a32 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java
@@ -3,6 +3,7 @@
import com.genersoft.iot.vmp.gb28181.bean.CatalogData;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
+import com.genersoft.iot.vmp.gb28181.bean.SyncStatus;
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
@@ -25,6 +26,17 @@
@Autowired
private IVideoManagerStorage storager;
+ public void addReady(String key) {
+ CatalogData catalogData = data.get(key);
+ if (catalogData == null || catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end)) {
+ catalogData = new CatalogData();
+ catalogData.setChannelList(new ArrayList<>());
+ catalogData.setStatus(CatalogData.CatalogDataStatus.ready);
+ catalogData.setLastTime(new Date(System.currentTimeMillis()));
+ data.put(key, catalogData);
+ }
+ }
+
public void put(String key, int total, Device device, List<DeviceChannel> deviceChannelList) {
CatalogData catalogData = data.get(key);
if (catalogData == null) {
@@ -32,10 +44,16 @@
catalogData.setTotal(total);
catalogData.setDevice(device);
catalogData.setChannelList(new ArrayList<>());
+ catalogData.setStatus(CatalogData.CatalogDataStatus.runIng);
+ catalogData.setLastTime(new Date(System.currentTimeMillis()));
data.put(key, catalogData);
+ }else {
+ catalogData.setTotal(total);
+ catalogData.setDevice(device);
+ catalogData.setStatus(CatalogData.CatalogDataStatus.runIng);
+ catalogData.getChannelList().addAll(deviceChannelList);
+ catalogData.setLastTime(new Date(System.currentTimeMillis()));
}
- catalogData.getChannelList().addAll(deviceChannelList);
- catalogData.setLastTime(new Date(System.currentTimeMillis()));
}
public List<DeviceChannel> get(String key) {
@@ -50,6 +68,16 @@
return catalogData.getTotal();
}
+ public SyncStatus getSyncStatus(String key) {
+ CatalogData catalogData = data.get(key);
+ if (catalogData == null) return null;
+ SyncStatus syncStatus = new SyncStatus();
+ syncStatus.setCurrent(catalogData.getChannelList().size());
+ syncStatus.setTotal(catalogData.getTotal());
+ syncStatus.setErrorMsg(catalogData.getErrorMsg());
+ return syncStatus;
+ }
+
public void del(String key) {
data.remove(key);
}
@@ -57,24 +85,32 @@
@Scheduled(fixedRate = 5 * 1000) //姣�5绉掓墽琛屼竴娆�, 鍙戠幇鏁版嵁5绉掓湭鏇存柊鍒欑Щ闄ゆ暟鎹苟璁や负鏁版嵁鎺ユ敹瓒呮椂
private void timerTask(){
Set<String> keys = data.keySet();
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(new Date());
- calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) - 5);
+ Calendar calendarBefore5S = Calendar.getInstance();
+ calendarBefore5S.setTime(new Date());
+ calendarBefore5S.set(Calendar.SECOND, calendarBefore5S.get(Calendar.SECOND) - 5);
+
+ Calendar calendarBefore30S = Calendar.getInstance();
+ calendarBefore30S.setTime(new Date());
+ calendarBefore30S.set(Calendar.SECOND, calendarBefore30S.get(Calendar.SECOND) - 30);
for (String key : keys) {
CatalogData catalogData = data.get(key);
- if (catalogData.getLastTime().before(calendar.getTime())) {
-
+ if (catalogData.getLastTime().before(calendarBefore5S.getTime())) { // 瓒呰繃浜旂鏀朵笉鍒版秷鎭换鍔¤秴鏃讹紝 鍙洿鏂拌繖涓�閮ㄥ垎鏁版嵁
storager.resetChannels(catalogData.getDevice().getDeviceId(), catalogData.getChannelList());
- RequestMessage msg = new RequestMessage();
- msg.setKey(key);
- WVPResult<Object> result = new WVPResult<>();
- result.setCode(0);
- result.setMsg("鏇存柊鎴愬姛锛屽叡" + catalogData.getTotal() + "鏉★紝宸叉洿鏂�" + catalogData.getChannelList().size() + "鏉�");
- result.setData(catalogData.getDevice());
- msg.setData(result);
- deferredResultHolder.invokeAllResult(msg);
+ String errorMsg = "鏇存柊鎴愬姛锛屽叡" + catalogData.getTotal() + "鏉★紝宸叉洿鏂�" + catalogData.getChannelList().size() + "鏉�";
+ catalogData.setStatus(CatalogData.CatalogDataStatus.end);
+ catalogData.setErrorMsg(errorMsg);
+ }
+ if (catalogData.getLastTime().before(calendarBefore30S.getTime())) { // 瓒呰繃涓夊崄绉掞紝濡傛灉鏍囪涓篹nd鍒欏垹闄�
data.remove(key);
}
}
}
+
+
+ public void setChannelSyncEnd(String key, String errorMsg) {
+ CatalogData catalogData = data.get(key);
+ if (catalogData == null)return;
+ catalogData.setStatus(CatalogData.CatalogDataStatus.end);
+ catalogData.setErrorMsg(errorMsg);
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
index 1f58a15..a900819 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
@@ -46,6 +46,7 @@
* @return
*/
boolean catalogQuery(DeviceChannel channel, ParentPlatform parentPlatform, String sn, String fromTag, int size);
+ boolean catalogQuery(List<DeviceChannel> channels, ParentPlatform parentPlatform, String sn, String fromTag);
/**
* 鍚戜笂绾у洖澶岲eviceInfo鏌ヨ淇℃伅
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
index 299799f..123d0e7 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -235,7 +235,7 @@
String cmdStr= cmdString(leftRight, upDown, inOut, moveSpeed, zoomSpeed);
StringBuffer ptzXml = new StringBuffer(200);
String charset = device.getCharset();
- ptzXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ ptzXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
ptzXml.append("<Control>\r\n");
ptzXml.append("<CmdType>DeviceControl</CmdType>\r\n");
ptzXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -278,7 +278,7 @@
logger.debug("鎺у埗瀛楃涓诧細" + cmdStr);
StringBuffer ptzXml = new StringBuffer(200);
String charset = device.getCharset();
- ptzXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ ptzXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
ptzXml.append("<Control>\r\n");
ptzXml.append("<CmdType>DeviceControl</CmdType>\r\n");
ptzXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -314,7 +314,7 @@
try {
StringBuffer ptzXml = new StringBuffer(200);
String charset = device.getCharset();
- ptzXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ ptzXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
ptzXml.append("<Control>\r\n");
ptzXml.append("<CmdType>DeviceControl</CmdType>\r\n");
ptzXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -778,7 +778,7 @@
try {
StringBuffer broadcastXml = new StringBuffer(200);
String charset = device.getCharset();
- broadcastXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ broadcastXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
broadcastXml.append("<Notify>\r\n");
broadcastXml.append("<CmdType>Broadcast</CmdType>\r\n");
broadcastXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -804,7 +804,7 @@
try {
StringBuffer broadcastXml = new StringBuffer(200);
String charset = device.getCharset();
- broadcastXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ broadcastXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
broadcastXml.append("<Notify>\r\n");
broadcastXml.append("<CmdType>Broadcast</CmdType>\r\n");
broadcastXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -837,7 +837,7 @@
try {
StringBuffer cmdXml = new StringBuffer(200);
String charset = device.getCharset();
- cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
cmdXml.append("<Control>\r\n");
cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -873,7 +873,7 @@
try {
StringBuffer cmdXml = new StringBuffer(200);
String charset = device.getCharset();
- cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
cmdXml.append("<Control>\r\n");
cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -906,7 +906,7 @@
try {
StringBuffer cmdXml = new StringBuffer(200);
String charset = device.getCharset();
- cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
cmdXml.append("<Control>\r\n");
cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -938,7 +938,7 @@
try {
StringBuffer cmdXml = new StringBuffer(200);
String charset = device.getCharset();
- cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
cmdXml.append("<Control>\r\n");
cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -983,7 +983,7 @@
try {
StringBuffer cmdXml = new StringBuffer(200);
String charset = device.getCharset();
- cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
cmdXml.append("<Control>\r\n");
cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1022,7 +1022,7 @@
try {
StringBuffer cmdXml = new StringBuffer(200);
String charset = device.getCharset();
- cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
cmdXml.append("<Control>\r\n");
cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1091,7 +1091,7 @@
try {
StringBuffer cmdXml = new StringBuffer(200);
String charset = device.getCharset();
- cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
cmdXml.append("<Control>\r\n");
cmdXml.append("<CmdType>DeviceConfig</CmdType>\r\n");
cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1146,7 +1146,7 @@
try {
String charset = device.getCharset();
StringBuffer catalogXml = new StringBuffer(200);
- catalogXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
catalogXml.append("<Query>\r\n");
catalogXml.append("<CmdType>DeviceStatus</CmdType>\r\n");
catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1179,7 +1179,7 @@
try {
StringBuffer catalogXml = new StringBuffer(200);
String charset = device.getCharset();
- catalogXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
catalogXml.append("<Query>\r\n");
catalogXml.append("<CmdType>DeviceInfo</CmdType>\r\n");
catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1212,7 +1212,7 @@
try {
StringBuffer catalogXml = new StringBuffer(200);
String charset = device.getCharset();
- catalogXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
catalogXml.append("<Query>\r\n");
catalogXml.append("<CmdType>Catalog</CmdType>\r\n");
catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1252,7 +1252,7 @@
try {
StringBuffer recordInfoXml = new StringBuffer(200);
String charset = device.getCharset();
- recordInfoXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ recordInfoXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
recordInfoXml.append("<Query>\r\n");
recordInfoXml.append("<CmdType>RecordInfo</CmdType>\r\n");
recordInfoXml.append("<SN>" + sn + "</SN>\r\n");
@@ -1306,7 +1306,7 @@
try {
StringBuffer cmdXml = new StringBuffer(200);
String charset = device.getCharset();
- cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
cmdXml.append("<Query>\r\n");
cmdXml.append("<CmdType>Alarm</CmdType>\r\n");
cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1357,7 +1357,7 @@
try {
StringBuffer cmdXml = new StringBuffer(200);
String charset = device.getCharset();
- cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
cmdXml.append("<Query>\r\n");
cmdXml.append("<CmdType>ConfigDownload</CmdType>\r\n");
cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1393,7 +1393,7 @@
try {
StringBuffer cmdXml = new StringBuffer(200);
String charset = device.getCharset();
- cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
cmdXml.append("<Query>\r\n");
cmdXml.append("<CmdType>PresetQuery</CmdType>\r\n");
cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1428,7 +1428,7 @@
try {
StringBuffer mobilePostitionXml = new StringBuffer(200);
String charset = device.getCharset();
- mobilePostitionXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ mobilePostitionXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
mobilePostitionXml.append("<Query>\r\n");
mobilePostitionXml.append("<CmdType>MobilePosition</CmdType>\r\n");
mobilePostitionXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1462,7 +1462,7 @@
try {
StringBuffer subscribePostitionXml = new StringBuffer(200);
String charset = device.getCharset();
- subscribePostitionXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ subscribePostitionXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
subscribePostitionXml.append("<Query>\r\n");
subscribePostitionXml.append("<CmdType>MobilePosition</CmdType>\r\n");
subscribePostitionXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1513,7 +1513,7 @@
try {
StringBuffer cmdXml = new StringBuffer(200);
String charset = device.getCharset();
- cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
cmdXml.append("<Query>\r\n");
cmdXml.append("<CmdType>Alarm</CmdType>\r\n");
cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1559,7 +1559,7 @@
try {
StringBuffer cmdXml = new StringBuffer(200);
String charset = device.getCharset();
- cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
cmdXml.append("<Query>\r\n");
cmdXml.append("<CmdType>Catalog</CmdType>\r\n");
cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -1590,7 +1590,7 @@
try {
StringBuffer dragXml = new StringBuffer(200);
String charset = device.getCharset();
- dragXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\" ?>\r\n");
+ dragXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
dragXml.append("<Control>\r\n");
dragXml.append("<CmdType>DeviceControl</CmdType>\r\n");
dragXml.append("<SN>" + (int) ((Math.random() * 9 + 1) * 100000) + "</SN>\r\n");
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
index 102aff8..0dc11e0 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -147,7 +147,7 @@
try {
String characterSet = parentPlatform.getCharacterSet();
StringBuffer keepaliveXml = new StringBuffer(200);
- keepaliveXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\" ?>\r\n");
+ keepaliveXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
keepaliveXml.append("<Notify>\r\n");
keepaliveXml.append("<CmdType>Keepalive</CmdType>\r\n");
keepaliveXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -215,44 +215,7 @@
return false;
}
try {
- String characterSet = parentPlatform.getCharacterSet();
- StringBuffer catalogXml = new StringBuffer(600);
- catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet +"\" ?>\r\n");
- catalogXml.append("<Response>\r\n");
- catalogXml.append("<CmdType>Catalog</CmdType>\r\n");
- catalogXml.append("<SN>" +sn + "</SN>\r\n");
- catalogXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
- catalogXml.append("<SumNum>" + size + "</SumNum>\r\n");
- catalogXml.append("<DeviceList Num=\"1\">\r\n");
- catalogXml.append("<Item>\r\n");
- if (channel != null) {
- catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
- catalogXml.append("<Name>" + channel.getName() + "</Name>\r\n");
- catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n");
- catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n");
- catalogXml.append("<Owner>" + channel.getOwner() + "</Owner>\r\n");
- catalogXml.append("<CivilCode>" + channel.getCivilCode() + "</CivilCode>\r\n");
- catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n");
- catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");
- if (channel.getParentId() != null) {
- catalogXml.append("<ParentID>" + channel.getParentId() + "</ParentID>\r\n");
- }
- catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n");
- catalogXml.append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n");
- catalogXml.append("<Status>" + (channel.getStatus() == 0?"OFF":"ON") + "</Status>\r\n");
- catalogXml.append("<Longitude>" + channel.getLongitude() + "</Longitude>\r\n");
- catalogXml.append("<Latitude>" + channel.getLatitude() + "</Latitude>\r\n");
- catalogXml.append("<IPAddress>" + channel.getIpAddress() + "</IPAddress>\r\n");
- catalogXml.append("<Port>" + channel.getPort() + "</Port>\r\n");
- catalogXml.append("<Info>\r\n");
- catalogXml.append("<PTZType>" + channel.getPTZType() + "</PTZType>\r\n");
- catalogXml.append("</Info>\r\n");
- }
-
-
- catalogXml.append("</Item>\r\n");
- catalogXml.append("</DeviceList>\r\n");
- catalogXml.append("</Response>\r\n");
+ String catalogXml = getCatalogXml(channel, sn, parentPlatform, size);
// callid
CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
@@ -266,6 +229,77 @@
return false;
}
return true;
+ }
+
+ @Override
+ public boolean catalogQuery(List<DeviceChannel> channels, ParentPlatform parentPlatform, String sn, String fromTag) {
+ if ( parentPlatform ==null) {
+ return false;
+ }
+ sendCatalogResponse(channels, parentPlatform, sn, fromTag, 0);
+ return true;
+ }
+ private String getCatalogXml(DeviceChannel channel, String sn, ParentPlatform parentPlatform, int size) {
+ String characterSet = parentPlatform.getCharacterSet();
+ StringBuffer catalogXml = new StringBuffer(600);
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet +"\"?>\r\n");
+ catalogXml.append("<Response>\r\n");
+ catalogXml.append("<CmdType>Catalog</CmdType>\r\n");
+ catalogXml.append("<SN>" +sn + "</SN>\r\n");
+ catalogXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
+ catalogXml.append("<SumNum>" + size + "</SumNum>\r\n");
+ catalogXml.append("<DeviceList Num=\"1\">\r\n");
+ catalogXml.append("<Item>\r\n");
+ if (channel != null) {
+ catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
+ catalogXml.append("<Name>" + channel.getName() + "</Name>\r\n");
+ catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n");
+ catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n");
+ catalogXml.append("<Owner>" + channel.getOwner() + "</Owner>\r\n");
+ catalogXml.append("<CivilCode>" + channel.getCivilCode() + "</CivilCode>\r\n");
+ catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n");
+ catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");
+ if (channel.getParentId() != null) {
+ catalogXml.append("<ParentID>" + channel.getParentId() + "</ParentID>\r\n");
+ }
+ catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n");
+ catalogXml.append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n");
+ catalogXml.append("<Status>" + (channel.getStatus() == 0?"OFF":"ON") + "</Status>\r\n");
+ catalogXml.append("<Longitude>" + channel.getLongitude() + "</Longitude>\r\n");
+ catalogXml.append("<Latitude>" + channel.getLatitude() + "</Latitude>\r\n");
+ catalogXml.append("<IPAddress>" + channel.getIpAddress() + "</IPAddress>\r\n");
+ catalogXml.append("<Port>" + channel.getPort() + "</Port>\r\n");
+ catalogXml.append("<Info>\r\n");
+ catalogXml.append("<PTZType>" + channel.getPTZType() + "</PTZType>\r\n");
+ catalogXml.append("</Info>\r\n");
+ }
+
+
+ catalogXml.append("</Item>\r\n");
+ catalogXml.append("</DeviceList>\r\n");
+ catalogXml.append("</Response>\r\n");
+ return catalogXml.toString();
+ }
+
+ private void sendCatalogResponse(List<DeviceChannel> channels, ParentPlatform parentPlatform, String sn, String fromTag, int index) {
+ if (index >= channels.size()) {
+ return;
+ }
+ try {
+ DeviceChannel deviceChannel = channels.get(index);
+ String catalogXml = getCatalogXml(deviceChannel, sn, parentPlatform, channels.size());
+ // callid
+ CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
+ : udpSipProvider.getNewCallId();
+
+ Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, catalogXml, fromTag, callIdHeader);
+ transmitRequest(parentPlatform, request, null, eventResult -> {
+ int indexNext = index + 1;
+ sendCatalogResponse(channels, parentPlatform, sn, fromTag, indexNext);
+ });
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ }
}
/**
@@ -283,7 +317,7 @@
try {
String characterSet = parentPlatform.getCharacterSet();
StringBuffer deviceInfoXml = new StringBuffer(600);
- deviceInfoXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\" ?>\r\n");
+ deviceInfoXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
deviceInfoXml.append("<Response>\r\n");
deviceInfoXml.append("<CmdType>DeviceInfo</CmdType>\r\n");
deviceInfoXml.append("<SN>" +sn + "</SN>\r\n");
@@ -323,7 +357,7 @@
try {
String characterSet = parentPlatform.getCharacterSet();
StringBuffer deviceStatusXml = new StringBuffer(600);
- deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\" ?>\r\n");
+ deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
deviceStatusXml.append("<Response>\r\n");
deviceStatusXml.append("<CmdType>DeviceStatus</CmdType>\r\n");
deviceStatusXml.append("<SN>" +sn + "</SN>\r\n");
@@ -355,7 +389,7 @@
try {
String characterSet = parentPlatform.getCharacterSet();
StringBuffer deviceStatusXml = new StringBuffer(600);
- deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\" ?>\r\n");
+ deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
deviceStatusXml.append("<Notify>\r\n");
deviceStatusXml.append("<CmdType>MobilePosition</CmdType>\r\n");
deviceStatusXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
@@ -472,7 +506,7 @@
channel.setParentId(parentPlatform.getDeviceGBId());
}
String characterSet = parentPlatform.getCharacterSet();
- catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\" ?>\r\n");
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
catalogXml.append("<Notify>\r\n");
catalogXml.append("<CmdType>Catalog</CmdType>\r\n");
catalogXml.append("<SN>" + (int) ((Math.random() * 9 + 1) * 100000) + "</SN>\r\n");
@@ -546,7 +580,7 @@
}
String characterSet = parentPlatform.getCharacterSet();
StringBuffer catalogXml = new StringBuffer(600);
- catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\" ?>\r\n");
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
catalogXml.append("<Notify>\r\n");
catalogXml.append("<CmdType>Catalog</CmdType>\r\n");
catalogXml.append("<SN>" + (int) ((Math.random() * 9 + 1) * 100000) + "</SN>\r\n");
@@ -569,7 +603,7 @@
try {
String characterSet = parentPlatform.getCharacterSet();
StringBuffer recordXml = new StringBuffer(600);
- recordXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\" ?>\r\n");
+ recordXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
recordXml.append("<Response>\r\n");
recordXml.append("<CmdType>RecordInfo</CmdType>\r\n");
recordXml.append("<SN>" +recordInfo.getSn() + "</SN>\r\n");
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
index 4f1249a..136b912 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
@@ -12,6 +12,7 @@
import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
+import gov.nist.javax.sip.message.SIPRequest;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.slf4j.Logger;
@@ -23,6 +24,7 @@
import javax.sip.InvalidArgumentException;
import javax.sip.RequestEvent;
import javax.sip.SipException;
+import javax.sip.address.SipURI;
import javax.sip.header.CSeqHeader;
import javax.sip.header.CallIdHeader;
import javax.sip.message.Response;
@@ -81,6 +83,17 @@
// 鏌ヨ涓婄骇骞冲彴鏄惁瀛樺湪
ParentPlatform parentPlatform = storage.queryParentPlatByServerGBId(deviceId);
try {
+ if (device != null && parentPlatform != null) {
+ logger.warn("[閲嶅]骞冲彴涓庤澶囩紪鍙烽噸澶嶏細{}", deviceId);
+ SIPRequest request = (SIPRequest) evt.getRequest();
+ String hostAddress = request.getRemoteAddress().getHostAddress();
+ int remotePort = request.getRemotePort();
+ if (device.getHostAddress().equals(hostAddress + ":" + remotePort)) {
+ parentPlatform = null;
+ }else {
+ device = null;
+ }
+ }
if (device == null && parentPlatform == null) {
// 涓嶅瓨鍦ㄥ垯鍥炲404
responseAck(evt, Response.NOT_FOUND, "device "+ deviceId +" not found");
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java
index e548cfe..419a5c2 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java
@@ -18,6 +18,7 @@
import javax.sip.header.FromHeader;
import javax.sip.message.Response;
import java.text.ParseException;
+import java.util.ArrayList;
import java.util.List;
@Component
@@ -58,7 +59,8 @@
List<DeviceChannelInPlatform> deviceChannels = storage.queryChannelListInParentPlatform(parentPlatform.getServerGBId());
// 鏌ヨ鍏宠仈鐨勭洿鎾�氶亾
List<GbStream> gbStreams = storage.queryGbStreamListInPlatform(parentPlatform.getServerGBId());
- int size = deviceChannels.size() + gbStreams.size();
+
+ List<DeviceChannel> allChannels = new ArrayList<>();
// 鍥炲鐩綍淇℃伅
List<PlatformCatalog> catalogs = storage.queryCatalogInPlatform(parentPlatform.getServerGBId());
if (catalogs.size() > 0) {
@@ -81,9 +83,7 @@
deviceChannel.setModel("live");
deviceChannel.setOwner("wvp-pro");
deviceChannel.setSecrecy("0");
- cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
- // 闃叉鍙戦�佽繃蹇�
- Thread.sleep(100);
+ allChannels.add(deviceChannel);
}
}
// 鍥炲绾ц仈鐨勯�氶亾
@@ -96,9 +96,7 @@
deviceChannel.setParental(0);
deviceChannel.setParentId(channel.getCatalogId());
deviceChannel.setCivilCode(parentPlatform.getDeviceGBId().substring(0, 6));
- cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
- // 闃叉鍙戦�佽繃蹇�
- Thread.sleep(100);
+ allChannels.add(deviceChannel);
}
}
// 鍥炲鐩存挱鐨勯�氶亾
@@ -123,16 +121,16 @@
deviceChannel.setOwner("wvp-pro");
deviceChannel.setParental(0);
deviceChannel.setSecrecy("0");
- cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
- // 闃叉鍙戦�佽繃蹇�
- Thread.sleep(100);
+ allChannels.add(deviceChannel);
}
}
- if (size == 0) {
+ if (allChannels.size() > 0) {
+ cmderFroPlatform.catalogQuery(allChannels, parentPlatform, sn, fromHeader.getTag());
+ }else {
// 鍥炲鏃犻�氶亾
- cmderFroPlatform.catalogQuery(null, parentPlatform, sn, fromHeader.getTag(), size);
+ cmderFroPlatform.catalogQuery(null, parentPlatform, sn, fromHeader.getTag(), 0);
}
- } catch (SipException | InvalidArgumentException | ParseException | InterruptedException e) {
+ } catch (SipException | InvalidArgumentException | ParseException e) {
e.printStackTrace();
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java
index d16506d..6a33da4 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java
@@ -22,6 +22,7 @@
import javax.sip.header.FromHeader;
import javax.sip.message.Response;
import java.text.ParseException;
+import java.util.ArrayList;
import java.util.List;
@Component
@@ -44,6 +45,9 @@
@Autowired
private EventPublisher publisher;
+
+ @Autowired
+ private IVideoManagerStorage storage;
@Override
public void afterPropertiesSet() throws Exception {
@@ -71,10 +75,11 @@
List<GbStream> gbStreams = storager.queryGbStreamListInPlatform(parentPlatform.getServerGBId());
// 鍥炲鐩綍淇℃伅
List<PlatformCatalog> catalogs = storager.queryCatalogInPlatform(parentPlatform.getServerGBId());
- int size = catalogs.size() + deviceChannelInPlatforms.size() + gbStreams.size();
+
+ List<DeviceChannel> allChannels = new ArrayList<>();
if (catalogs.size() > 0) {
for (PlatformCatalog catalog : catalogs) {
- if (catalog.getParentId().equals(parentPlatform.getServerGBId())) {
+ if (catalog.getParentId().equals(catalog.getPlatformId())) {
catalog.setParentId(parentPlatform.getDeviceGBId());
}
DeviceChannel deviceChannel = new DeviceChannel();
@@ -92,9 +97,7 @@
deviceChannel.setModel("live");
deviceChannel.setOwner("wvp-pro");
deviceChannel.setSecrecy("0");
- cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
- // 闃叉鍙戦�佽繃蹇�
- Thread.sleep(100);
+ allChannels.add(deviceChannel);
}
}
// 鍥炲绾ц仈鐨勯�氶亾
@@ -103,20 +106,18 @@
if (channel.getCatalogId().equals(parentPlatform.getServerGBId())) {
channel.setCatalogId(parentPlatform.getDeviceGBId());
}
- DeviceChannel deviceChannel = storager.queryChannel(channel.getDeviceId(), channel.getChannelId());
+ DeviceChannel deviceChannel = storage.queryChannel(channel.getDeviceId(), channel.getChannelId());
deviceChannel.setParental(0);
deviceChannel.setParentId(channel.getCatalogId());
deviceChannel.setCivilCode(parentPlatform.getDeviceGBId().substring(0, 6));
- cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
- // 闃叉鍙戦�佽繃蹇�
- Thread.sleep(100);
+ allChannels.add(deviceChannel);
}
}
// 鍥炲鐩存挱鐨勯�氶亾
if (gbStreams.size() > 0) {
for (GbStream gbStream : gbStreams) {
if (gbStream.getCatalogId().equals(parentPlatform.getServerGBId())) {
- gbStream.setCatalogId(parentPlatform.getDeviceGBId());
+ gbStream.setCatalogId(null);
}
DeviceChannel deviceChannel = new DeviceChannel();
deviceChannel.setChannelId(gbStream.getGbId());
@@ -134,23 +135,20 @@
deviceChannel.setOwner("wvp-pro");
deviceChannel.setParental(0);
deviceChannel.setSecrecy("0");
-
- cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
- // 闃叉鍙戦�佽繃蹇�
- Thread.sleep(100);
+ allChannels.add(deviceChannel);
}
}
- if (size == 0) {
+ if (allChannels.size() > 0) {
+ cmderFroPlatform.catalogQuery(allChannels, parentPlatform, sn, fromHeader.getTag());
+ }else {
// 鍥炲鏃犻�氶亾
- cmderFroPlatform.catalogQuery(null, parentPlatform, sn, fromHeader.getTag(), size);
+ cmderFroPlatform.catalogQuery(null, parentPlatform, sn, fromHeader.getTag(), 0);
}
} catch (SipException e) {
e.printStackTrace();
} catch (InvalidArgumentException e) {
e.printStackTrace();
} catch (ParseException e) {
- e.printStackTrace();
- } catch (InterruptedException e) {
e.printStackTrace();
}
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 32b645c..1bafb59 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
@@ -123,7 +123,7 @@
channelList.add(deviceChannel);
}
- logger.debug("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾: {}涓紝{}/{}", device.getDeviceId(), channelList.size(), catalogDataCatch.get(key) == null ? 0 :catalogDataCatch.get(key).size(), sumNum);
+ logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾: {}涓紝{}/{}", device.getDeviceId(), channelList.size(), catalogDataCatch.get(key) == null ? 0 :catalogDataCatch.get(key).size(), sumNum);
catalogDataCatch.put(key, sumNum, device, channelList);
if (catalogDataCatch.get(key).size() == sumNum) {
// 鏁版嵁宸茬粡瀹屾暣鎺ユ敹
@@ -230,8 +230,22 @@
}
}
- public String getChannelSyncProgress(String deviceId) {
+ public SyncStatus getChannelSyncProgress(String deviceId) {
String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + deviceId;
- return catalogDataCatch.get(key) == null ? "0/0" : catalogDataCatch.get(key).size() + "/" + catalogDataCatch.getTotal(key);
+ if (catalogDataCatch.get(key) == null) {
+ return null;
+ }else {
+ return catalogDataCatch.getSyncStatus(key);
+ }
+ }
+
+ public void setChannelSyncReady(String deviceId) {
+ String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + deviceId;
+ catalogDataCatch.addReady(key);
+ }
+
+ public void setChannelSyncEnd(String deviceId, String errorMsg) {
+ String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + deviceId;
+ catalogDataCatch.setChannelSyncEnd(key, errorMsg);
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
index 68a2af3..17cf7f4 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
@@ -1,6 +1,7 @@
package com.genersoft.iot.vmp.service;
import com.genersoft.iot.vmp.gb28181.bean.Device;
+import com.genersoft.iot.vmp.gb28181.bean.SyncStatus;
/**
* 璁惧鐩稿叧涓氬姟澶勭悊
@@ -34,4 +35,24 @@
* @return
*/
boolean removeMobilePositionSubscribe(Device device);
+
+ /**
+ * 绉婚櫎绉诲姩浣嶇疆璁㈤槄
+ * @param deviceId 璁惧ID
+ * @return
+ */
+ SyncStatus getChannelSyncStatus(String deviceId);
+
+ /**
+ * 璁剧疆閫氶亾鍚屾鐘舵��
+ * @param deviceId 璁惧ID
+ */
+ void setChannelSyncReady(String deviceId);
+
+ /**
+ * 璁剧疆鍚屾缁撴潫
+ * @param deviceId 璁惧ID
+ * @param errorMsg 閿欒淇℃伅
+ */
+ void setChannelSyncEnd(String deviceId, String errorMsg);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
index e9f7968..8cd2c77 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -3,9 +3,12 @@
import com.genersoft.iot.vmp.conf.DynamicTask;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
+import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd.CatalogResponseMessageHandler;
import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.gb28181.task.impl.CatalogSubscribeTask;
import com.genersoft.iot.vmp.gb28181.task.impl.MobilePositionSubscribeTask;
+import com.genersoft.iot.vmp.gb28181.bean.SyncStatus;
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,6 +27,12 @@
@Autowired
private ISIPCommander sipCommander;
+
+ @Autowired
+ private CatalogResponseMessageHandler catalogResponseMessageHandler;
+
+ @Autowired
+ private IRedisCatchStorage redisCatchStorage;
@Override
public boolean addCatalogSubscribe(Device device) {
@@ -86,4 +95,19 @@
dynamicTask.stop(device.getDeviceId() + "mobile_position");
return true;
}
+
+ @Override
+ public SyncStatus getChannelSyncStatus(String deviceId) {
+ return catalogResponseMessageHandler.getChannelSyncProgress(deviceId);
+ }
+
+ @Override
+ public void setChannelSyncReady(String deviceId) {
+ catalogResponseMessageHandler.setChannelSyncReady(deviceId);
+ }
+
+ @Override
+ public void setChannelSyncEnd(String deviceId, String errorMsg) {
+ catalogResponseMessageHandler.setChannelSyncEnd(deviceId, errorMsg);
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
index e66dfa0..c6b7e64 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -216,4 +216,5 @@
void sendMobilePositionMsg(JSONObject jsonObject);
void sendStreamPushRequestedMsg(MessageForPushChannel messageForPushChannel);
+
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
index 1fb7fd0..fc78de4 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
@@ -638,4 +638,5 @@
logger.info("[redis 鎺ㄦ祦琚姹傞�氱煡] {}: {}-{}", key, msg.getApp(), msg.getStream());
redis.convertAndSend(key, (JSONObject)JSON.toJSON(msg));
}
+
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
index 667a619..20e56d9 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
@@ -445,8 +445,6 @@
device.setOnline(1);
logger.info("鏇存柊璁惧鍦ㄧ嚎: " + deviceId);
redisCatchStorage.updateDevice(device);
- List<DeviceChannel> deviceChannelList = deviceChannelMapper.queryOnlineChannelsByDeviceId(deviceId);
- eventPublisher.catalogEventPublish(null, deviceChannelList, CatalogEvent.ON);
return deviceMapper.update(device) > 0;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
index 6413396..1b6d31e 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
@@ -4,6 +4,7 @@
import com.genersoft.iot.vmp.conf.DynamicTask;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
+import com.genersoft.iot.vmp.gb28181.bean.SyncStatus;
import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
@@ -18,6 +19,7 @@
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
+import org.kxml2.wap.wv.WV;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -149,49 +151,30 @@
@ApiImplicitParam(name="deviceId", value = "璁惧id", required = true, dataTypeClass = String.class),
})
@PostMapping("/devices/{deviceId}/sync")
- public DeferredResult<ResponseEntity<Device>> devicesSync(@PathVariable String deviceId){
+ public WVPResult<SyncStatus> devicesSync(@PathVariable String deviceId){
if (logger.isDebugEnabled()) {
logger.debug("璁惧閫氶亾淇℃伅鍚屾API璋冪敤锛宒eviceId锛�" + deviceId);
}
Device device = storager.queryVideoDevice(deviceId);
- String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + deviceId;
- String uuid = UUID.randomUUID().toString();
- // 榛樿瓒呮椂鏃堕棿涓�30鍒嗛挓
- DeferredResult<ResponseEntity<Device>> result = new DeferredResult<ResponseEntity<Device>>(30*60*1000L);
- result.onTimeout(()->{
- logger.warn("璁惧[{}]閫氶亾淇℃伅鍚屾瓒呮椂", deviceId);
- // 閲婃斁rtpserver
- RequestMessage msg = new RequestMessage();
- msg.setKey(key);
- msg.setId(uuid);
- WVPResult<Object> wvpResult = new WVPResult<>();
- wvpResult.setCode(-1);
- wvpResult.setData(device);
- wvpResult.setMsg("鏇存柊瓒呮椂");
- msg.setData(wvpResult);
- resultHolder.invokeAllResult(msg);
-
- });
- // 绛夊緟鍏朵粬鐩稿悓璇锋眰杩斿洖鏃朵竴璧疯繑鍥�
- if (resultHolder.exist(key, null)) {
- resultHolder.put(key, uuid, result);
- return result;
- }else {
- cmder.catalogQuery(device, event -> {
- RequestMessage msg = new RequestMessage();
- msg.setKey(key);
- msg.setId(uuid);
- WVPResult<Object> wvpResult = new WVPResult<>();
- wvpResult.setCode(-1);
- wvpResult.setData(device);
- wvpResult.setMsg(String.format("鍚屾閫氶亾澶辫触锛岄敊璇爜锛� %s, %s", event.statusCode, event.msg));
- msg.setData(wvpResult);
- resultHolder.invokeAllResult(msg);
- });
- resultHolder.put(key, uuid, result);
- return result;
+ SyncStatus syncStatus = deviceService.getChannelSyncStatus(deviceId);
+ // 宸插瓨鍦ㄥ垯杩斿洖杩涘害
+ if (syncStatus != null && syncStatus.getErrorMsg() == null) {
+ WVPResult<SyncStatus> wvpResult = new WVPResult<>();
+ wvpResult.setCode(0);
+ wvpResult.setData(syncStatus);
+ return wvpResult;
}
+ SyncStatus syncStatusReady = new SyncStatus();
+ deviceService.setChannelSyncReady(deviceId);
+ cmder.catalogQuery(device, event -> {
+ String errorMsg = String.format("鍚屾閫氶亾澶辫触锛岄敊璇爜锛� %s, %s", event.statusCode, event.msg);
+ deviceService.setChannelSyncEnd(deviceId, errorMsg);
+ });
+ WVPResult<SyncStatus> wvpResult = new WVPResult<>();
+ wvpResult.setCode(0);
+ wvpResult.setMsg("寮�濮嬪悓姝�");
+ return wvpResult;
}
/**
@@ -468,4 +451,22 @@
public WVPResult<List<DeviceChannelTree>> tree(@PathVariable String deviceId) {
return WVPResult.Data(storager.tree(deviceId));
}
+
+ @GetMapping("/{deviceId}/sync_status")
+ @ApiOperation(value = "鑾峰彇閫氶亾鍚屾杩涘害", notes = "鑾峰彇閫氶亾鍚屾杩涘害")
+ public WVPResult<SyncStatus> getSyncStatus(@PathVariable String deviceId) {
+ SyncStatus channelSyncStatus = deviceService.getChannelSyncStatus(deviceId);
+ WVPResult<SyncStatus> wvpResult = new WVPResult<>();
+ if (channelSyncStatus == null) {
+ wvpResult.setCode(-1);
+ wvpResult.setMsg("鍚屾灏氭湭寮�濮�");
+ }else {
+ wvpResult.setCode(0);
+ wvpResult.setData(channelSyncStatus);
+ if (channelSyncStatus.getErrorMsg() != null) {
+ wvpResult.setMsg(channelSyncStatus.getErrorMsg());
+ }
+ }
+ return wvpResult;
+ }
}
diff --git a/web_src/src/components/DeviceList.vue b/web_src/src/components/DeviceList.vue
index 8a156d5..4f8b460 100644
--- a/web_src/src/components/DeviceList.vue
+++ b/web_src/src/components/DeviceList.vue
@@ -57,7 +57,7 @@
<el-table-column label="鎿嶄綔" width="450" align="center" fixed="right">
<template slot-scope="scope">
- <el-button size="mini" :loading="syncDevices.includes(scope.row.deviceId)" v-if="scope.row.online!=0" icon="el-icon-refresh" @click="refDevice(scope.row)">鍒锋柊</el-button>
+ <el-button size="mini" v-if="scope.row.online!=0" icon="el-icon-refresh" @click="refDevice(scope.row)" @mouseover="getTooltipContent(scope.row.deviceId)">鍒锋柊</el-button>
<el-button-group>
<el-button size="mini" icon="el-icon-video-camera-solid" v-bind:disabled="scope.row.online==0" type="primary" @click="showChannelList(scope.row)">閫氶亾</el-button>
<el-button size="mini" icon="el-icon-location" v-bind:disabled="scope.row.online==0" type="primary" @click="showDevicePosition(scope.row)">瀹氫綅</el-button>
@@ -78,6 +78,7 @@
:total="total">
</el-pagination>
<deviceEdit ref="deviceEdit" ></deviceEdit>
+ <syncChannelProgress ref="syncChannelProgress" ></syncChannelProgress>
</el-main>
</el-container>
</div>
@@ -86,11 +87,13 @@
<script>
import uiHeader from './UiHeader.vue'
import deviceEdit from './dialog/deviceEdit.vue'
+ import syncChannelProgress from './dialog/SyncChannelProgress.vue'
export default {
name: 'app',
components: {
uiHeader,
- deviceEdit
+ deviceEdit,
+ syncChannelProgress,
},
data() {
return {
@@ -105,7 +108,6 @@
count:15,
total:0,
getDeviceListLoading: false,
- syncDevices:[]
};
},
computed: {
@@ -198,8 +200,7 @@
//鍒锋柊璁惧淇℃伅
refDevice: function(itemData) {
console.log("鍒锋柊瀵瑰簲璁惧:" + itemData.deviceId);
- var that = this;
- this.syncDevices.push(itemData.deviceId)
+ let that = this;
this.$axios({
method: 'post',
url: '/api/device/query/devices/' + itemData.deviceId + '/sync'
@@ -212,14 +213,14 @@
type: 'error'
});
}else{
- that.$message({
- showClose: true,
- message: res.data.msg,
- type: 'success'
- });
+ // that.$message({
+ // showClose: true,
+ // message: res.data.msg,
+ // type: 'success'
+ // });
+ this.$refs.syncChannelProgress.openDialog(itemData.deviceId)
}
that.initData()
- this.syncDevices.splice(this.syncDevices.indexOf(itemData.deviceId, 1));
}).catch((e) => {
console.error(e)
that.$message({
@@ -227,9 +228,29 @@
message: e,
type: 'error'
});
- this.syncDevices.splice(this.syncDevices.indexOf(itemData.deviceId, 1));
});
+
},
+
+ getTooltipContent: async function (deviceId){
+ let result = "";
+ await this.$axios({
+ method: 'get',
+ async: false,
+ url:`/api/device/query/${deviceId}/sync_status/`,
+ }).then((res) => {
+ if (res.data.code == 0) {
+ if (res.data.data.errorMsg !== null) {
+ result = res.data.data.errorMsg
+ } else if (res.data.msg !== null) {
+ result = res.data.msg
+ } else {
+ result = `鍚屾涓�...[${res.data.data.current}/${res.data.data.total}]`;
+ }
+ }
+ })
+ return result;
+ },
//閫氱煡璁惧涓婁紶濯掍綋娴�
sendDevicePush: function(itemData) {
// let deviceId = this.currentDevice.deviceId;
diff --git a/web_src/src/components/dialog/SyncChannelProgress.vue b/web_src/src/components/dialog/SyncChannelProgress.vue
new file mode 100644
index 0000000..1ec16f4
--- /dev/null
+++ b/web_src/src/components/dialog/SyncChannelProgress.vue
@@ -0,0 +1,102 @@
+<template>
+ <div id="SyncChannelProgress" v-loading="isLoging">
+ <el-dialog
+ width="240px"
+ top="13%"
+ :append-to-body="true"
+ :close-on-click-modal="false"
+ :visible.sync="showDialog"
+ :destroy-on-close="true"
+ :show-close="true"
+ @close="close()"
+ style="text-align: center">
+ <el-progress type="circle" :percentage="percentage" :status="syncStatus"></el-progress>
+ <div style="text-align: center">
+ {{msg}}
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+
+export default {
+ name: "SyncChannelProgress",
+ computed: {},
+ props: ['platformId'],
+ created() {},
+ data() {
+ return {
+ syncStatus: null,
+ percentage: 0,
+ total: 0,
+ current: 0,
+ showDialog: false,
+ isLoging: false,
+ syncFlag: false,
+ deviceId: null,
+ timmer: null,
+ msg: "姝e湪鍚屾",
+ };
+ },
+ methods: {
+ openDialog: function (deviceId) {
+ console.log("deviceId: " + deviceId)
+ this.deviceId = deviceId;
+ this.showDialog = true;
+ this.msg = "";
+ this.percentage= 0;
+ this.total= 0;
+ this.current= 0;
+ this.syncFlag= false;
+ this.syncStatus = null;
+ this.getProgress()
+ },
+ getProgress(){
+ this.$axios({
+ method: 'get',
+ url:`/api/device/query/${this.deviceId}/sync_status/`,
+ }).then((res) => {
+ if (res.data.code == 0) {
+ if (!this.syncFlag) {
+ this.syncFlag = true;
+ }
+ if (res.data.data == null) {
+ this.syncStatus = "success"
+ this.percentage = 100;
+ this.msg = '鍚屾鎴愬姛';
+ }else if (res.data.data.total == 0){
+ this.msg = `绛夊緟鍚屾涓璥;
+ this.timmer = setTimeout(this.getProgress, 300)
+ }else if (res.data.data.errorMsg !== null ){
+ this.msg = res.data.data.errorMsg;
+ this.syncStatus = "exception"
+ }else {
+ this.total = res.data.data.total;
+ this.current = res.data.data.current;
+ this.percentage = Math.floor(Number(res.data.data.current)/Number(res.data.data.total)* 10000)/100;
+ this.msg = `鍚屾涓�...[${res.data.data.current}/${res.data.data.total}]`;
+ this.timmer = setTimeout(this.getProgress, 300)
+ }
+ }else {
+ if (this.syncFlag) {
+ this.syncStatus = "success"
+ this.percentage = 100;
+ this.msg = '鍚屾鎴愬姛';
+ }else {
+ this.syncStatus = "error"
+ this.msg = res.data.msg;
+ }
+ }
+ }).catch((error) =>{
+ console.log(error);
+ this.syncStatus = "error"
+ this.msg = error.response.data.msg;
+ });
+ },
+ close: function (){
+ window.clearTimeout(this.timmer)
+ }
+ },
+};
+</script>
--
Gitblit v1.8.0