diff --git a/pom.xml b/pom.xml
index 987e76e9..9331de3b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -155,7 +155,6 @@
1.7.35
-
org.dom4j
@@ -212,6 +211,13 @@
3.0.4
+
+
+ com.github.oshi
+ oshi-core
+ 6.1.0
+
+
org.springframework.session
spring-session-core
@@ -271,5 +277,16 @@
+
+
+ src/main/resources
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
diff --git a/src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java b/src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java
new file mode 100644
index 00000000..81a93acf
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java
@@ -0,0 +1,22 @@
+package com.genersoft.iot.vmp.common;
+
+public class SystemInfoDto {
+ private String time;
+ private T data;
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public T getData() {
+ return data;
+ }
+
+ public void setData(T data) {
+ this.data = data;
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
index ffbed508..923e411e 100644
--- a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
+++ b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
@@ -60,7 +60,13 @@ public class VideoManagerConstants {
public static final String SIP_SN_PREFIX = "VMP_SIP_SN_";
- public static final String SIP_SUBSCRIBE_PREFIX = "SIP_SUBSCRIBE_";
+ public static final String SIP_SUBSCRIBE_PREFIX = "VMP_SIP_SUBSCRIBE_";
+
+ public static final String SYSTEM_INFO_CPU_PREFIX = "VMP_SYSTEM_INFO_CPU_";
+
+ public static final String SYSTEM_INFO_MEM_PREFIX = "VMP_SYSTEM_INFO_MEM_";
+
+ public static final String SYSTEM_INFO_NET_PREFIX = "VMP_SYSTEM_INFO_NET_";
//************************** redis 消息*********************************
public static final String WVP_MSG_STREAM_CHANGE_PREFIX = "WVP_MSG_STREAM_CHANGE_";
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java b/src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java
new file mode 100644
index 00000000..13ec6927
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java
@@ -0,0 +1,34 @@
+package com.genersoft.iot.vmp.conf;
+
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.utils.SystemInfoUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 获取系统信息写入redis
+ */
+@Component
+public class SystemInfoTimerTask {
+
+ @Autowired
+ private IRedisCatchStorage redisCatchStorage;
+
+ @Scheduled(fixedRate = 1000) //每1秒执行一次
+ public void execute(){
+ try {
+ double cpuInfo = SystemInfoUtils.getCpuInfo();
+ redisCatchStorage.addCpuInfo(cpuInfo);
+ double memInfo = SystemInfoUtils.getMemInfo();
+ redisCatchStorage.addMemInfo(memInfo);
+ Map networkInterfaces = SystemInfoUtils.getNetworkInterfaces();
+ redisCatchStorage.addNetInfo(networkInterfaces);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ }
+}
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 426e2e58..8c8565be 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
@@ -131,7 +131,7 @@ public class EventPublisher {
}
@Async
- public void catalogEventPublishForStream(String platformId, List gbStreams, String type) {
+ public void catalogEventPublishForStream(String platformId, GbStream[] gbStreams, String type) {
CatalogEvent outEvent = new CatalogEvent(this);
outEvent.setGbStreams(gbStreams);
outEvent.setType(type);
@@ -141,8 +141,7 @@ public class EventPublisher {
@Async
public void catalogEventPublishForStream(String platformId, GbStream gbStream, String type) {
- List gbStreamList = new ArrayList<>();
- gbStreamList.add(gbStream);
- catalogEventPublishForStream(platformId, gbStreamList, type);
+ GbStream[] gbStreams = {gbStream};
+ catalogEventPublishForStream(platformId, gbStreams, type);
}
}
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
index c035b808..e343fec7 100644
--- 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
@@ -20,7 +20,7 @@ public class CatalogEvent extends ApplicationEvent {
public static final String UPDATE = "UPDATE"; // 更新
private List deviceChannels;
- private List gbStreams;
+ private GbStream[] gbStreams;
private String type;
private String platformId;
@@ -48,11 +48,11 @@ public class CatalogEvent extends ApplicationEvent {
this.platformId = platformId;
}
- public List getGbStreams() {
+ public GbStream[] getGbStreams() {
return gbStreams;
}
- public void setGbStreams(List gbStreams) {
+ public void setGbStreams(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
index 52442cc7..997031b6 100644
--- 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
@@ -94,7 +94,7 @@ public class CatalogEventLister implements ApplicationListener {
if (event.getDeviceChannels() != null) {
deviceChannelList.addAll(event.getDeviceChannels());
}
- if (event.getGbStreams() != null && event.getGbStreams().size() > 0){
+ if (event.getGbStreams() != null && event.getGbStreams().length > 0){
for (GbStream gbStream : event.getGbStreams()) {
DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), parentPlatform.getDeviceGBId());
deviceChannelList.add(deviceChannelByStream);
@@ -134,7 +134,7 @@ public class CatalogEventLister implements ApplicationListener {
if (event.getDeviceChannels() != null) {
deviceChannelList.addAll(event.getDeviceChannels());
}
- if (event.getGbStreams() != null && event.getGbStreams().size() > 0){
+ if (event.getGbStreams() != null && event.getGbStreams().length > 0){
for (GbStream gbStream : event.getGbStreams()) {
DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), parentPlatform.getDeviceGBId());
deviceChannelList.add(deviceChannelByStream);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java
index 0b1a5722..de2a9086 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/CatalogNotifyMessageHandler.java
@@ -96,7 +96,6 @@ public class CatalogNotifyMessageHandler extends SIPRequestProcessorParent imple
if (channelReduces.size() > 0) {
for (ChannelReduce channelReduce : channelReduces) {
DeviceChannel deviceChannel = storager.queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId());
- // TODO 目前暂时认为这里只用通道没有目录
deviceChannel.setParental(0);
deviceChannel.setParentId(channelReduce.getCatalogId());
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 6e6b7b50..34ee4a86 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
@@ -371,7 +371,7 @@ public class ZLMHttpHookListener {
}
}
if (gbStreams.size() > 0) {
- eventPublisher.catalogEventPublishForStream(null, gbStreams, CatalogEvent.ON);
+ eventPublisher.catalogEventPublishForStream(null, gbStreams.toArray(new GbStream[0]), CatalogEvent.ON);
}
}else {
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 a48bfb50..1a851d70 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java
@@ -17,7 +17,7 @@ public interface IGbStreamService {
* @param count
* @return
*/
- PageInfo getAll(Integer page, Integer count, String platFormId);
+ PageInfo getAll(Integer page, Integer count, String platFormId, String catalogId,String query,Boolean pushing,String mediaServerId);
/**
@@ -43,4 +43,5 @@ public interface IGbStreamService {
DeviceChannel getDeviceChannelListByStream(GbStream gbStream, String catalogId, String deviceGBId);
void sendCatalogMsg(GbStream gbStream, String type);
+ void sendCatalogMsgs(List gbStreams, String type);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java b/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
index 8a09de7b..1d57d468 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
@@ -30,11 +30,9 @@ public interface IStreamPushService {
/**
* 获取
- * @param page
- * @param count
- * @return
*/
- PageInfo getPushList(Integer page, Integer count);
+ PageInfo getPushList(Integer page, Integer count, String query, Boolean pushing, String mediaServerId);
+
List getPushList(String mediaSererId);
StreamPushItem transform(MediaItem item);
@@ -68,4 +66,8 @@ public interface IStreamPushService {
boolean saveToRandomGB();
void batchAdd(List streamPushExcelDtoList);
+
+ boolean batchStop(List streamPushItems);
+
+ void batchAddForUpload(String platformId, String catalogId, List streamPushItems);
}
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 ee7a80b1..58279850 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
@@ -20,6 +20,7 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
+import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
@@ -51,9 +52,9 @@ public class GbStreamServiceImpl implements IGbStreamService {
private EventPublisher eventPublisher;
@Override
- public PageInfo getAll(Integer page, Integer count, String platFormId) {
+ public PageInfo getAll(Integer page, Integer count, String platFormId, String catalogId, String query, Boolean pushing, String mediaServerId) {
PageHelper.startPage(page, count);
- List all = gbStreamMapper.selectAll(platFormId);
+ List all = gbStreamMapper.selectAll(platFormId, catalogId, query, pushing, mediaServerId);
return new PageInfo<>(all);
}
@@ -69,6 +70,7 @@ public class GbStreamServiceImpl implements IGbStreamService {
boolean result = false;
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
ParentPlatform parentPlatform = platformMapper.getParentPlatByServerGBId(platformId);
+ if (catalogId == null) catalogId = parentPlatform.getCatalogId();
try {
List deviceChannelList = new ArrayList<>();
for (GbStream gbStream : gbStreams) {
@@ -144,8 +146,16 @@ public class GbStreamServiceImpl implements IGbStreamService {
gbStreams.add(streamProxyItem);
}
}
+ sendCatalogMsgs(gbStreams, type);
+ }
+
+ @Override
+ public void sendCatalogMsgs(List gbStreams, String type) {
if (gbStreams.size() > 0) {
for (GbStream gs : gbStreams) {
+ if (StringUtils.isEmpty(gs.getGbId())){
+ continue;
+ }
List parentPlatforms = platformGbStreamMapper.selectByAppAndStream(gs.getApp(), gs.getStream());
if (parentPlatforms.size() > 0) {
for (ParentPlatform parentPlatform : parentPlatforms) {
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
index 9e5221bc..fcb52070 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
@@ -86,8 +86,8 @@ public class MediaServiceImpl implements IMediaService {
if (mediaInfo.getRtspSSLPort() != 0) {
streamInfoResult.setRtsps(String.format("rtsps://%s:%s/%s/%s", addr, mediaInfo.getRtspSSLPort(), app, stream));
}
- streamInfoResult.setFlv(String.format("http://%s:%s/%s/%s.flv", addr, mediaInfo.getHttpPort(), app, stream));
- streamInfoResult.setWs_flv(String.format("ws://%s:%s/%s/%s.flv", addr, mediaInfo.getHttpPort(), app, stream));
+ streamInfoResult.setFlv(String.format("http://%s:%s/%s/%s.live.flv", addr, mediaInfo.getHttpPort(), app, stream));
+ streamInfoResult.setWs_flv(String.format("ws://%s:%s/%s/%s.live.flv", addr, mediaInfo.getHttpPort(), app, stream));
streamInfoResult.setHls(String.format("http://%s:%s/%s/%s/hls.m3u8", addr, mediaInfo.getHttpPort(), app, stream));
streamInfoResult.setWs_hls(String.format("ws://%s:%s/%s/%s/hls.m3u8", addr, mediaInfo.getHttpPort(), app, stream));
streamInfoResult.setFmp4(String.format("http://%s:%s/%s/%s.live.mp4", addr, mediaInfo.getHttpPort(), app, stream));
@@ -95,8 +95,8 @@ public class MediaServiceImpl implements IMediaService {
streamInfoResult.setTs(String.format("http://%s:%s/%s/%s.live.ts", addr, mediaInfo.getHttpPort(), app, stream));
streamInfoResult.setWs_ts(String.format("ws://%s:%s/%s/%s.live.ts", addr, mediaInfo.getHttpPort(), app, stream));
if (mediaInfo.getHttpSSlPort() != 0) {
- streamInfoResult.setHttps_flv(String.format("https://%s:%s/%s/%s.flv", addr, mediaInfo.getHttpSSlPort(), app, stream));
- streamInfoResult.setWss_flv(String.format("wss://%s:%s/%s/%s.flv", addr, mediaInfo.getHttpSSlPort(), app, stream));
+ streamInfoResult.setHttps_flv(String.format("https://%s:%s/%s/%s.live.flv", addr, mediaInfo.getHttpSSlPort(), app, stream));
+ streamInfoResult.setWss_flv(String.format("wss://%s:%s/%s/%s.live.flv", addr, mediaInfo.getHttpSSlPort(), app, stream));
streamInfoResult.setHttps_hls(String.format("https://%s:%s/%s/%s/hls.m3u8", addr, mediaInfo.getHttpSSlPort(), app, stream));
streamInfoResult.setWss_hls(String.format("wss://%s:%s/%s/%s/hls.m3u8", addr, mediaInfo.getHttpSSlPort(), app, stream));
streamInfoResult.setHttps_fmp4(String.format("https://%s:%s/%s/%s.live.mp4", addr, mediaInfo.getHttpSSlPort(), app, stream));
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 948c61ad..ff31d8a7 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
@@ -8,6 +8,7 @@ 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.bean.PlatformCatalog;
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;
@@ -18,10 +19,7 @@ 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;
-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.storager.dao.StreamPushMapper;
+import com.genersoft.iot.vmp.storager.dao.*;
import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@@ -43,6 +41,9 @@ public class StreamPushServiceImpl implements IStreamPushService {
@Autowired
private ParentPlatformMapper parentPlatformMapper;
+ @Autowired
+ private PlatformCatalogMapper platformCatalogMapper;
+
@Autowired
private PlatformGbStreamMapper platformGbStreamMapper;
@@ -95,13 +96,12 @@ public class StreamPushServiceImpl implements IStreamPushService {
streamPushItem.setMediaServerId(item.getMediaServerId());
streamPushItem.setStream(item.getStream());
streamPushItem.setAliveSecond(item.getAliveSecond());
- streamPushItem.setCreateStamp(item.getCreateStamp());
streamPushItem.setOriginSock(item.getOriginSock());
streamPushItem.setTotalReaderCount(item.getTotalReaderCount());
streamPushItem.setOriginType(item.getOriginType());
streamPushItem.setOriginTypeStr(item.getOriginTypeStr());
streamPushItem.setOriginUrl(item.getOriginUrl());
- streamPushItem.setCreateStamp(item.getCreateStamp());
+ streamPushItem.setCreateStamp(item.getCreateStamp() * 1000);
streamPushItem.setAliveSecond(item.getAliveSecond());
streamPushItem.setStatus(true);
streamPushItem.setStreamType("push");
@@ -110,9 +110,9 @@ public class StreamPushServiceImpl implements IStreamPushService {
}
@Override
- public PageInfo getPushList(Integer page, Integer count) {
+ public PageInfo getPushList(Integer page, Integer count, String query, Boolean pushing, String mediaServerId) {
PageHelper.startPage(page, count);
- List all = streamPushMapper.selectAll();
+ List all = streamPushMapper.selectAllForList(query, pushing, mediaServerId);
return new PageInfo<>(all);
}
@@ -355,8 +355,47 @@ public class StreamPushServiceImpl implements IStreamPushService {
}
}
}
+ }
+ }
+
+ @Override
+ public void batchAddForUpload(String platformId, String catalogId, List streamPushItems) {
+ streamPushMapper.addAll(streamPushItems);
+ gbStreamMapper.batchAdd(streamPushItems);
+ if (platformId != null) {
+ ParentPlatform platform = parentPlatformMapper.getParentPlatByServerGBId(platformId);
+ if (platform != null) {
+ if (catalogId == null) {
+ catalogId = platform.getCatalogId();
+ }else {
+ PlatformCatalog catalog = platformCatalogMapper.select(catalogId);
+ if (catalog == null) {
+ return;
+ }
+ }
+ platformGbStreamMapper.batchAdd(platformId, catalogId, streamPushItems);
+ eventPublisher.catalogEventPublishForStream(platformId, streamPushItems.toArray(new GbStream[0]), CatalogEvent.ADD);
+ }
+ }
+ }
+
+ @Override
+ public boolean batchStop(List gbStreams) {
+ if (gbStreams == null || gbStreams.size() == 0) {
+ return false;
+ }
+ gbStreamService.sendCatalogMsgs(gbStreams, CatalogEvent.DEL);
+ int delStream = streamPushMapper.delAllForGbStream(gbStreams);
+ gbStreamMapper.batchDelForGbStream(gbStreams);
+ platformGbStreamMapper.delByGbStreams(gbStreams);
+ if (delStream > 0) {
+ for (GbStream gbStream : gbStreams) {
+ MediaServerItem mediaServerItem = mediaServerService.getOne(gbStream.getMediaServerId());
+ zlmresTfulUtils.closeStreams(mediaServerItem, gbStream.getApp(), gbStream.getStream());
+ }
}
+ return true;
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
index 586b5b49..2f947097 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
@@ -7,10 +7,7 @@ import com.genersoft.iot.vmp.service.IStreamPushService;
import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
import org.springframework.util.StringUtils;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
public class StreamPushUploadFileHandler extends AnalysisEventListener {
@@ -18,10 +15,13 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener streamPushItems = new ArrayList<>();
+ private Map streamPushItemsForPlatform = new HashMap<>();
private Set streamPushStreamSet = new HashSet<>();
private Set streamPushGBSet = new HashSet<>();
private List errorStreamList = new ArrayList<>();
private List errorGBList = new ArrayList<>();
+ // 读取数量计数器
+ private int loadedSize = 0;
public StreamPushUploadFileHandler(IStreamPushService pushService, String defaultMediaServerId, ErrorDataHandler errorDataHandler) {
this.pushService = pushService;
@@ -33,6 +33,16 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener streams, List gbId);
}
+ private class UploadData{
+ public String platformId;
+ public Map> catalogData = new HashMap<>();
+ public List streamPushItems = new ArrayList<>();
+
+ public UploadData(String platformId) {
+ this.platformId = platformId;
+ }
+ }
+
@Override
public void invoke(StreamPushExcelDto streamPushExcelDto, AnalysisContext analysisContext) {
if (StringUtils.isEmpty(streamPushExcelDto.getApp())
@@ -43,10 +53,10 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener streamPushItems = uploadData.catalogData.get(streamPushExcelDto.getCatalogId());
+ if (streamPushItems == null) {
+ streamPushItems = new ArrayList<>();
+ uploadData.catalogData.put(streamPushExcelDto.getCatalogId(), streamPushItems);
+ }
+ streamPushItems.add(streamPushItem);
+ }else {
+ uploadData.streamPushItems.add(streamPushItem);
+ }
+
+ }
+
streamPushGBSet.add(streamPushExcelDto.getGbId());
streamPushStreamSet.add(streamPushExcelDto.getApp()+streamPushExcelDto.getStream());
- if (streamPushItems.size() > 300) {
- pushService.batchAdd(streamPushItems);
- // 存储完成清理 list
+ loadedSize ++;
+ if (loadedSize > 1000) {
+ saveData();
streamPushItems.clear();
+ streamPushItemsForPlatform.clear();
+ loadedSize = 0;
}
+
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
- if (streamPushItems.size() > 0) {
- pushService.batchAdd(streamPushItems);
- }
+ saveData();
streamPushGBSet.clear();
streamPushStreamSet.clear();
errorDataHandler.handle(errorStreamList, errorGBList);
}
+
+ private void saveData(){
+ if (streamPushItems.size() > 0) {
+ pushService.batchAddForUpload(null, null, streamPushItems);
+ }
+ // 处理已分配到平台的流
+ if (streamPushItemsForPlatform.size() > 0){
+ for (String platformId : streamPushItemsForPlatform.keySet()) {
+ UploadData uploadData = streamPushItemsForPlatform.get(platformId);
+ if (uploadData.streamPushItems.size() > 0) {
+ pushService.batchAddForUpload(platformId, null, uploadData.streamPushItems);
+ }
+ if (uploadData.catalogData.size() > 0) {
+ for (String catalogId : uploadData.catalogData.keySet()) {
+ if (uploadData.catalogData.get(catalogId).size() > 0) {
+ pushService.batchAddForUpload(platformId, catalogId, uploadData.catalogData.get(catalogId));
+ }
+ }
+ }
+ }
+ }
+ }
}
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 bf2104c7..edd6cbc0 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -214,4 +214,10 @@ public interface IRedisCatchStorage {
List getAllSubscribe();
List getAllSubscribePlatform();
+
+ void addCpuInfo(double cpuInfo);
+
+ void addMemInfo(double memInfo);
+
+ void addNetInfo(Map networkInterfaces);
}
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 5e2745a6..abcb1f4e 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -5,6 +5,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
+import com.genersoft.iot.vmp.vmanager.bean.DeviceChannelTree;
import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
import com.github.pagehelper.PageInfo;
@@ -93,6 +94,13 @@ public interface IVideoManagerStorager {
public List queryChannelsByDeviceIdWithStartAndLimit(String deviceId, String query, Boolean hasSubChannel, Boolean online, int start, int limit);
+ /**
+ * 获取某个设备的通道树
+ * @param deviceId 设备ID
+ * @return
+ */
+ List tree(String deviceId);
+
/**
* 获取某个设备的通道列表
*
@@ -231,7 +239,7 @@ public interface IVideoManagerStorager {
/**
* 查询通道信息,不区分设备(已关联平台或全部)
*/
- PageInfo queryAllChannelList(int page, int count, String query, Boolean online, Boolean channelType, String platformId, Boolean inPlatform);
+ PageInfo queryAllChannelList(int page, int count, String query, Boolean online, Boolean channelType, String platformId, String catalogId);
/**
* 查询设备的通道信息
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 7f52f797..32dd7df5 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
@@ -1,6 +1,7 @@
package com.genersoft.iot.vmp.storager.dao;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
+import com.genersoft.iot.vmp.vmanager.bean.DeviceChannelTree;
import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
@@ -92,28 +93,31 @@ public interface DeviceChannelMapper {
void startPlay(String deviceId, String channelId, String streamId);
+
@Select(value = {" "})
-
- List queryChannelListInAll(String query, Boolean online, Boolean hasSubChannel, String platformId, Boolean inPlatform);
+ List queryChannelListInAll(String query, Boolean online, Boolean hasSubChannel, String platformId, String catalogId);
@Select("SELECT * FROM device_channel WHERE channelId=#{channelId}")
List queryChannelByChannelId( String channelId);
@@ -201,4 +205,20 @@ public interface DeviceChannelMapper {
@Select("SELECT * FROM device_channel WHERE deviceId=#{deviceId} AND status=1")
List queryOnlineChannelsByDeviceId(String deviceId);
+
+ @Select(" SELECT\n" +
+ " channelId,\n" +
+ " channelId as id,\n" +
+ " deviceId,\n" +
+ " parentId,\n" +
+ " status,\n" +
+ " name as title,\n" +
+ " channelId as \"value\",\n" +
+ " channelId as \"key\",\n" +
+ " channelId,\n" +
+ " longitude,\n" +
+ " latitude\n" +
+ " from device_channel\n" +
+ " where deviceId = #{deviceId}")
+ List tree(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 fade54bb..5d59e2ec 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
@@ -37,10 +37,20 @@ public interface GbStreamMapper {
@Delete("DELETE FROM gb_stream WHERE app=#{app} AND stream=#{stream}")
int del(String app, String stream);
- @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 AND (pgs.platformId = #{platformId} OR pgs.platformId is null)" +
- "order by gs.id asc ")
- List selectAll(String platformId);
+ @Select("")
+ List selectAll(String platformId, String catalogId, String query, Boolean pushing, String mediaServerId);
@Select("SELECT * FROM gb_stream WHERE app=#{app} AND stream=#{stream}")
StreamProxyItem selectOne(String app, String stream);
@@ -84,6 +94,14 @@ public interface GbStreamMapper {
"")
void batchDel(List streamProxyItemList);
+ @Delete("")
+ void batchDelForGbStream(List gbStreams);
+
@Insert("")
+ int batchAdd(String platformId, String catalogId, List streamPushItems);
+
@Delete("DELETE FROM platform_gb_stream WHERE app=#{app} AND stream=#{stream}")
int delByAppAndStream(String app, String stream);
@@ -32,8 +44,7 @@ public interface PlatformGbStreamMapper {
"LEFT JOIN parent_platform pp ON pp.serverGBId = pgs.platformId " +
"WHERE " +
"pgs.app =#{app} " +
- "AND pgs.stream =#{stream} " +
- "GROUP BY pp.serverGBId")
+ "AND pgs.stream =#{stream} ")
List selectByAppAndStream(String app, String stream);
@Select("SELECT pgs.*, gs.gbId FROM platform_gb_stream pgs " +
@@ -75,4 +86,15 @@ public interface PlatformGbStreamMapper {
@Delete("DELETE FROM platform_gb_stream WHERE app=#{app} AND stream=#{stream} AND platformId=#{platformId}")
int delByAppAndStreamAndPlatform(String app, String stream, String platformId);
+
+ @Delete("")
+ void delByGbStreams(List gbStreams);
+
+
+
}
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 08b7c827..3379c9fd 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
@@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.storager.dao;
+import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
@@ -48,6 +49,33 @@ public interface StreamPushMapper {
"")
int delAll(List streamPushItems);
+ @Delete("")
+ int delAllForGbStream(List gbStreams);
+
+
+ @Select(value = {" "})
+ List selectAllForList(String query, Boolean pushing, String mediaServerId);
+
@Select("SELECT st.*, pgs.gbId, pgs.status, pgs.name, pgs.longitude, pgs.latitude FROM stream_push st LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream order by st.createStamp desc")
List selectAll();
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 56789d92..92fdf6c5 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
@@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.storager.impl;
import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.common.StreamInfo;
+import com.genersoft.iot.vmp.common.SystemInfoDto;
import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.UserSetup;
import com.genersoft.iot.vmp.gb28181.bean.*;
@@ -534,4 +535,49 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
}
return result;
}
+
+ @Override
+ public void addCpuInfo(double cpuInfo) {
+ String key = VideoManagerConstants.SYSTEM_INFO_CPU_PREFIX + userSetup.getServerId();
+ SystemInfoDto systemInfoDto = new SystemInfoDto<>();
+ systemInfoDto.setTime(format.format(System.currentTimeMillis()));
+ systemInfoDto.setData(cpuInfo);
+ redis.lSet(key, systemInfoDto);
+ // 每秒一个,最多只存30个
+ if (redis.lGetListSize(key) > 30) {
+ for (int i = 0; i < redis.lGetListSize(key) - 30; i++) {
+ redis.lLeftPop(key);
+ }
+ }
+ }
+
+ @Override
+ public void addMemInfo(double memInfo) {
+ String key = VideoManagerConstants.SYSTEM_INFO_MEM_PREFIX + userSetup.getServerId();
+ SystemInfoDto systemInfoDto = new SystemInfoDto<>();
+ systemInfoDto.setTime(format.format(System.currentTimeMillis()));
+ systemInfoDto.setData(memInfo);
+ redis.lSet(key, systemInfoDto);
+ // 每秒一个,最多只存30个
+ if (redis.lGetListSize(key) > 30) {
+ for (int i = 0; i < redis.lGetListSize(key) - 30; i++) {
+ redis.lLeftPop(key);
+ }
+ }
+ }
+
+ @Override
+ public void addNetInfo(Map networkInterfaces) {
+ String key = VideoManagerConstants.SYSTEM_INFO_NET_PREFIX + userSetup.getServerId();
+ SystemInfoDto