From abb60593cb77e9e9b6e67e8276fc416c2aede43f Mon Sep 17 00:00:00 2001
From: lin <18010473990@163.com>
Date: 星期六, 08 一月 2022 17:35:00 +0800
Subject: [PATCH] 优化级联平台GPS订阅
---
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java | 3 +
src/main/java/com/genersoft/iot/vmp/service/impl/RedisGPSMsgListener.java | 1
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 18 ++++++++
src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java | 10 +++++
src/main/java/com/genersoft/iot/vmp/service/StreamGPSSubscribeTask.java | 39 +++++++++++++++++++
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 1
src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java | 10 +++++
src/main/java/com/genersoft/iot/vmp/gb28181/task/GPSSubscribeTask.java | 17 +++++++-
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java | 6 +++
9 files changed, 100 insertions(+), 5 deletions(-)
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 ce990a0..fc3d027 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
@@ -45,10 +45,21 @@
for (GbStream gbStream : gbStreams) {
String gbId = gbStream.getGbId();
GPSMsgInfo gpsMsgInfo = redisCatchStorage.getGpsMsgInfo(gbId);
- if (gpsMsgInfo != null && gbStream.isStatus()) {
- // 鍙戦�丟PS娑堟伅
- sipCommanderForPlatform.sendMobilePosition(parentPlatform, gpsMsgInfo, subscribe);
+ if (gbStream.isStatus()) {
+ if (gpsMsgInfo != null) {
+ // 鍙戦�丟PS娑堟伅
+ sipCommanderForPlatform.sendMobilePosition(parentPlatform, gpsMsgInfo, subscribe);
+ }else {
+ // 娌℃湁鍦╮edis鎵惧埌鏂扮殑娑堟伅灏变娇鐢ㄦ暟鎹簱鐨勬秷鎭�
+ gpsMsgInfo = new GPSMsgInfo();
+ gpsMsgInfo.setId(gbId);
+ gpsMsgInfo.setLat(gbStream.getLongitude());
+ gpsMsgInfo.setLng(gbStream.getLongitude());
+ // 鍙戦�丟PS娑堟伅
+ sipCommanderForPlatform.sendMobilePosition(parentPlatform, gpsMsgInfo, subscribe);
+ }
}
+
}
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/StreamGPSSubscribeTask.java b/src/main/java/com/genersoft/iot/vmp/service/StreamGPSSubscribeTask.java
new file mode 100644
index 0000000..fd5bb06
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/service/StreamGPSSubscribeTask.java
@@ -0,0 +1,39 @@
+package com.genersoft.iot.vmp.service;
+
+import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * 瀹氭椂鏌ユ壘redis涓殑GPS鎺ㄩ�佹秷鎭紝骞朵繚瀛樺埌瀵瑰簲鐨勬祦涓�
+ */
+@Component
+public class StreamGPSSubscribeTask {
+
+ @Autowired
+ private IRedisCatchStorage redisCatchStorage;
+
+ @Autowired
+ private IVideoManagerStorager storager;
+
+
+
+ @Scheduled(fixedRate = 30 * 1000) //姣�30绉掓墽琛屼竴娆�
+ public void execute(){
+ List<GPSMsgInfo> gpsMsgInfo = redisCatchStorage.getAllGpsMsgInfo();
+ if (gpsMsgInfo.size() > 0) {
+ storager.updateStreamGPS(gpsMsgInfo);
+ for (GPSMsgInfo msgInfo : gpsMsgInfo) {
+ msgInfo.setStored(true);
+ redisCatchStorage.updateGpsMsgInfo(msgInfo);
+ }
+ }
+
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java b/src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java
index 855cc5e..b814c18 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/bean/GPSMsgInfo.java
@@ -37,6 +37,8 @@
*/
private String altitude;
+ private boolean stored;
+
public String getId() {
return id;
@@ -93,4 +95,12 @@
public void setAltitude(String altitude) {
this.altitude = altitude;
}
+
+ public boolean isStored() {
+ return stored;
+ }
+
+ public void setStored(boolean stored) {
+ this.stored = stored;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/RedisGPSMsgListener.java b/src/main/java/com/genersoft/iot/vmp/service/impl/RedisGPSMsgListener.java
index 4e390b7..e3bfcde 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/RedisGPSMsgListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/RedisGPSMsgListener.java
@@ -17,7 +17,6 @@
@Override
public void onMessage(Message message, byte[] bytes) {
GPSMsgInfo gpsMsgInfo = JSON.parseObject(message.getBody(), GPSMsgInfo.class);
- System.out.println(JSON.toJSON(gpsMsgInfo));
redisCatchStorage.updateGpsMsgInfo(gpsMsgInfo);
}
}
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 ea85cf1..f7b16a8 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -195,6 +195,7 @@
void updateGpsMsgInfo(GPSMsgInfo gpsMsgInfo);
GPSMsgInfo getGpsMsgInfo(String gbId);
+ List<GPSMsgInfo> getAllGpsMsgInfo();
Long getSN(String method);
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 96a487c..229ab8c 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -4,6 +4,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.gb28181.platform.bean.ChannelReduce;
import com.github.pagehelper.PageInfo;
@@ -456,4 +457,6 @@
List<PlatformCatalog> queryCatalogInPlatform(String serverGBId);
int delRelation(PlatformCatalog platformCatalog);
+
+ int updateStreamGPS(List<GPSMsgInfo> gpsMsgInfo);
}
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 3a26b4e..a51f3dc 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
@@ -3,6 +3,7 @@
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
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 org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
@@ -94,4 +95,13 @@
void batchAdd(List<StreamPushItem> subList);
+ @Update({"<script>" +
+ "<foreach collection='gpsMsgInfos' item='item' separator=';'>" +
+ " UPDATE" +
+ " gb_stream" +
+ " SET longitude=${item.lng}, latitude=${item.lat} " +
+ "WHERE gbId=#{item.id}"+
+ "</foreach>" +
+ "</script>"})
+ int updateStreamGPS(List<GPSMsgInfo> gpsMsgInfos);
}
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 adda231..2dcc217 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
@@ -453,7 +453,7 @@
@Override
public void updateGpsMsgInfo(GPSMsgInfo gpsMsgInfo) {
String key = VideoManagerConstants.WVP_STREAM_GPS_MSG_PREFIX + userSetup.getServerId() + "_" + gpsMsgInfo.getId();
- redis.set(key, gpsMsgInfo);
+ redis.set(key, gpsMsgInfo, 60); // 榛樿GPS娑堟伅淇濆瓨1鍒嗛挓
}
@Override
@@ -476,4 +476,20 @@
public void delSubscribe(String key) {
redis.del(key);
}
+
+ @Override
+ public List<GPSMsgInfo> getAllGpsMsgInfo() {
+ String scanKey = VideoManagerConstants.WVP_STREAM_GPS_MSG_PREFIX + userSetup.getServerId() + "_*";
+ List<GPSMsgInfo> result = new ArrayList<>();
+ List<Object> keys = redis.scan(scanKey);
+ for (int i = 0; i < keys.size(); i++) {
+ String key = (String) keys.get(i);
+ GPSMsgInfo gpsMsgInfo = (GPSMsgInfo) redis.get(key);
+ if (!gpsMsgInfo.isStored()) { // 鍙彇娌℃湁瀛樿繃寰�
+ result.add((GPSMsgInfo)redis.get(key));
+ }
+ }
+
+ 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 d381574..dba268d 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
@@ -6,6 +6,7 @@
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
import com.genersoft.iot.vmp.service.IGbStreamService;
+import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import com.genersoft.iot.vmp.storager.dao.*;
@@ -898,4 +899,9 @@
}
return 0;
}
+
+ @Override
+ public int updateStreamGPS(List<GPSMsgInfo> gpsMsgInfos) {
+ return gbStreamMapper.updateStreamGPS(gpsMsgInfos);
+ }
}
--
Gitblit v1.8.0