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