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