From ac1a4a027a7bd88efb32e9da666bdba4b5fa166f Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 14 一月 2022 17:04:26 +0800
Subject: [PATCH] 支持国标级联的目录订阅功能
---
src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java | 13
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java | 29 +
src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java | 20
src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java | 8
src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java | 15
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java | 39 ++
web_src/package-lock.json | 3
src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java | 54 +++
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 28 +
src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java | 10
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 4
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java | 18
src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java | 12
src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java | 167 +++++++++
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java | 19 +
src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEvent.java | 58 +++
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java | 155 +++++++
web_src/src/components/dialog/chooseChannelForStream.vue | 1
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java | 3
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java | 9
src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java | 36 +
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 51 ++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 117 ++++++
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java | 4
src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java | 4
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java | 20
src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java | 74 ++++
src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java | 4
src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 12
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java | 56 ++-
31 files changed, 951 insertions(+), 94 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java
index 66d67bf..60418f2 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeInfo.java
@@ -18,13 +18,13 @@
this.fromTag = fromHeader.getTag();
ExpiresHeader expiresHeader = (ExpiresHeader)request.getHeader(ExpiresHeader.NAME);
this.expires = expiresHeader.getExpires();
- this.event = (EventHeader)request.getHeader(EventHeader.NAME);
+ this.event = ((EventHeader)request.getHeader(EventHeader.NAME)).getName();
}
private String id;
private int expires;
private String callId;
- private EventHeader event;
+ private String event;
private String fromTag;
private String toTag;
@@ -38,10 +38,6 @@
public String getCallId() {
return callId;
- }
-
- public EventHeader getEvent() {
- return event;
}
public String getFromTag() {
@@ -68,11 +64,15 @@
this.callId = callId;
}
- public void setEvent(EventHeader event) {
- this.event = event;
- }
-
public void setFromTag(String fromTag) {
this.fromTag = fromTag;
}
+
+ public String getEvent() {
+ return event;
+ }
+
+ public void setEvent(String event) {
+ this.event = event;
+ }
}
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 9495e9d..76b4427 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
@@ -1,18 +1,27 @@
package com.genersoft.iot.vmp.gb28181.event;
import com.genersoft.iot.vmp.gb28181.bean.Device;
+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.PlatformNotRegisterEvent;
+import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.media.zlm.event.ZLMOfflineEvent;
import com.genersoft.iot.vmp.media.zlm.event.ZLMOnlineEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
import com.genersoft.iot.vmp.gb28181.event.alarm.AlarmEvent;
import com.genersoft.iot.vmp.gb28181.event.online.OnlineEvent;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
/**
* @description:Event浜嬩欢閫氱煡鎺ㄩ�佸櫒锛屾敮鎸佹帹閫佸湪绾夸簨浠躲�佺绾夸簨浠�
@@ -80,4 +89,49 @@
outEvent.setMediaServerId(mediaServerId);
applicationEventPublisher.publishEvent(outEvent);
}
+
+ @Async
+ public void catalogEventPublish(String platformId, DeviceChannel deviceChannel, String type) {
+ List<DeviceChannel> deviceChannelList = new ArrayList<>();
+ deviceChannelList.add(deviceChannel);
+ catalogEventPublish(platformId, deviceChannelList, type);
+ }
+
+ @Async
+ public void catalogEventPublish(String platformId, List<DeviceChannel> deviceChannels, String type) {
+ CatalogEvent outEvent = new CatalogEvent(this);
+ List<DeviceChannel> channels = new ArrayList<>();
+ if (deviceChannels.size() > 1) {
+ // 鏁版嵁鍘婚噸
+ Set<String> gbIdSet = new HashSet<>();
+ for (DeviceChannel deviceChannel : deviceChannels) {
+ if (!gbIdSet.contains(deviceChannel.getChannelId())) {
+ gbIdSet.add(deviceChannel.getChannelId());
+ channels.add(deviceChannel);
+ }
+ }
+ }else {
+ channels = deviceChannels;
+ }
+ outEvent.setDeviceChannels(channels);
+ outEvent.setType(type);
+ outEvent.setPlatformId(platformId);
+ applicationEventPublisher.publishEvent(outEvent);
+ }
+
+ @Async
+ public void catalogEventPublishForStream(String platformId, List<GbStream> gbStreams, String type) {
+ CatalogEvent outEvent = new CatalogEvent(this);
+ outEvent.setGbStreams(gbStreams);
+ outEvent.setType(type);
+ outEvent.setPlatformId(platformId);
+ applicationEventPublisher.publishEvent(outEvent);
+ }
+
+ @Async
+ public void catalogEventPublishForStream(String platformId, GbStream gbStream, String type) {
+ List<GbStream> gbStreamList = new ArrayList<>();
+ gbStreamList.add(gbStream);
+ catalogEventPublishForStream(platformId, gbStreamList, type);
+ }
}
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 937e555..ea322d1 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
@@ -2,6 +2,7 @@
import com.genersoft.iot.vmp.conf.RedisKeyExpirationEventMessageListener;
import com.genersoft.iot.vmp.conf.UserSetup;
+import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
@@ -35,6 +36,9 @@
@Autowired
private UserSetup userSetup;
+ @Autowired
+ private SipSubscribe sipSubscribe;
+
public KeepaliveTimeoutListenerForPlatform(RedisMessageListenerContainer listenerContainer, UserSetup userSetup) {
super(listenerContainer, userSetup);
}
@@ -54,6 +58,7 @@
String PLATFORM_KEEPLIVEKEY_PREFIX = VideoManagerConstants.PLATFORM_KEEPALIVE_PREFIX + userSetup.getServerId() + "_";
String PLATFORM_REGISTER_PREFIX = VideoManagerConstants.PLATFORM_REGISTER_PREFIX + userSetup.getServerId() + "_";
String KEEPLIVEKEY_PREFIX = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_";
+ String REGISTER_INFO_PREFIX = VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetup.getServerId() + "_";
if (expiredKey.startsWith(PLATFORM_KEEPLIVEKEY_PREFIX)) {
String platformGBId = expiredKey.substring(PLATFORM_KEEPLIVEKEY_PREFIX.length(),expiredKey.length());
@@ -65,6 +70,13 @@
}else if (expiredKey.startsWith(KEEPLIVEKEY_PREFIX)){
String deviceId = expiredKey.substring(KEEPLIVEKEY_PREFIX.length(),expiredKey.length());
publisher.outlineEventPublish(deviceId, KEEPLIVEKEY_PREFIX);
+ }else if (expiredKey.startsWith(REGISTER_INFO_PREFIX)) {
+ String callid = expiredKey.substring(REGISTER_INFO_PREFIX.length());
+ SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult();
+ eventResult.callId = callid;
+ eventResult.msg = "娉ㄥ唽瓒呮椂";
+ eventResult.type = "register timeout";
+ sipSubscribe.getErrorSubscribe(callid).response(eventResult);
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java
index 9751915..aa87728 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java
@@ -1,6 +1,9 @@
package com.genersoft.iot.vmp.gb28181.event.offline;
import com.genersoft.iot.vmp.conf.UserSetup;
+import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
+import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -12,6 +15,8 @@
import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import com.genersoft.iot.vmp.utils.redis.RedisUtil;
+
+import java.util.List;
/**
* @description: 绂荤嚎浜嬩欢鐩戝惉鍣紝鐩戝惉鍒扮绾垮悗锛屼慨鏀硅澶囩鍦ㄧ嚎鐘舵�併�� 璁惧绂荤嚎鏈変袱涓潵婧愶細
@@ -33,6 +38,9 @@
@Autowired
private UserSetup userSetup;
+
+ @Autowired
+ private EventPublisher eventPublisher;
@Override
public void onApplicationEvent(OfflineEvent event) {
@@ -58,6 +66,8 @@
}
}
+ List<DeviceChannel> deviceChannelList = storager.queryOnlineChannelsByDeviceId(event.getDeviceId());
+ eventPublisher.catalogEventPublish(null, deviceChannelList, CatalogEvent.OFF);
// 澶勭悊绂荤嚎鐩戝惉
storager.outline(event.getDeviceId());
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 a62c76d..12a50e1 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
@@ -3,6 +3,10 @@
import com.genersoft.iot.vmp.conf.SipConfig;
import com.genersoft.iot.vmp.conf.UserSetup;
import com.genersoft.iot.vmp.gb28181.bean.Device;
+import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
+import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
+import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.storager.dao.dto.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -15,6 +19,7 @@
import com.genersoft.iot.vmp.utils.redis.RedisUtil;
import java.text.SimpleDateFormat;
+import java.util.List;
/**
* @description: 鍦ㄧ嚎浜嬩欢鐩戝惉鍣紝鐩戝惉鍒扮绾垮悗锛屼慨鏀硅澶囩鍦ㄧ嚎鐘舵�併�� 璁惧鍦ㄧ嚎鏈変袱涓潵婧愶細
@@ -39,6 +44,9 @@
@Autowired
private UserSetup userSetup;
+
+ @Autowired
+ private EventPublisher eventPublisher;
private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -76,6 +84,11 @@
}
device.setOnline(1);
+ Device deviceInstore = storager.queryVideoDevice(device.getDeviceId());
+ if (deviceInstore.getOnline() == 0) {
+ List<DeviceChannel> deviceChannelList = storager.queryOnlineChannelsByDeviceId(device.getDeviceId());
+ eventPublisher.catalogEventPublish(null, deviceChannelList, CatalogEvent.ON);
+ }
// 澶勭悊涓婄嚎鐩戝惉
storager.updateDevice(device);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEvent.java
new file mode 100644
index 0000000..c035b80
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEvent.java
@@ -0,0 +1,58 @@
+package com.genersoft.iot.vmp.gb28181.event.subscribe.catalog;
+
+import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
+import com.genersoft.iot.vmp.gb28181.bean.GbStream;
+import org.springframework.context.ApplicationEvent;
+
+import java.util.List;
+
+public class CatalogEvent extends ApplicationEvent {
+ public CatalogEvent(Object source) {
+ super(source);
+ }
+
+ public static final String ON = "ON"; // 涓婄嚎
+ public static final String OFF = "OFF"; // 绂荤嚎
+ public static final String VLOST = "VLOST"; // 瑙嗛涓㈠け
+ public static final String DEFECT = "DEFECT"; // 鏁呴殰
+ public static final String ADD = "ADD"; // 澧炲姞
+ public static final String DEL = "DEL"; // 鍒犻櫎
+ public static final String UPDATE = "UPDATE"; // 鏇存柊
+
+ private List<DeviceChannel> deviceChannels;
+ private List<GbStream> gbStreams;
+ private String type;
+ private String platformId;
+
+ public List<DeviceChannel> getDeviceChannels() {
+ return deviceChannels;
+ }
+
+ public void setDeviceChannels(List<DeviceChannel> deviceChannels) {
+ this.deviceChannels = deviceChannels;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getPlatformId() {
+ return platformId;
+ }
+
+ public void setPlatformId(String platformId) {
+ this.platformId = platformId;
+ }
+
+ public List<GbStream> getGbStreams() {
+ return gbStreams;
+ }
+
+ public void setGbStreams(List<GbStream> gbStreams) {
+ this.gbStreams = gbStreams;
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
new file mode 100644
index 0000000..4cbe5fb
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
@@ -0,0 +1,167 @@
+package com.genersoft.iot.vmp.gb28181.event.subscribe.catalog;
+
+import com.genersoft.iot.vmp.common.VideoManagerConstants;
+import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.conf.UserSetup;
+import com.genersoft.iot.vmp.gb28181.bean.*;
+import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
+import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformNotRegisterEvent;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
+import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
+import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
+import com.genersoft.iot.vmp.service.IGbStreamService;
+import com.genersoft.iot.vmp.service.IMediaServerService;
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+/**
+ * catalog浜嬩欢
+ */
+@Component
+public class CatalogEventLister implements ApplicationListener<CatalogEvent> {
+
+ private final static Logger logger = LoggerFactory.getLogger(CatalogEventLister.class);
+
+ @Autowired
+ private IVideoManagerStorager storager;
+ @Autowired
+ private IRedisCatchStorage redisCatchStorage;
+ @Autowired
+ private IMediaServerService mediaServerService;
+
+ @Autowired
+ private SIPCommanderFroPlatform sipCommanderFroPlatform;
+
+ @Autowired
+ private ZLMRTPServerFactory zlmrtpServerFactory;
+
+ @Autowired
+ private SipConfig config;
+
+ @Autowired
+ private UserSetup userSetup;
+
+ @Autowired
+ private IGbStreamService gbStreamService;
+
+ @Override
+ public void onApplicationEvent(CatalogEvent event) {
+ SubscribeInfo subscribe = null;
+ ParentPlatform parentPlatform = null;
+
+ Map<String, List<ParentPlatform>> parentPlatformMap = new HashMap<>();
+ if (event.getPlatformId() != null) {
+ parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformId());
+ String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + event.getPlatformId();
+ subscribe = redisCatchStorage.getSubscribe(key);
+ }else {
+ // 鑾峰彇鎵�鐢ㄨ闃�
+ List<String> platforms = redisCatchStorage.getAllSubscribePlatform();
+ if (event.getDeviceChannels() != null) {
+ if (platforms.size() > 0) {
+ for (DeviceChannel deviceChannel : event.getDeviceChannels()) {
+ List<ParentPlatform> parentPlatformsForGB = storager.queryPlatFormListForGBWithGBId(deviceChannel.getChannelId(), platforms);
+ parentPlatformMap.put(deviceChannel.getChannelId(), parentPlatformsForGB);
+ }
+ }
+ }else if (event.getGbStreams() != null) {
+ if (platforms.size() > 0) {
+ for (GbStream gbStream : event.getGbStreams()) {
+ List<ParentPlatform> parentPlatformsForGB = storager.queryPlatFormListForStreamWithGBId(gbStream.getApp(),gbStream.getStream(), platforms);
+ parentPlatformMap.put(gbStream.getGbId(), parentPlatformsForGB);
+ }
+ }
+ }
+
+ }
+ switch (event.getType()) {
+ case CatalogEvent.ON:
+ case CatalogEvent.OFF:
+ case CatalogEvent.DEL:
+
+ if (parentPlatform != null || subscribe != null) {
+ List<DeviceChannel> deviceChannelList = new ArrayList<>();
+ if (event.getDeviceChannels() != null) {
+ deviceChannelList.addAll(event.getDeviceChannels());
+ }
+ if (event.getGbStreams().size() > 0){
+ for (GbStream gbStream : event.getGbStreams()) {
+ DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), parentPlatform.getDeviceGBId());
+ deviceChannelList.add(deviceChannelByStream);
+ }
+ }
+ if (deviceChannelList.size() > 0) {
+ logger.info("[Catalog浜嬩欢: {}]骞冲彴锛歿}锛屽奖鍝嶉�氶亾{}涓�", event.getType(), event.getPlatformId(), deviceChannelList.size());
+ sipCommanderFroPlatform.sendNotifyForCatalogAddOrUpdate(event.getType(), parentPlatform, deviceChannelList, subscribe);
+ }
+ }else if (parentPlatformMap.keySet().size() > 0) {
+ for (String gbId : parentPlatformMap.keySet()) {
+ List<ParentPlatform> parentPlatforms = parentPlatformMap.get(gbId);
+ if (parentPlatforms != null && parentPlatforms.size() > 0) {
+ for (ParentPlatform platform : parentPlatforms) {
+ logger.info("[Catalog浜嬩欢: {}]骞冲彴锛歿}锛屽奖鍝嶉�氶亾{}", event.getType(), platform.getServerGBId(), gbId);
+ String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + platform.getServerGBId();
+ SubscribeInfo subscribeInfo = redisCatchStorage.getSubscribe(key);
+ List<DeviceChannel> deviceChannelList = new ArrayList<>();
+ DeviceChannel deviceChannel = new DeviceChannel();
+ deviceChannel.setChannelId(gbId);
+ deviceChannelList.add(deviceChannel);
+ sipCommanderFroPlatform.sendNotifyForCatalogOther(event.getType(), platform, deviceChannelList, subscribeInfo);
+ }
+ }
+ }
+ }
+ break;
+ case CatalogEvent.VLOST:
+ break;
+ case CatalogEvent.DEFECT:
+ break;
+ case CatalogEvent.ADD:
+ case CatalogEvent.UPDATE:
+ if (parentPlatform != null || subscribe != null) {
+ List<DeviceChannel> deviceChannelList = new ArrayList<>();
+ if (event.getDeviceChannels() != null) {
+ deviceChannelList.addAll(event.getDeviceChannels());
+ }
+ if (event.getGbStreams().size() > 0){
+ for (GbStream gbStream : event.getGbStreams()) {
+ DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), parentPlatform.getDeviceGBId());
+ deviceChannelList.add(deviceChannelByStream);
+ }
+ }
+ if (deviceChannelList.size() > 0) {
+ logger.info("[Catalog浜嬩欢: {}]骞冲彴锛歿}锛屽奖鍝嶉�氶亾{}涓�", event.getType(), event.getPlatformId(), deviceChannelList.size());
+ sipCommanderFroPlatform.sendNotifyForCatalogAddOrUpdate(event.getType(), parentPlatform, deviceChannelList, subscribe);
+ }
+ }else if (parentPlatformMap.keySet().size() > 0) {
+ for (String gbId : parentPlatformMap.keySet()) {
+ List<ParentPlatform> parentPlatforms = parentPlatformMap.get(gbId);
+ if (parentPlatforms != null && parentPlatforms.size() > 0) {
+ for (ParentPlatform platform : parentPlatforms) {
+ logger.info("[Catalog浜嬩欢: {}]骞冲彴锛歿}锛屽奖鍝嶉�氶亾{}", event.getType(), platform.getServerGBId(), gbId);
+ String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + platform.getServerGBId();
+ SubscribeInfo subscribeInfo = redisCatchStorage.getSubscribe(key);
+ List<DeviceChannel> deviceChannelList = new ArrayList<>();
+ DeviceChannel deviceChannel = storager.queryChannelInParentPlatform(platform.getServerGBId(), gbId);
+ deviceChannelList.add(deviceChannel);
+ GbStream gbStream = storager.queryStreamInParentPlatform(platform.getServerGBId(), gbId);
+ DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), platform.getDeviceGBId());
+ deviceChannelList.add(deviceChannelByStream);
+ sipCommanderFroPlatform.sendNotifyForCatalogOther(event.getType(), platform, deviceChannelList, subscribeInfo);
+ }
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java b/src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java
index fc3d027..0d56bd5 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java
@@ -48,7 +48,7 @@
if (gbStream.isStatus()) {
if (gpsMsgInfo != null) {
// 鍙戦�丟PS娑堟伅
- sipCommanderForPlatform.sendMobilePosition(parentPlatform, gpsMsgInfo, subscribe);
+ sipCommanderForPlatform.sendNotifyMobilePosition(parentPlatform, gpsMsgInfo, subscribe);
}else {
// 娌℃湁鍦╮edis鎵惧埌鏂扮殑娑堟伅灏变娇鐢ㄦ暟鎹簱鐨勬秷鎭�
gpsMsgInfo = new GPSMsgInfo();
@@ -56,7 +56,7 @@
gpsMsgInfo.setLat(gbStream.getLongitude());
gpsMsgInfo.setLng(gbStream.getLongitude());
// 鍙戦�丟PS娑堟伅
- sipCommanderForPlatform.sendMobilePosition(parentPlatform, gpsMsgInfo, subscribe);
+ sipCommanderForPlatform.sendNotifyMobilePosition(parentPlatform, gpsMsgInfo, subscribe);
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java
index be369ae..71025c0 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java
@@ -14,6 +14,7 @@
import javax.sip.*;
import javax.sip.header.CSeqHeader;
import javax.sip.header.CallIdHeader;
+import javax.sip.header.Header;
import javax.sip.message.Response;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -140,6 +141,7 @@
*/
@Override
public void processTimeout(TimeoutEvent timeoutEvent) {
+ System.out.println("processTimeout");
if(timeoutProcessor != null) {
timeoutProcessor.process(timeoutEvent);
}
@@ -147,14 +149,31 @@
@Override
public void processIOException(IOExceptionEvent exceptionEvent) {
+ System.out.println("processIOException");
}
@Override
public void processTransactionTerminated(TransactionTerminatedEvent transactionTerminatedEvent) {
+// Transaction transaction = null;
+// System.out.println("processTransactionTerminated");
+// if (transactionTerminatedEvent.isServerTransaction()) {
+// transaction = transactionTerminatedEvent.getServerTransaction();
+// }else {
+// transaction = transactionTerminatedEvent.getClientTransaction();
+// }
+//
+// System.out.println(transaction.getBranchId());
+// System.out.println(transaction.getState());
+// System.out.println(transaction.getRequest().getMethod());
+// CallIdHeader header = (CallIdHeader)transaction.getRequest().getHeader(CallIdHeader.NAME);
+// SipSubscribe.EventResult<TransactionTerminatedEvent> terminatedEventEventResult = new SipSubscribe.EventResult<>(transactionTerminatedEvent);
+
+// sipSubscribe.getErrorSubscribe(header.getCallId()).response(terminatedEventEventResult);
}
@Override
public void processDialogTerminated(DialogTerminatedEvent dialogTerminatedEvent) {
+ System.out.println("processDialogTerminated");
CallIdHeader callId = dialogTerminatedEvent.getDialog().getCallId();
}
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 e8b4124..7325889 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
@@ -7,6 +7,7 @@
import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
import javax.sip.header.WWWAuthenticateHeader;
+import java.util.List;
public interface ISIPCommanderForPlatform {
@@ -70,5 +71,20 @@
* @param subscribeInfo 璁㈤槄鐩稿叧鐨勪俊鎭�
* @return
*/
- boolean sendMobilePosition(ParentPlatform parentPlatform, GPSMsgInfo gpsMsgInfo, SubscribeInfo subscribeInfo);
+ boolean sendNotifyMobilePosition(ParentPlatform parentPlatform, GPSMsgInfo gpsMsgInfo, SubscribeInfo subscribeInfo);
+
+ /**
+ * 鍥炲catalog浜嬩欢-澧炲姞/鏇存柊
+ * @param parentPlatform
+ * @param deviceChannels
+ */
+ boolean sendNotifyForCatalogAddOrUpdate(String type, ParentPlatform parentPlatform, List<DeviceChannel> deviceChannels, SubscribeInfo subscribeInfo);
+
+ /**
+ * 鍥炲catalog浜嬩欢-鍒犻櫎
+ * @param parentPlatform
+ * @param deviceChannels
+ */
+ boolean sendNotifyForCatalogOther(String type, ParentPlatform parentPlatform, List<DeviceChannel> deviceChannels, SubscribeInfo subscribeInfo);
+
}
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 1707bde..4216bb8 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
@@ -23,6 +23,7 @@
import javax.sip.header.WWWAuthenticateHeader;
import javax.sip.message.Request;
import java.text.ParseException;
+import java.util.List;
import java.util.UUID;
@Component
@@ -96,7 +97,8 @@
request = headerProviderPlarformProvider.createRegisterRequest(parentPlatform, redisCatchStorage.getCSEQ(Request.REGISTER), "FromRegister" + tm, null, callIdHeader);
// 灏� callid 鍐欏叆缂撳瓨锛� 绛夋敞鍐屾垚鍔熷彲浠ユ洿鏂扮姸鎬�
- redisCatchStorage.updatePlatformRegisterInfo(callIdHeader.getCallId(), parentPlatform.getServerGBId());
+ String callIdFromHeader = callIdHeader.getCallId();
+ redisCatchStorage.updatePlatformRegisterInfo(callIdFromHeader, parentPlatform.getServerGBId());
sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (event)->{
if (event != null) {
@@ -104,6 +106,7 @@
parentPlatform.getServerGBId(),
event.msg);
}
+ redisCatchStorage.delPlatformRegisterInfo(callIdFromHeader);
if (errorEvent != null ) {
errorEvent.response(event);
}
@@ -219,8 +222,8 @@
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");// TODO 褰撳墠涓嶈兘娣诲姞鍒嗙粍锛� 鎵�浠ユ殏鏃舵病鏈夌埗鑺傜偣
- catalogXml.append("<ParentID>" + channel.getParentId() + "</ParentID>\r\n"); // TODO 褰撳墠涓嶈兘娣诲姞鍒嗙粍锛� 鎵�浠ユ殏鏃舵病鏈夌埗鑺傜偣
+ catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");
+ 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");
@@ -329,7 +332,7 @@
}
@Override
- public boolean sendMobilePosition(ParentPlatform parentPlatform, GPSMsgInfo gpsMsgInfo, SubscribeInfo subscribeInfo) {
+ public boolean sendNotifyMobilePosition(ParentPlatform parentPlatform, GPSMsgInfo gpsMsgInfo, SubscribeInfo subscribeInfo) {
if (parentPlatform == null) {
return false;
}
@@ -364,4 +367,110 @@
}
return true;
}
+
+ @Override
+ public boolean sendNotifyForCatalogAddOrUpdate(String type, ParentPlatform parentPlatform, List<DeviceChannel> deviceChannels, SubscribeInfo subscribeInfo) {
+ if (parentPlatform == null) {
+ return false;
+ }
+ if (deviceChannels == null || deviceChannels.size() == 0) {
+ return false;
+ }
+ for (DeviceChannel channel : deviceChannels) {
+ try {
+ StringBuffer catalogXml = new StringBuffer(600);
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\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");
+ catalogXml.append("<SumNum>" + deviceChannels.size() + "</SumNum>\r\n");
+ catalogXml.append("<DeviceList Num=\"1\">\r\n");
+ catalogXml.append("<Item>\r\n");
+ catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
+ catalogXml.append("<Event>" + type + "</Event>\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");
+ 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("</Notify>\r\n");
+
+ CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
+ : udpSipProvider.getNewCallId();
+ callIdHeader.setCallId(subscribeInfo.getCallId());
+
+ String tm = Long.toString(System.currentTimeMillis());
+
+ Request request = headerProviderPlarformProvider.createNotifyRequest(parentPlatform, catalogXml.toString(), subscribeInfo.getToTag(), subscribeInfo.getFromTag(), callIdHeader);
+ transmitRequest(parentPlatform, request);
+ Thread.sleep(100);
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean sendNotifyForCatalogOther(String type, ParentPlatform parentPlatform, List<DeviceChannel> deviceChannels, SubscribeInfo subscribeInfo) {
+ if (parentPlatform == null) {
+ return false;
+ }
+ if (deviceChannels == null || deviceChannels.size() == 0) {
+ return false;
+ }
+
+ for (DeviceChannel channel : deviceChannels) {
+ try {
+ StringBuffer catalogXml = new StringBuffer(600);
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\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");
+ catalogXml.append("<SumNum>" + deviceChannels.size() + "</SumNum>\r\n");
+ catalogXml.append("<DeviceList Num=\"1\">\r\n");
+ catalogXml.append("<Item>\r\n");
+ catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
+ catalogXml.append("<Event>" + type + "</Event>\r\n");
+ catalogXml.append("</Item>\r\n");
+ catalogXml.append("</DeviceList>\r\n");
+ catalogXml.append("</Notify>\r\n");
+
+ CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
+ : udpSipProvider.getNewCallId();
+ callIdHeader.setCallId(subscribeInfo.getCallId());
+
+ String tm = Long.toString(System.currentTimeMillis());
+
+ Request request = headerProviderPlarformProvider.createNotifyRequest(parentPlatform, catalogXml.toString(), subscribeInfo.getToTag(), subscribeInfo.getFromTag(), callIdHeader);
+ transmitRequest(parentPlatform, request);
+ Thread.sleep(100);
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ return true;
+ }
+
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
index 2a9abad..ae2819c 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -106,9 +106,8 @@
if (platform != null) {
// 鏌ヨ骞冲彴涓嬫槸鍚︽湁璇ラ�氶亾
DeviceChannel channel = storager.queryChannelInParentPlatform(requesterId, channelId);
- List<GbStream> gbStreams = storager.queryStreamInParentPlatform(requesterId, channelId);
+ GbStream gbStream = storager.queryStreamInParentPlatform(requesterId, channelId);
PlatformCatalog catalog = storager.getCatalog(channelId);
- GbStream gbStream = gbStreams.size() > 0? gbStreams.get(0):null;
MediaServerItem mediaServerItem = null;
// 涓嶆槸閫氶亾鍙兘鏄洿鎾祦
if (channel != null && gbStream == null ) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
index d6ceca3..c339598 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
@@ -6,6 +6,7 @@
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
@@ -49,6 +50,9 @@
@Autowired
private IVideoManagerStorager storager;
+
+ @Autowired
+ private EventPublisher eventPublisher;
@Autowired
private SipConfig sipConfig;
@@ -259,39 +263,39 @@
channel.setDeviceId(device.getDeviceId());
logger.debug("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾: {}銆恵}銆�", device.getDeviceId(), channel.getName(), channel.getChannelId());
switch (eventElement.getText().toUpperCase()) {
- case "ON" : // 涓婄嚎
+ case CatalogEvent.ON: // 涓婄嚎
logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾銆恵}銆戜笂绾块�氱煡", device.getDeviceId(), channel.getChannelId());
storager.deviceChannelOnline(deviceId, channel.getChannelId());
// 鍥炲200 OK
responseAck(evt, Response.OK);
break;
- case "OFF" : // 绂荤嚎
+ case CatalogEvent.OFF : // 绂荤嚎
logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾銆恵}銆戠绾块�氱煡", device.getDeviceId(), channel.getChannelId());
storager.deviceChannelOffline(deviceId, channel.getChannelId());
// 鍥炲200 OK
responseAck(evt, Response.OK);
break;
- case "VLOST" : // 瑙嗛涓㈠け
+ case CatalogEvent.VLOST: // 瑙嗛涓㈠け
logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑閫氶亾銆恵}銆戣棰戜涪澶遍�氱煡", device.getDeviceId(), channel.getChannelId());
storager.deviceChannelOffline(deviceId, channel.getChannelId());
// 鍥炲200 OK
responseAck(evt, Response.OK);
break;
- case "DEFECT" : // 鏁呴殰
+ case CatalogEvent.DEFECT: // 鏁呴殰
// 鍥炲200 OK
responseAck(evt, Response.OK);
break;
- case "ADD" : // 澧炲姞
+ case CatalogEvent.ADD: // 澧炲姞
logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑澧炲姞閫氶亾銆恵}銆戦�氱煡", device.getDeviceId(), channel.getChannelId());
storager.updateChannel(deviceId, channel);
responseAck(evt, Response.OK);
break;
- case "DEL" : // 鍒犻櫎
+ case CatalogEvent.DEL: // 鍒犻櫎
logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑鍒犻櫎閫氶亾銆恵}銆戦�氱煡", device.getDeviceId(), channel.getChannelId());
storager.delChannel(deviceId, channel.getChannelId());
responseAck(evt, Response.OK);
break;
- case "UPDATE" : // 鏇存柊
+ case CatalogEvent.UPDATE: // 鏇存柊
logger.info("鏀跺埌鏉ヨ嚜璁惧銆恵}銆戠殑鏇存柊閫氶亾銆恵}銆戦�氱煡", device.getDeviceId(), channel.getChannelId());
storager.updateChannel(deviceId, channel);
responseAck(evt, Response.OK);
@@ -300,6 +304,8 @@
responseAck(evt, Response.BAD_REQUEST, "event not found");
}
+ // 杞彂鍙樺寲淇℃伅
+ eventPublisher.catalogEventPublish(null, channel, eventElement.getText().toUpperCase());
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
index 9c5be8e..13335d6 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
@@ -85,9 +85,9 @@
// } else if (CmdType.ALARM.equals(cmd)) {
// logger.info("鎺ユ敹鍒癆larm璁㈤槄");
// processNotifyAlarm(evt, rootElement);
-// } else if (CmdType.CATALOG.equals(cmd)) {
-// logger.info("鎺ユ敹鍒癈atalog璁㈤槄");
-// processNotifyCatalogList(evt, rootElement);
+ } else if (CmdType.CATALOG.equals(cmd)) {
+ logger.info("鎺ユ敹鍒癈atalog璁㈤槄");
+ processNotifyCatalogList(evt, rootElement);
} else {
logger.info("鎺ユ敹鍒版秷鎭細" + cmd);
// responseAck(evt, Response.OK);
@@ -177,7 +177,40 @@
}
private void processNotifyCatalogList(RequestEvent evt, Element rootElement) {
+ String platformId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
+ String deviceID = XmlUtil.getText(rootElement, "DeviceID");
+ SubscribeInfo subscribeInfo = new SubscribeInfo(evt, platformId);
+ String sn = XmlUtil.getText(rootElement, "SN");
+ String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + platformId;
+ StringBuilder resultXml = new StringBuilder(200);
+ resultXml.append("<?xml version=\"1.0\" ?>\r\n")
+ .append("<Response>\r\n")
+ .append("<CmdType>Catalog</CmdType>\r\n")
+ .append("<SN>" + sn + "</SN>\r\n")
+ .append("<DeviceID>" + deviceID + "</DeviceID>\r\n")
+ .append("<Result>OK</Result>\r\n")
+ .append("</Response>\r\n");
+
+ if (subscribeInfo.getExpires() > 0) {
+ redisCatchStorage.updateSubscribe(key, subscribeInfo);
+ }else if (subscribeInfo.getExpires() == 0) {
+ redisCatchStorage.delSubscribe(key);
+ }
+
+ try {
+ Response response = responseXmlAck(evt, resultXml.toString());
+ ToHeader toHeader = (ToHeader)response.getHeader(ToHeader.NAME);
+ subscribeInfo.setToTag(toHeader.getTag());
+ redisCatchStorage.updateSubscribe(key, subscribeInfo);
+
+ } catch (SipException e) {
+ e.printStackTrace();
+ } catch (InvalidArgumentException e) {
+ e.printStackTrace();
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
index c1f473d..5919619 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.media.zlm;
+import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@@ -8,6 +9,9 @@
import com.genersoft.iot.vmp.conf.MediaConfig;
import com.genersoft.iot.vmp.conf.UserSetup;
import com.genersoft.iot.vmp.gb28181.bean.Device;
+import com.genersoft.iot.vmp.gb28181.bean.GbStream;
+import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.media.zlm.dto.*;
import com.genersoft.iot.vmp.service.*;
import com.genersoft.iot.vmp.service.bean.SSRCInfo;
@@ -65,7 +69,7 @@
private IMediaService mediaService;
@Autowired
- private ZLMRESTfulUtils zlmresTfulUtils;
+ private EventPublisher eventPublisher;
@Autowired
private ZLMMediaListManager zlmMediaListManager;
@@ -341,29 +345,52 @@
if (!"rtp".equals(app)){
String type = OriginType.values()[item.getOriginType()].getType();
MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
+
if (mediaServerItem != null){
if (regist) {
+ StreamPushItem streamPushItem = null;
redisCatchStorage.addStream(mediaServerItem, type, app, streamId, item);
if (item.getOriginType() == OriginType.RTSP_PUSH.ordinal()
|| item.getOriginType() == OriginType.RTMP_PUSH.ordinal()
|| item.getOriginType() == OriginType.RTC_PUSH.ordinal() ) {
- zlmMediaListManager.addPush(item);
+ streamPushItem = zlmMediaListManager.addPush(item);
}
+ List<GbStream> gbStreams = new ArrayList<>();
+ if (streamPushItem == null || streamPushItem.getGbId() == null) {
+ GbStream gbStream = storager.getGbStream(app, streamId);
+ gbStreams.add(gbStream);
+ }else {
+ if (streamPushItem.getGbId() != null) {
+ gbStreams.add(streamPushItem);
+ }
+ }
+ if (gbStreams.size() > 0) {
+ eventPublisher.catalogEventPublishForStream(null, gbStreams, CatalogEvent.ON);
+ }
+
}else {
// 鍏煎娴佹敞閿�鏃剁被鍨嬩粠redis璁板綍鑾峰彇
MediaItem mediaItem = redisCatchStorage.getStreamInfo(app, streamId, mediaServerId);
- type = OriginType.values()[mediaItem.getOriginType()].getType();
+ if (mediaItem != null) {
+ type = OriginType.values()[mediaItem.getOriginType()].getType();
+ redisCatchStorage.removeStream(mediaServerItem.getId(), type, app, streamId);
+ }
+ GbStream gbStream = storager.getGbStream(app, streamId);
+ if (gbStream != null) {
+ eventPublisher.catalogEventPublishForStream(null, gbStream, CatalogEvent.OFF);
+ }
zlmMediaListManager.removeMedia(app, streamId);
- redisCatchStorage.removeStream(mediaServerItem.getId(), type, app, streamId);
}
- // 鍙戦�佹祦鍙樺寲redis娑堟伅
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("serverId", userSetup.getServerId());
- jsonObject.put("app", app);
- jsonObject.put("stream", streamId);
- jsonObject.put("register", regist);
- jsonObject.put("mediaServerId", mediaServerId);
- redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
+ if (type != null) {
+ // 鍙戦�佹祦鍙樺寲redis娑堟伅
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("serverId", userSetup.getServerId());
+ jsonObject.put("app", app);
+ jsonObject.put("stream", streamId);
+ jsonObject.put("register", regist);
+ jsonObject.put("mediaServerId", mediaServerId);
+ redisCatchStorage.sendStreamChangeMsg(type, jsonObject);
+ }
}
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
index 5b7ba1c..a6c30cf 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
@@ -105,7 +105,7 @@
updateMedia(mediaServerItem, app, streamId);
}
- public void addPush(MediaItem mediaItem) {
+ public StreamPushItem addPush(MediaItem mediaItem) {
// 鏌ユ壘姝ょ洿鎾祦鏄惁瀛樺湪redis棰勮gbId
StreamPushItem transform = streamPushService.transform(mediaItem);
// 浠巗treamId鍙栧嚭鏌ヨ鍏抽敭鍊�
@@ -130,7 +130,6 @@
for (GbStream gbStream : gbStreams) {
// 鍑虹幇浣跨敤鐩稿悓鍥芥爣Id鐨勮棰戞祦鏃讹紝浣跨敤鏂版祦鏇挎崲鏃ф祦锛�
gbStreamMapper.del(gbStream.getApp(), gbStream.getStream());
- platformGbStreamMapper.delByAppAndStream(gbStream.getApp(), gbStream.getStream());
if (!gbStream.isStatus()) {
streamPushMapper.del(gbStream.getApp(), gbStream.getStream());
}
@@ -142,6 +141,7 @@
gbStreamMapper.add(transform);
}
}
+ return transform;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java b/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java
index 9c5c32f..3bb964b 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java
@@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.service;
+import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.github.pagehelper.PageInfo;
@@ -35,6 +36,11 @@
/**
* 绉婚櫎鍥芥爣鍏宠仈
* @param gbStreams
+ * @param platformId
*/
- boolean delPlatformInfo(List<GbStream> gbStreams);
+ boolean delPlatformInfo(String platformId, List<GbStream> gbStreams);
+
+ DeviceChannel getDeviceChannelListByStream(GbStream gbStream, String catalogId, String deviceGBId);
+
+ void sendCatalogMsg(GbStream gbStream, String type);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
index 21c666f..35c262f 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
@@ -1,7 +1,14 @@
package com.genersoft.iot.vmp.service.impl;
+import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
+import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
import com.genersoft.iot.vmp.storager.dao.GbStreamMapper;
+import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;
import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper;
import com.genersoft.iot.vmp.service.IGbStreamService;
import com.github.pagehelper.PageHelper;
@@ -14,6 +21,7 @@
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
+import java.util.ArrayList;
import java.util.List;
@Service
@@ -33,6 +41,15 @@
@Autowired
private PlatformGbStreamMapper platformGbStreamMapper;
+ @Autowired
+ private ParentPlatformMapper platformMapper;
+
+ @Autowired
+ private SipConfig sipConfig;
+
+ @Autowired
+ private EventPublisher eventPublisher;
+
@Override
public PageInfo<GbStream> getAll(Integer page, Integer count) {
PageHelper.startPage(page, count);
@@ -51,32 +68,62 @@
// 鏀惧湪浜嬪姟鍐呮墽琛�
boolean result = false;
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+ ParentPlatform parentPlatform = platformMapper.getParentPlatByServerGBId(platformId);
try {
+ List<DeviceChannel> deviceChannelList = new ArrayList<>();
for (GbStream gbStream : gbStreams) {
gbStream.setCatalogId(catalogId);
gbStream.setPlatformId(platformId);
// TODO 淇敼涓烘壒閲忔彁浜�
platformGbStreamMapper.add(gbStream);
+ DeviceChannel deviceChannelListByStream = getDeviceChannelListByStream(gbStream, catalogId, parentPlatform.getDeviceGBId());
+ deviceChannelList.add(deviceChannelListByStream);
}
dataSourceTransactionManager.commit(transactionStatus); //鎵嬪姩鎻愪氦
+ eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.ADD);
result = true;
}catch (Exception e) {
logger.error("鎵归噺淇濆瓨娴佷笌骞冲彴鐨勫叧绯绘椂閿欒", e);
dataSourceTransactionManager.rollback(transactionStatus);
}
return result;
-
}
@Override
- public boolean delPlatformInfo(List<GbStream> gbStreams) {
+ public DeviceChannel getDeviceChannelListByStream(GbStream gbStream, String catalogId, String deviceGBId) {
+ DeviceChannel deviceChannel = new DeviceChannel();
+ deviceChannel.setChannelId(gbStream.getGbId());
+ deviceChannel.setName(gbStream.getName());
+ deviceChannel.setLongitude(gbStream.getLongitude());
+ deviceChannel.setLatitude(gbStream.getLatitude());
+ deviceChannel.setDeviceId(deviceGBId);
+ deviceChannel.setManufacture("wvp-pro");
+ deviceChannel.setStatus(gbStream.isStatus()?1:0);
+ deviceChannel.setParentId(catalogId ==null?gbStream.getCatalogId():catalogId);
+ deviceChannel.setRegisterWay(1);
+ deviceChannel.setCivilCode(sipConfig.getDomain());
+ deviceChannel.setModel("live");
+ deviceChannel.setOwner("wvp-pro");
+ deviceChannel.setParental(0);
+ deviceChannel.setSecrecy("0");
+ return deviceChannel;
+ }
+
+ @Override
+ public boolean delPlatformInfo(String platformId, List<GbStream> gbStreams) {
// 鏀惧湪浜嬪姟鍐呮墽琛�
boolean result = false;
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
try {
+ List<DeviceChannel> deviceChannelList = new ArrayList<>();
for (GbStream gbStream : gbStreams) {
platformGbStreamMapper.delByAppAndStream(gbStream.getApp(), gbStream.getStream());
+ DeviceChannel deviceChannel = new DeviceChannel();
+ deviceChannel.setChannelId(gbStream.getGbId());
+ deviceChannelList.add(deviceChannel);
+ eventPublisher.catalogEventPublish(platformId, deviceChannel, CatalogEvent.DEL);
}
+
dataSourceTransactionManager.commit(transactionStatus); //鎵嬪姩鎻愪氦
result = true;
}catch (Exception e) {
@@ -85,4 +132,27 @@
}
return result;
}
+
+ @Override
+ public void sendCatalogMsg(GbStream gbStream, String type) {
+ List<GbStream> gbStreams = new ArrayList<>();
+ if (gbStream.getGbId() != null) {
+ gbStreams.add(gbStream);
+ }else {
+ StreamProxyItem streamProxyItem = gbStreamMapper.selectOne(gbStream.getApp(), gbStream.getStream());
+ if (streamProxyItem != null && streamProxyItem.getGbId() != null){
+ gbStreams.add(streamProxyItem);
+ }
+ }
+ if (gbStreams.size() > 0) {
+ for (GbStream gs : gbStreams) {
+ List<ParentPlatform> parentPlatforms = platformGbStreamMapper.selectByAppAndStream(gs.getApp(), gs.getStream());
+ if (parentPlatforms.size() > 0) {
+ for (ParentPlatform parentPlatform : parentPlatforms) {
+ eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), gs, type);
+ }
+ }
+ }
+ }
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
index 1efc614..1c8f191 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
@@ -2,9 +2,13 @@
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.common.StreamInfo;
+import com.genersoft.iot.vmp.conf.SipConfig;
import com.genersoft.iot.vmp.conf.UserSetup;
+import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
@@ -58,10 +62,16 @@
private UserSetup userSetup;
@Autowired
+ private SipConfig sipConfig;
+
+ @Autowired
private GbStreamMapper gbStreamMapper;
@Autowired
private PlatformGbStreamMapper platformGbStreamMapper;
+
+ @Autowired
+ private EventPublisher eventPublisher;
@Autowired
private ParentPlatformMapper parentPlatformMapper;
@@ -146,6 +156,7 @@
StreamProxyItem streamProxyItems = platformGbStreamMapper.selectOne(param.getApp(), stream, parentPlatform.getServerGBId());
if (streamProxyItems == null) {
platformGbStreamMapper.add(param);
+ eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), param, CatalogEvent.ADD);
}
}
}
@@ -194,6 +205,7 @@
public void del(String app, String stream) {
StreamProxyItem streamProxyItem = videoManagerStorager.queryStreamProxy(app, stream);
if (streamProxyItem != null) {
+ gbStreamService.sendCatalogMsg(streamProxyItem, CatalogEvent.DEL);
videoManagerStorager.deleteStreamProxy(app, stream);
JSONObject jsonObject = removeStreamProxyFromZlm(streamProxyItem);
if (jsonObject != null && jsonObject.getInteger("code") == 0) {
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 3fac37a..c8bf191 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
@@ -5,12 +5,16 @@
import com.alibaba.fastjson.TypeReference;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.conf.UserSetup;
+import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
import com.genersoft.iot.vmp.media.zlm.dto.*;
+import com.genersoft.iot.vmp.service.IGbStreamService;
import com.genersoft.iot.vmp.service.IMediaServerService;
import com.genersoft.iot.vmp.service.IStreamPushService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
@@ -40,6 +44,12 @@
@Autowired
private PlatformGbStreamMapper platformGbStreamMapper;
+
+ @Autowired
+ private IGbStreamService gbStreamService;
+
+ @Autowired
+ private EventPublisher eventPublisher;
@Autowired
private ZLMRESTfulUtils zlmresTfulUtils;
@@ -115,6 +125,7 @@
stream.setStreamType("push");
stream.setStatus(true);
int add = gbStreamMapper.add(stream);
+
// 鏌ユ壘寮�鍚簡鍏ㄩ儴鐩存挱娴佸叡浜殑涓婄骇骞冲彴
List<ParentPlatform> parentPlatforms = parentPlatformMapper.selectAllAhareAllLiveStream();
if (parentPlatforms.size() > 0) {
@@ -122,18 +133,30 @@
stream.setCatalogId(parentPlatform.getCatalogId());
stream.setPlatformId(parentPlatform.getServerGBId());
String streamId = stream.getStream();
- StreamProxyItem streamProxyItems = platformGbStreamMapper.selectOne(stream.getApp(), streamId, parentPlatform.getServerGBId());
- if (streamProxyItems == null) {
+ StreamProxyItem streamProxyItem = platformGbStreamMapper.selectOne(stream.getApp(), streamId, parentPlatform.getServerGBId());
+ if (streamProxyItem == null) {
platformGbStreamMapper.add(stream);
+ eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), stream, CatalogEvent.ADD);
+ }else {
+ if (!streamProxyItem.getGbId().equals(stream.getGbId())) {
+ // 姝ゆ祦浣跨敤鍙︿竴涓浗鏍嘔d宸茬粡涓庤骞冲彴鍏宠仈锛岀Щ闄ゆ璁板綍
+ platformGbStreamMapper.delByAppAndStreamAndPlatform(stream.getApp(), streamId, parentPlatform.getServerGBId());
+ platformGbStreamMapper.add(stream);
+ eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), stream, CatalogEvent.ADD);
+ }
}
}
}
+
return add > 0;
}
@Override
public boolean removeFromGB(GbStream stream) {
+ // 鍒ゆ柇鏄惁闇�瑕佸彂閫佷簨浠�
+ gbStreamService.sendCatalogMsg(stream, CatalogEvent.DEL);
int del = gbStreamMapper.del(stream.getApp(), stream.getStream());
+ platformGbStreamMapper.delByAppAndStream(stream.getApp(), stream.getStream());
MediaServerItem mediaInfo = mediaServerService.getOne(stream.getMediaServerId());
JSONObject mediaList = zlmresTfulUtils.getMediaList(mediaInfo, stream.getApp(), stream.getStream());
if (mediaList == null) {
@@ -152,6 +175,8 @@
@Override
public boolean stop(String app, String streamId) {
StreamPushItem streamPushItem = streamPushMapper.selectOne(app, streamId);
+ gbStreamService.sendCatalogMsg(streamPushItem, CatalogEvent.DEL);
+
int delStream = streamPushMapper.del(app, streamId);
gbStreamMapper.del(app, streamId);
platformGbStreamMapper.delByAppAndStream(app, streamId);
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 8dc21ff..bf2104c 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -210,4 +210,8 @@
void delSubscribe(String key);
MediaItem getStreamInfo(String app, String streamId, String mediaServerId);
+
+ List<SubscribeInfo> getAllSubscribe();
+
+ List<String> getAllSubscribePlatform();
}
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 229ab8c..a89fc56 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -100,6 +100,7 @@
* @return
*/
public List<DeviceChannel> queryChannelsByDeviceId(String deviceId);
+ public List<DeviceChannel> queryOnlineChannelsByDeviceId(String deviceId);
/**
* 鑾峰彇鏌愪釜璁惧鐨勯�氶亾
@@ -341,7 +342,7 @@
* @param channelId
* @return
*/
- List<GbStream> queryStreamInParentPlatform(String platformId, String channelId);
+ GbStream queryStreamInParentPlatform(String platformId, String channelId);
/**
* 鑾峰彇骞冲彴鍏宠仈鐨勭洿鎾祦
@@ -459,4 +460,10 @@
int delRelation(PlatformCatalog platformCatalog);
int updateStreamGPS(List<GPSMsgInfo> gpsMsgInfo);
+
+ List<ParentPlatform> queryPlatFormListForGBWithGBId(String channelId, List<String> platforms);
+
+ List<ParentPlatform> queryPlatFormListForStreamWithGBId(String app, String stream, List<String> platforms);
+
+ GbStream getGbStream(String app, String streamId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
index 3a4f466..4a12ce4 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
@@ -54,17 +54,22 @@
int update(DeviceChannel channel);
@Select(value = {" <script>" +
- "SELECT * FROM ( "+
- " SELECT * , (SELECT count(0) FROM device_channel WHERE parentId=dc.channelId) as subCount FROM device_channel dc " +
- " WHERE dc.deviceId=#{deviceId} " +
- " <if test='query != null'> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
- " <if test='parentChannelId != null'> AND dc.parentId=#{parentChannelId} </if> " +
- " <if test='online == true' > AND dc.status=1</if>" +
- " <if test='online == false' > AND dc.status=0</if>) dcr" +
- " WHERE 1=1 " +
+ "SELECT " +
+ "dc1.*, " +
+ "COUNT(dc2.channelId) as subCount " +
+ "from " +
+ "device_channel dc1 " +
+ "left join device_channel dc2 on " +
+ "dc1.channelId = dc2.parentId " +
+ "WHERE " +
+ "dc1.deviceId = #{deviceId} " +
+ " <if test='query != null'> AND (dc1.channelId LIKE '%${query}%' OR dc1.name LIKE '%${query}%' OR dc1.name LIKE '%${query}%')</if> " +
+ " <if test='parentChannelId != null'> AND dc1.parentId=#{parentChannelId} </if> " +
+ " <if test='online == true' > AND dc1.status=1</if>" +
+ " <if test='online == false' > AND dc1.status=0</if>" +
" <if test='hasSubChannel == true' > AND subCount >0</if>" +
" <if test='hasSubChannel == false' > AND subCount=0</if>" +
- " ORDER BY channelId ASC" +
+ "GROUP BY dc1.channelId " +
" </script>"})
List<DeviceChannel> queryChannels(String deviceId, String parentChannelId, String query, Boolean hasSubChannel, Boolean online);
@@ -170,19 +175,30 @@
"</script>"})
int batchUpdate(List<DeviceChannel> updateChannels);
+
@Select(value = {" <script>" +
- "SELECT * FROM ( "+
- " SELECT * , (SELECT count(0) FROM device_channel WHERE parentId=dc.channelId) as subCount FROM device_channel dc " +
- " WHERE dc.deviceId=#{deviceId} " +
- " <if test='query != null'> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
- " <if test='parentChannelId != null'> AND dc.parentId=#{parentChannelId} </if> " +
- " <if test='online == true' > AND dc.status=1</if>" +
- " <if test='online == false' > AND dc.status=0</if>) dcr" +
- " WHERE 1=1 " +
+ "SELECT " +
+ "dc1.*, " +
+ "COUNT(dc2.channelId) as subCount " +
+ "from " +
+ "device_channel dc1 " +
+ "left join device_channel dc2 on " +
+ "dc1.channelId = dc2.parentId " +
+ "WHERE " +
+ "dc1.deviceId = #{deviceId} " +
+ " <if test='query != null'> AND (dc1.channelId LIKE '%${query}%' OR dc1.name LIKE '%${query}%' OR dc1.name LIKE '%${query}%')</if> " +
+ " <if test='parentChannelId != null'> AND dc1.parentId=#{parentChannelId} </if> " +
+ " <if test='online == true' > AND dc1.status=1</if>" +
+ " <if test='online == false' > AND dc1.status=0</if>" +
" <if test='hasSubChannel == true' > AND subCount >0</if>" +
" <if test='hasSubChannel == false' > AND subCount=0</if>" +
- " ORDER BY channelId ASC" +
- " LIMIT #{limit} OFFSET #{start}" +
+ "GROUP BY dc1.channelId " +
+ "ORDER BY dc1.channelId ASC " +
+ "Limit #{limit} OFFSET #{start}" +
" </script>"})
- List<DeviceChannel> queryChannelsByDeviceIdWithStartAndLimit(String deviceId, String parentChannelId, String query, Boolean hasSubChannel, Boolean online, int start, int limit);
+ List<DeviceChannel> queryChannelsByDeviceIdWithStartAndLimit(String deviceId, String parentChannelId, String query,
+ Boolean hasSubChannel, Boolean online, int start, int limit);
+
+ @Select("SELECT * FROM device_channel WHERE deviceId=#{deviceId} AND status=1")
+ List<DeviceChannel> queryOnlineChannelsByDeviceId(String deviceId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
index a51f3dc..82df331 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
@@ -13,7 +13,7 @@
@Repository
public interface GbStreamMapper {
- @Insert("INSERT INTO gb_stream (app, stream, gbId, name, " +
+ @Insert("REPLACE INTO gb_stream (app, stream, gbId, name, " +
"longitude, latitude, streamType, mediaServerId, status) VALUES" +
"('${app}', '${stream}', '${gbId}', '${name}', " +
"'${longitude}', '${latitude}', '${streamType}', " +
@@ -48,7 +48,7 @@
@Select("SELECT gs.*, pgs.platformId as platformId, pgs.catalogId as catalogId FROM gb_stream gs " +
"LEFT JOIN platform_gb_stream pgs ON gs.app = pgs.app AND gs.stream = pgs.stream " +
"WHERE gs.gbId = '${gbId}' AND pgs.platformId = '${platformId}'")
- List<GbStream> queryStreamInPlatform(String platformId, String gbId);
+ GbStream queryStreamInPlatform(String platformId, String gbId);
@Select("SELECT gs.*, pgs.platformId as platformId, pgs.catalogId as catalogId FROM gb_stream gs " +
"LEFT JOIN platform_gb_stream pgs ON gs.app = pgs.app AND gs.stream = pgs.stream " +
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java
index da38cb0..a9e2c62 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java
@@ -2,6 +2,7 @@
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
import org.apache.ibatis.annotations.Delete;
@@ -73,4 +74,18 @@
"DELETE FROM platform_gb_channel WHERE catalogId=#{parentId} AND platformId=#{platformId} AND channelId=#{id}" +
"</script>")
int delByCatalogIdAndChannelIdAndPlatformId(PlatformCatalog platformCatalog);
+
+ @Select("<script> " +
+ "SELECT " +
+ "pp.* " +
+ "FROM " +
+ "parent_platform pp " +
+ "left join platform_gb_channel pgc on " +
+ "pp.serverGBId = pgc.platformId " +
+ "WHERE " +
+ "pgc.channelId = #{channelId} " +
+ "AND pp.serverGBId IN" +
+ "<foreach collection='platforms' item='item' open='(' separator=',' close=')' > #{item}</foreach>" +
+ "</script> ")
+ List<ParentPlatform> queryPlatFormListForGBWithGBId(String channelId, List<String> platforms);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java
index 06486c9..248b37a 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java
@@ -1,6 +1,7 @@
package com.genersoft.iot.vmp.storager.dao;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
+import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
import com.genersoft.iot.vmp.gb28181.bean.PlatformGbStream;
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
@@ -14,7 +15,7 @@
@Repository
public interface PlatformGbStreamMapper {
- @Insert("INSERT INTO platform_gb_stream (app, stream, platformId, catalogId) VALUES" +
+ @Insert("REPLACE INTO platform_gb_stream (app, stream, platformId, catalogId) VALUES" +
"('${app}', '${stream}', '${platformId}', '${catalogId}')")
int add(PlatformGbStream platformGbStream);
@@ -24,10 +25,20 @@
@Delete("DELETE FROM platform_gb_stream WHERE platformId=#{platformId}")
int delByPlatformId(String platformId);
- @Select("SELECT * FROM platform_gb_stream WHERE app=#{app} AND stream=#{stream}")
- List<StreamProxyItem> selectByAppAndStream(String app, String stream);
+ @Select("SELECT " +
+ "pp.* " +
+ "FROM " +
+ "platform_gb_stream pgs " +
+ "LEFT JOIN parent_platform pp ON pp.serverGBId = pgs.platformId " +
+ "WHERE " +
+ "pgs.app =#{app} " +
+ "AND pgs.stream =#{stream} " +
+ "GROUP BY pp.serverGBId")
+ List<ParentPlatform> selectByAppAndStream(String app, String stream);
- @Select("SELECT * FROM platform_gb_stream WHERE app=#{app} AND stream=#{stream} AND platformId=#{serverGBId}")
+ @Select("SELECT pgs.*, gs.gbId FROM platform_gb_stream pgs " +
+ "LEFT JOIN gb_stream gs ON pgs.app = gs.app AND pgs.stream = gs.stream " +
+ "WHERE pgs.app=#{app} AND pgs.stream=#{stream} AND pgs.platformId=#{serverGBId}")
StreamProxyItem selectOne(String app, String stream, String serverGBId);
@Select("select gs.* \n" +
@@ -47,4 +58,21 @@
@Delete("DELETE FROM platform_gb_stream WHERE catalogId=#{id}")
int delByCatalogId(String id);
+ @Select("<script> " +
+ "SELECT " +
+ "pp.* " +
+ "FROM " +
+ "parent_platform pp " +
+ "left join platform_gb_stream pgs on " +
+ "pp.serverGBId = pgs.platformId " +
+ "WHERE " +
+ "pgs.app = #{app} " +
+ "AND pgs.stream = #{stream}" +
+ "AND pp.serverGBId IN" +
+ "<foreach collection='platforms' item='item' open='(' separator=',' close=')' > #{item}</foreach>" +
+ "</script> ")
+ List<ParentPlatform> queryPlatFormListForGBWithGBId(String app, String stream, List<String> platforms);
+
+ @Select("SELECT * FROM platform_gb_stream WHERE app=#{app} AND stream=#{stream} AND platformId=#{platformId}")
+ int delByAppAndStreamAndPlatform(String app, String streamId, String platformId);
}
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 1d68943..56789d9 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
@@ -250,7 +250,7 @@
@Override
public void updatePlatformRegisterInfo(String callId, String platformGbId) {
String key = VideoManagerConstants.PLATFORM_REGISTER_INFO_PREFIX + userSetup.getServerId() + "_" + callId;
- redis.set(key, platformGbId);
+ redis.set(key, platformGbId, 30);
}
@@ -508,4 +508,30 @@
return result;
}
+
+ @Override
+ public List<SubscribeInfo> getAllSubscribe() {
+ String scanKey = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_*";
+ List<SubscribeInfo> result = new ArrayList<>();
+ List<Object> keys = redis.scan(scanKey);
+ for (int i = 0; i < keys.size(); i++) {
+ String key = (String) keys.get(i);
+ SubscribeInfo subscribeInfo = (SubscribeInfo) redis.get(key);
+ result.add(subscribeInfo);
+ }
+ return result;
+ }
+
+ @Override
+ public List<String> getAllSubscribePlatform() {
+ String scanKey = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_*";
+ List<String> result = new ArrayList<>();
+ List<Object> keys = redis.scan(scanKey);
+ for (int i = 0; i < keys.size(); i++) {
+ String key = (String) keys.get(i);
+ String platformId = key.substring(scanKey.length() - 1);
+ result.add(platformId);
+ }
+ return result;
+ }
}
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 2f4c966..e0b955f 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
@@ -1,6 +1,9 @@
package com.genersoft.iot.vmp.storager.impl;
+import com.genersoft.iot.vmp.conf.SipConfig;
import com.genersoft.iot.vmp.gb28181.bean.*;
+import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
+import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
@@ -27,15 +30,21 @@
import java.util.*;
/**
- * @description:瑙嗛璁惧鏁版嵁瀛樺偍-jdbc瀹炵幇
- * @author: swwheihei
- * @date: 2020骞�5鏈�6鏃� 涓嬪崍2:31:42
+ * 瑙嗛璁惧鏁版嵁瀛樺偍-jdbc瀹炵幇
+ * swwheihei
+ * 2020骞�5鏈�6鏃� 涓嬪崍2:31:42
*/
@SuppressWarnings("rawtypes")
@Component
public class VideoManagerStoragerImpl implements IVideoManagerStorager {
private Logger logger = LoggerFactory.getLogger(VideoManagerStoragerImpl.class);
+
+ @Autowired
+ EventPublisher eventPublisher;
+
+ @Autowired
+ SipConfig sipConfig;
@Autowired
DataSourceTransactionManager dataSourceTransactionManager;
@@ -134,6 +143,7 @@
return deviceMapper.add(device) > 0;
}else {
redisCatchStorage.updateDevice(device);
+
return deviceMapper.update(device) > 0;
}
@@ -408,6 +418,8 @@
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;
}
@@ -514,7 +526,7 @@
if (parentPlatform.isShareAllLiveStream()) {
gbStreamService.addPlatformInfo(gbStreams, parentPlatform.getServerGBId(), parentPlatform.getCatalogId());
}else {
- gbStreamService.delPlatformInfo(gbStreams);
+ gbStreamService.delPlatformInfo(parentPlatform.getServerGBId(), gbStreams);
}
}
}
@@ -590,6 +602,9 @@
int result = 0;
if (channelReducesToAdd.size() > 0) {
result = platformChannelMapper.addChannels(platformId, channelReducesToAdd);
+ // TODO 鍚庣画缁欏钩鍙板鍔犳帶鍒跺紑鍏充互鎺у埗鏄惁鍝嶅簲鐩綍璁㈤槄
+ List<DeviceChannel> deviceChannelList = getDeviceChannelListByChannelReduceList(channelReducesToAdd, catalogId);
+ eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.ADD);
}
return result;
@@ -600,7 +615,13 @@
public int delChannelForGB(String platformId, List<ChannelReduce> channelReduces) {
int result = platformChannelMapper.delChannelForGB(platformId, channelReduces);
-
+ List<DeviceChannel> deviceChannelList = new ArrayList<>();
+ for (ChannelReduce channelReduce : channelReduces) {
+ DeviceChannel deviceChannel = new DeviceChannel();
+ deviceChannel.setChannelId(channelReduce.getChannelId());
+ deviceChannelList.add(deviceChannel);
+ }
+ eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL);
return result;
}
@@ -739,7 +760,7 @@
* @return
*/
@Override
- public List<GbStream> queryStreamInParentPlatform(String platformId, String gbId) {
+ public GbStream queryStreamInParentPlatform(String platformId, String gbId) {
return gbStreamMapper.queryStreamInPlatform(platformId, gbId);
}
@@ -771,7 +792,11 @@
streamPushMapper.addAll(streamPushItems);
// TODO 寰呬紭鍖�
for (int i = 0; i < streamPushItems.size(); i++) {
- gbStreamMapper.setStatus(streamPushItems.get(i).getApp(), streamPushItems.get(i).getStream(), true);
+ int onlineResult = gbStreamMapper.setStatus(streamPushItems.get(i).getApp(), streamPushItems.get(i).getStream(), true);
+ if (onlineResult > 0) {
+ // 鍙戦�佷笂绾块�氱煡
+ eventPublisher.catalogEventPublishForStream(null, streamPushItems.get(i), CatalogEvent.ON);
+ }
}
}
@@ -780,6 +805,7 @@
streamPushMapper.del(streamPushItem.getApp(), streamPushItem.getStream());
streamPushMapper.add(streamPushItem);
gbStreamMapper.setStatus(streamPushItem.getApp(), streamPushItem.getStream(), true);
+
if(!StringUtils.isEmpty(streamPushItem.getGbId() )){
// 鏌ユ壘寮�鍚簡鍏ㄩ儴鐩存挱娴佸叡浜殑涓婄骇骞冲彴
List<ParentPlatform> parentPlatforms = parentPlatformMapper.selectAllAhareAllLiveStream();
@@ -858,7 +884,12 @@
@Override
public int addCatalog(PlatformCatalog platformCatalog) {
- return catalogMapper.add(platformCatalog);
+ int result = catalogMapper.add(platformCatalog);
+ if (result > 0) {
+ DeviceChannel deviceChannel = getDeviceChannelByCatalog(platformCatalog);
+ eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.ADD);
+ }
+ return result;
}
@Override
@@ -873,23 +904,56 @@
List<PlatformCatalog> platformCatalogList = catalogMapper.selectByParentId(platformCatalog.getPlatformId(), platformCatalog.getId());
for (PlatformCatalog catalog : platformCatalogList) {
if (catalog.getChildrenCount() == 0) {
- catalogMapper.del(catalog.getId());
- platformGbStreamMapper.delByCatalogId(catalog.getId());
- platformChannelMapper.delByCatalogId(catalog.getId());
+ delCatalogExecute(catalog.getId(), catalog.getPlatformId());
}else {
delCatalog(catalog.getId());
}
}
}
- int delresult = catalogMapper.del(id);
- int delStreamresult = platformGbStreamMapper.delByCatalogId(id);
- int delChanneresult = platformChannelMapper.delByCatalogId(id);
- return delresult + delChanneresult + delStreamresult;
+ return delCatalogExecute(id, platformCatalog.getPlatformId());
}
+ private int delCatalogExecute(String id, String platformId) {
+ int delresult = catalogMapper.del(id);
+ DeviceChannel deviceChannelForCatalog = new DeviceChannel();
+ if (delresult > 0){
+ deviceChannelForCatalog.setChannelId(id);
+ eventPublisher.catalogEventPublish(platformId, deviceChannelForCatalog, CatalogEvent.DEL);
+ }
+
+ List<GbStream> gbStreams = platformGbStreamMapper.queryChannelInParentPlatformAndCatalog(platformId, id);
+ if (gbStreams.size() > 0){
+ List<DeviceChannel> deviceChannelList = new ArrayList<>();
+ for (GbStream gbStream : gbStreams) {
+ DeviceChannel deviceChannel = new DeviceChannel();
+ deviceChannel.setChannelId(gbStream.getGbId());
+ deviceChannelList.add(deviceChannel);
+ }
+ eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL);
+ }
+ int delStreamresult = platformGbStreamMapper.delByCatalogId(id);
+ List<PlatformCatalog> platformCatalogs = platformChannelMapper.queryChannelInParentPlatformAndCatalog(platformId, id);
+ if (platformCatalogs.size() > 0){
+ List<DeviceChannel> deviceChannelList = new ArrayList<>();
+ for (PlatformCatalog platformCatalog : platformCatalogs) {
+ DeviceChannel deviceChannel = new DeviceChannel();
+ deviceChannel.setChannelId(platformCatalog.getId());
+ deviceChannelList.add(deviceChannel);
+ }
+ eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL);
+ }
+ int delChannelresult = platformChannelMapper.delByCatalogId(id);
+ return delresult + delChannelresult + delStreamresult;
+ }
+
@Override
public int updateCatalog(PlatformCatalog platformCatalog) {
- return catalogMapper.update(platformCatalog);
+ int result = catalogMapper.update(platformCatalog);
+ if (result > 0) {
+ DeviceChannel deviceChannel = getDeviceChannelByCatalog(platformCatalog);
+ eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.UPDATE);
+ }
+ return result;
}
@Override
@@ -905,11 +969,17 @@
@Override
public int delRelation(PlatformCatalog platformCatalog) {
if (platformCatalog.getType() == 1) {
+ DeviceChannel deviceChannel = new DeviceChannel();
+ deviceChannel.setChannelId(platformCatalog.getId());
+ eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.DEL);
return platformChannelMapper.delByCatalogIdAndChannelIdAndPlatformId(platformCatalog);
}else if (platformCatalog.getType() == 2) {
List<GbStream> gbStreams = platformGbStreamMapper.queryChannelInParentPlatformAndCatalog(platformCatalog.getPlatformId(), platformCatalog.getParentId());
for (GbStream gbStream : gbStreams) {
if (gbStream.getGbId().equals(platformCatalog.getId())) {
+ DeviceChannel deviceChannel = new DeviceChannel();
+ deviceChannel.setChannelId(gbStream.getGbId());
+ eventPublisher.catalogEventPublish(platformCatalog.getPlatformId(), deviceChannel, CatalogEvent.DEL);
return platformGbStreamMapper.delByAppAndStream(gbStream.getApp(), gbStream.getStream());
}
}
@@ -921,4 +991,57 @@
public int updateStreamGPS(List<GPSMsgInfo> gpsMsgInfos) {
return gbStreamMapper.updateStreamGPS(gpsMsgInfos);
}
+
+ private List<DeviceChannel> getDeviceChannelListByChannelReduceList(List<ChannelReduce> channelReduces, String catalogId) {
+ List<DeviceChannel> deviceChannelList = new ArrayList<>();
+ if (channelReduces.size() > 0){
+ for (ChannelReduce channelReduce : channelReduces) {
+ DeviceChannel deviceChannel = queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId());
+ deviceChannel.setParental(1);
+ deviceChannel.setParentId(catalogId);
+ deviceChannelList.add(deviceChannel);
+ }
+ }
+ return deviceChannelList;
+ }
+
+ private DeviceChannel getDeviceChannelByCatalog(PlatformCatalog catalog) {
+ ParentPlatform parentPlatByServerGBId = platformMapper.getParentPlatByServerGBId(catalog.getPlatformId());
+ DeviceChannel deviceChannel = new DeviceChannel();
+ deviceChannel.setChannelId(catalog.getId());
+ deviceChannel.setName(catalog.getName());
+ deviceChannel.setLongitude(0.0);
+ deviceChannel.setLatitude(0.0);
+ deviceChannel.setDeviceId(parentPlatByServerGBId.getDeviceGBId());
+ deviceChannel.setManufacture("wvp-pro");
+ deviceChannel.setStatus(1);
+ deviceChannel.setParental(1);
+ deviceChannel.setParentId(catalog.getParentId());
+ deviceChannel.setRegisterWay(1);
+ deviceChannel.setCivilCode(sipConfig.getDomain());
+ deviceChannel.setModel("live");
+ deviceChannel.setOwner("wvp-pro");
+ deviceChannel.setSecrecy("0");
+ return deviceChannel;
+ }
+
+ @Override
+ public List<DeviceChannel> queryOnlineChannelsByDeviceId(String deviceId) {
+ return deviceChannelMapper.queryOnlineChannelsByDeviceId(deviceId);
+ }
+
+ @Override
+ public List<ParentPlatform> queryPlatFormListForGBWithGBId(String channelId, List<String> platforms) {
+ return platformChannelMapper.queryPlatFormListForGBWithGBId(channelId, platforms);
+ }
+
+ @Override
+ public List<ParentPlatform> queryPlatFormListForStreamWithGBId(String app, String stream, List<String> platforms) {
+ return platformGbStreamMapper.queryPlatFormListForGBWithGBId(app, stream, platforms);
+ }
+
+ @Override
+ public GbStream getGbStream(String app, String streamId) {
+ return gbStreamMapper.selectOne(app, streamId);
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java
index 69492a7..a2fcf15 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java
@@ -62,7 +62,7 @@
@DeleteMapping(value = "/del")
@ResponseBody
public Object del(@RequestBody GbStreamParam gbStreamParam){
- if (gbStreamService.delPlatformInfo(gbStreamParam.getGbStreams())) {
+ if (gbStreamService.delPlatformInfo(gbStreamParam.getPlatformId(), gbStreamParam.getGbStreams())) {
return "success";
}else {
return "fail";
diff --git a/web_src/package-lock.json b/web_src/package-lock.json
index 1fc922b..9a0ce7f 100644
--- a/web_src/package-lock.json
+++ b/web_src/package-lock.json
@@ -5094,7 +5094,8 @@
},
"js-yaml": {
"version": "3.7.0",
- "resolved": "",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
"dev": true,
"requires": {
"argparse": "^1.0.7",
diff --git a/web_src/src/components/dialog/chooseChannelForStream.vue b/web_src/src/components/dialog/chooseChannelForStream.vue
index 341c22f..20c42ef 100644
--- a/web_src/src/components/dialog/chooseChannelForStream.vue
+++ b/web_src/src/components/dialog/chooseChannelForStream.vue
@@ -147,6 +147,7 @@
method:"delete",
url:"/api/gbStream/del",
data:{
+ platformId: that.platformId,
gbStreams: delData,
}
}).then((res)=>{
--
Gitblit v1.8.0