From 40657033175bbecb983654f43208d9c2c3e37bb6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9C=B1=E4=BF=8A=E6=9D=B0?= <502612493@qq.com>
Date: Tue, 25 Jan 2022 15:42:11 +0800
Subject: [PATCH 1/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0lombok=EF=BC=8C=E5=88=86?=
=?UTF-8?q?=E7=A6=BB=E6=B3=A8=E5=86=8C=E5=91=A8=E6=9C=9F=E4=BA=8B=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1、添加lombok依赖
2、分离注册周期事件
---
pom.xml | 4 ++
.../iot/vmp/gb28181/event/EventPublisher.java | 11 +++++
.../KeepaliveTimeoutListenerForPlatform.java | 2 +-
.../PlatformCycleRegisterEvent.java | 24 ++++++++++
.../PlatformCycleRegisterEventLister.java | 44 +++++++++++++++++++
5 files changed, 84 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java
create mode 100644 src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java
diff --git a/pom.xml b/pom.xml
index 991abc68..cf2c4cf4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -228,6 +228,10 @@
spring-boot-starter-test
+
+ org.projectlombok
+ lombok
+
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
index 76b44271..426e2e58 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
@@ -5,6 +5,7 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.gb28181.event.offline.OfflineEvent;
import com.genersoft.iot.vmp.gb28181.event.platformKeepaliveExpire.PlatformKeepaliveExpireEvent;
+import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformCycleRegisterEvent;
import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformNotRegisterEvent;
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.media.zlm.event.ZLMOfflineEvent;
@@ -67,6 +68,16 @@ public class EventPublisher {
platformNotRegisterEvent.setPlatformGbID(platformGbId);
applicationEventPublisher.publishEvent(platformNotRegisterEvent);
}
+
+ /**
+ * 平台周期注册事件
+ * @param paltformGbId
+ */
+ public void platformRegisterCycleEventPublish(String paltformGbId) {
+ PlatformCycleRegisterEvent platformCycleRegisterEvent = new PlatformCycleRegisterEvent(this);
+ platformCycleRegisterEvent.setPlatformGbID(paltformGbId);
+ applicationEventPublisher.publishEvent(platformCycleRegisterEvent);
+ }
/**
* 设备报警事件
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java
index ea322d12..9ba0c055 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java
@@ -66,7 +66,7 @@ public class KeepaliveTimeoutListenerForPlatform extends RedisKeyExpirationEvent
}else if (expiredKey.startsWith(PLATFORM_REGISTER_PREFIX)) {
String platformGBId = expiredKey.substring(PLATFORM_REGISTER_PREFIX.length(),expiredKey.length());
- publisher.platformNotRegisterEventPublish(platformGBId);
+ publisher.platformRegisterCycleEventPublish(platformGBId);
}else if (expiredKey.startsWith(KEEPLIVEKEY_PREFIX)){
String deviceId = expiredKey.substring(KEEPLIVEKEY_PREFIX.length(),expiredKey.length());
publisher.outlineEventPublish(deviceId, KEEPLIVEKEY_PREFIX);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java
new file mode 100644
index 00000000..c2ff61f3
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEvent.java
@@ -0,0 +1,24 @@
+package com.genersoft.iot.vmp.gb28181.event.platformNotRegister;
+
+import org.springframework.context.ApplicationEvent;
+
+public class PlatformCycleRegisterEvent extends ApplicationEvent {
+ /**
+ * Add default serial version ID
+ */
+ private static final long serialVersionUID = 1L;
+
+ private String platformGbID;
+
+ public String getPlatformGbID() {
+ return platformGbID;
+ }
+
+ public void setPlatformGbID(String platformGbID) {
+ this.platformGbID = platformGbID;
+ }
+
+ public PlatformCycleRegisterEvent(Object source) {
+ super(source);
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java
new file mode 100644
index 00000000..996f65dd
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformCycleRegisterEventLister.java
@@ -0,0 +1,44 @@
+package com.genersoft.iot.vmp.gb28181.event.platformNotRegister;
+
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+@Slf4j
+@Component
+public class PlatformCycleRegisterEventLister implements ApplicationListener {
+ @Autowired
+ private IVideoManagerStorager storager;
+ @Autowired
+ private ISIPCommanderForPlatform sipCommanderFroPlatform;
+
+ @Override
+ public void onApplicationEvent(PlatformCycleRegisterEvent event) {
+ log.info("上级平台周期注册事件");
+ ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformGbID());
+ if (parentPlatform == null) {
+ log.info("[ 平台未注册事件 ] 平台已经删除!!! 平台国标ID:" + event.getPlatformGbID());
+ return;
+ }
+ Timer timer = new Timer();
+ SipSubscribe.Event okEvent = (responseEvent)->{
+ timer.cancel();
+ };
+ sipCommanderFroPlatform.register(parentPlatform, null, okEvent);
+ timer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ log.info("[平台注册]再次向平台注册,平台国标ID:" + event.getPlatformGbID());
+ sipCommanderFroPlatform.register(parentPlatform, null, okEvent);
+ }
+ }, 15*1000 ,Long.parseLong(parentPlatform.getExpires())* 1000);
+ }
+}
From abc65c6317db3d57c501615125b5a4e17b0448c9 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: Tue, 25 Jan 2022 17:14:10 +0800
Subject: [PATCH 2/7] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=9B=AE=E5=BD=95?=
=?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=97=B6=E9=BB=98=E8=AE=A4=E7=9B=AE=E5=BD=95?=
=?UTF-8?q?=E7=9A=84=E9=80=89=E6=8B=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../vmp/storager/IVideoManagerStorager.java | 2 ++
.../storager/dao/PlatformCatalogMapper.java | 3 ++
.../impl/VideoManagerStoragerImpl.java | 5 ++++
.../gb28181/platform/PlatformController.java | 29 +++++++++++--------
.../dialog/chooseChannelForCatalog.vue | 5 ++--
5 files changed, 30 insertions(+), 14 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
index e4bda3f0..038fe2b8 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -470,4 +470,6 @@ public interface IVideoManagerStorager {
void delCatalogByPlatformId(String serverGBId);
void delRelationByPlatformId(String serverGBId);
+
+ PlatformCatalog queryDefaultCatalogInPlatform(String platformId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java
index 59ecdbcb..95015bda 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java
@@ -41,4 +41,7 @@ public interface PlatformCatalogMapper {
@Select("SELECT *, (SELECT COUNT(1) from platform_catalog where parentId = pc.id) as childrenCount FROM platform_catalog pc WHERE pc.platformId=#{platformId}")
List selectByPlatForm(String platformId);
+
+ @Select("SELECT pc.* FROM platform_catalog pc WHERE pc.id = (SELECT pp.catalogId from parent_platform pp WHERE pp.serverGBId=#{platformId})")
+ PlatformCatalog selectDefaultByPlatFormId(String platformId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
index 98f3594e..816a749d 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
@@ -1058,4 +1058,9 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager {
platformGbStreamMapper.delByPlatformId(serverGBId);
platformChannelMapper.delByPlatformId(serverGBId);
}
+
+ @Override
+ public PlatformCatalog queryDefaultCatalogInPlatform(String platformId) {
+ return catalogMapper.selectDefaultByPlatFormId(platformId);
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
index 1111ff7d..532d928d 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
@@ -465,25 +465,30 @@ public class PlatformController {
})
@DeleteMapping("/catalog/del")
@ResponseBody
- public ResponseEntity>> delCatalog(String id){
+ public ResponseEntity> delCatalog(String id, String platformId){
if (logger.isDebugEnabled()) {
logger.debug("删除目录,{}", id);
}
- // 如果删除的是默认目录则根目录设置为默认目录
- PlatformCatalog catalog = storager.getCatalog(id);
- if (catalog != null) {
- ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(catalog.getPlatformId());
- if (parentPlatform != null) {
- if (id.equals(parentPlatform.getCatalogId())) {
- storager.setDefaultCatalog(parentPlatform.getServerGBId(), parentPlatform.getServerGBId());
- }
- }
+ WVPResult result = new WVPResult<>();
+
+ if (StringUtils.isEmpty(id) || StringUtils.isEmpty(platformId)) {
+ result.setCode(-1);
+ result.setMsg("param error");
+ return new ResponseEntity<>(result, HttpStatus.BAD_REQUEST);
}
+ result.setCode(0);
int delResult = storager.delCatalog(id);
- WVPResult> result = new WVPResult<>();
- result.setCode(0);
+ // 如果删除的是默认目录则根目录设置为默认目录
+ PlatformCatalog parentPlatform = storager.queryDefaultCatalogInPlatform(platformId);
+
+ // 默认节点被移除
+ if (parentPlatform == null) {
+ storager.setDefaultCatalog(platformId, platformId);
+ result.setData(platformId);
+ }
+
if (delResult > 0) {
result.setMsg("success");
diff --git a/web_src/src/components/dialog/chooseChannelForCatalog.vue b/web_src/src/components/dialog/chooseChannelForCatalog.vue
index 5133caa5..2d87bdd5 100644
--- a/web_src/src/components/dialog/chooseChannelForCatalog.vue
+++ b/web_src/src/components/dialog/chooseChannelForCatalog.vue
@@ -132,6 +132,7 @@ export default {
url:`/api/platform/catalog/del`,
params: {
id: id,
+ platformId: this.platformId,
}
})
.then((res) => {
@@ -139,8 +140,8 @@ export default {
console.log("移除成功")
node.parent.loaded = false
node.parent.expand();
- if(this.defaultCatalogId === id) {
- this.defaultCatalogId = this.platformId;
+ if (res.data.data) {
+ this.defaultCatalogId = res.data.data;
}
}
})
From c547851487a8e24f93405ace3c0359d0d6790364 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: Tue, 25 Jan 2022 19:38:04 +0800
Subject: [PATCH 3/7] =?UTF-8?q?=E4=BC=98=E5=8C=96zlm=E4=B8=8A=E7=BA=BF?=
=?UTF-8?q?=E4=B8=8E=E4=B8=8B=E7=BA=BF=E8=BF=87=E6=97=B6=E9=80=9A=E9=81=93?=
=?UTF-8?q?=E7=9A=84=E7=A7=BB=E9=99=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../iot/vmp/service/impl/StreamPushServiceImpl.java | 8 +++++---
.../iot/vmp/storager/dao/StreamPushMapper.java | 13 ++++++++++++-
src/main/resources/application-dev.yml | 2 +-
src/main/resources/application-docker.yml | 2 +-
4 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
index d3d32499..948c61ad 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -118,7 +118,7 @@ public class StreamPushServiceImpl implements IStreamPushService {
@Override
public List getPushList(String mediaServerId) {
- return streamPushMapper.selectAllByMediaServerId(mediaServerId);
+ return streamPushMapper.selectAllByMediaServerIdWithOutGbID(mediaServerId);
}
@Override
@@ -204,7 +204,9 @@ public class StreamPushServiceImpl implements IStreamPushService {
Map streamInfoPushItemMap = new HashMap<>();
if (pushList.size() > 0) {
for (StreamPushItem streamPushItem : pushList) {
- pushItemMap.put(streamPushItem.getApp() + streamPushItem.getStream(), streamPushItem);
+ if (StringUtils.isEmpty(streamPushItem.getGbId())) {
+ pushItemMap.put(streamPushItem.getApp() + streamPushItem.getStream(), streamPushItem);
+ }
}
}
if (mediaItems.size() > 0) {
@@ -268,7 +270,7 @@ public class StreamPushServiceImpl implements IStreamPushService {
@Override
public void zlmServerOffline(String mediaServerId) {
- List streamPushItems = streamPushMapper.selectAllByMediaServerId(mediaServerId);
+ List streamPushItems = streamPushMapper.selectAllByMediaServerIdWithOutGbID(mediaServerId);
// 移除没有GBId的推流
streamPushMapper.deleteWithoutGBId(mediaServerId);
gbStreamMapper.deleteWithoutGBId("push", mediaServerId);
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
index e072e274..08b7c827 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
@@ -32,6 +32,14 @@ public interface StreamPushMapper {
@Delete("DELETE FROM stream_push WHERE app=#{app} AND stream=#{stream}")
int del(String app, String stream);
+ @Delete("")
+ int delAllWithoutGBId(List streamPushItems);
+
@Delete("
From e7282337819001e637ee3c08b379f9073c9a3de9 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: Thu, 27 Jan 2022 10:09:47 +0800
Subject: [PATCH 5/7] =?UTF-8?q?=E4=BD=BF=E7=94=A8log4j-over-slf4j=E5=8F=96?=
=?UTF-8?q?=E4=BB=A3log4j=E9=81=BF=E5=85=8Dlog4j=E6=BC=8F=E6=B4=9E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index cf2c4cf4..edd37d9d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -148,12 +148,14 @@
1.3.0-91
+
- log4j
- log4j
- 1.2.17
+ org.slf4j
+ log4j-over-slf4j
+ 1.7.35
+
org.dom4j
From 9b21fba871d5dc1698024f251c52d47b5ab0e966 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: Thu, 27 Jan 2022 10:39:08 +0800
Subject: [PATCH 6/7] =?UTF-8?q?=E8=A7=A3=E6=9E=90xml=E5=BC=82=E5=B8=B8?=
=?UTF-8?q?=E6=97=B6=EF=BC=8C=E5=9B=9E=E5=A4=8D400?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../request/impl/message/MessageRequestProcessor.java | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
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 bd053446..ba95cf6a 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
@@ -77,7 +77,14 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()).response(eventResult);
};
}else {
- Element rootElement = getRootElement(evt);
+ Element rootElement = null;
+ try {
+ rootElement = getRootElement(evt);
+ } catch (DocumentException e) {
+ logger.warn("解析XML消息内容异常", e);
+ // 不存在则回复404
+ responseAck(evt, Response.BAD_REQUEST, e.getMessage());
+ }
String name = rootElement.getName();
IMessageHandler messageHandler = messageHandlerMap.get(name);
if (messageHandler != null) {
@@ -98,8 +105,6 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
logger.warn("参数无效", e);
} catch (ParseException e) {
logger.warn("SIP回复时解析异常", e);
- } catch (DocumentException e) {
- logger.warn("解析XML消息内容异常", e);
}
}
From 89db9991a22fb00d2c2ae4b47b6f50f6dd4b205e Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: Thu, 27 Jan 2022 14:25:26 +0800
Subject: [PATCH 7/7] =?UTF-8?q?2.0.2=E7=89=88=E6=9C=AC=20=E5=8E=BB?=
=?UTF-8?q?=E9=99=A4=E9=BB=98=E8=AE=A4=E7=9A=84mediaIP=20127.0.0.1,?=
=?UTF-8?q?=E9=81=BF=E5=85=8D=E8=AF=AF=E5=AF=BC=E6=96=B0=E7=94=A8=E6=88=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
src/main/resources/application-dev.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index edd37d9d..987e76e9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
com.genersoft
wvp-pro
- 2.0
+ 2.0.2
web video platform
国标28181视频平台
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 55443fce..b104be9a 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -49,7 +49,7 @@ sip:
#zlm 默认服务器配置
media:
# [必须修改] zlm服务器的内网IP
- ip: 127.0.0.1
+ ip:
# [必须修改] zlm服务器的http.port
http-port: 80
# [可选] zlm服务器的hook.admin_params=secret