From 232fa760e2b0afe1ae82bf8c8352307176a80bb0 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: Fri, 3 Jan 2025 15:34:53 +0800 Subject: [PATCH] =?UTF-8?q?[=E9=9B=86=E7=BE=A4]=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=9B=BD=E6=A0=87=E7=BA=A7=E8=81=94=E7=9B=AE=E5=BD=95=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot/vmp/gb28181/event/EventPublisher.java | 23 ++++++++++-- .../service/IPlatformChannelService.java | 2 ++ .../impl/PlatformChannelServiceImpl.java | 5 +++ .../service/redisMsg/IRedisRpcService.java | 4 +++ .../control/RedisRpcPlatformController.java | 36 +++++++++++++++++++ .../redisMsg/service/RedisRpcServiceImpl.java | 12 +++++++ 6 files changed, 80 insertions(+), 2 deletions(-) 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 5776d73f..62ad621e 100755 --- 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,14 +1,18 @@ package com.genersoft.iot.vmp.gb28181.event; -import com.genersoft.iot.vmp.gb28181.bean.*; +import com.genersoft.iot.vmp.conf.UserSetting; +import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; +import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm; +import com.genersoft.iot.vmp.gb28181.bean.MobilePosition; +import com.genersoft.iot.vmp.gb28181.bean.Platform; import com.genersoft.iot.vmp.gb28181.event.alarm.AlarmEvent; import com.genersoft.iot.vmp.gb28181.event.device.RequestTimeoutEvent; -import com.genersoft.iot.vmp.gb28181.event.record.RecordInfoEvent; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; import com.genersoft.iot.vmp.gb28181.event.subscribe.mobilePosition.MobilePositionEvent; import com.genersoft.iot.vmp.media.bean.MediaServer; import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerOfflineEvent; import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerOnlineEvent; +import com.genersoft.iot.vmp.service.redisMsg.IRedisRpcService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Component; @@ -29,6 +33,12 @@ public class EventPublisher { @Autowired private ApplicationEventPublisher applicationEventPublisher; + + @Autowired + private UserSetting userSetting; + + @Autowired + private IRedisRpcService redisRpcService; /** * 设备报警事件 @@ -66,6 +76,15 @@ public class EventPublisher { } public void catalogEventPublish(Platform platform, List deviceChannels, String type) { + if (!userSetting.getServerId().equals(platform.getServerId())) { + List ids = new ArrayList<>(); + for (int i = 0; i < deviceChannels.size(); i++) { + ids.add(deviceChannels.get(i).getGbId()); + } + redisRpcService.catalogEventPublish(platform.getServerId(), platform.getId(), ids, type); + return; + } + CatalogEvent outEvent = new CatalogEvent(this); List channels = new ArrayList<>(); if (deviceChannels.size() > 1) { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IPlatformChannelService.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IPlatformChannelService.java index e03e0907..0d97aa29 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IPlatformChannelService.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IPlatformChannelService.java @@ -43,6 +43,8 @@ public interface IPlatformChannelService { CommonGBChannel queryChannelByPlatformIdAndChannelId(Integer platformId, Integer channelId); + List queryChannelByPlatformIdAndChannelIds(Integer platformId, List channelIds); + void checkRegionAdd(List channelList); void checkRegionRemove(List channelList, List regionList); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformChannelServiceImpl.java index 8a81cfa0..ff11f2ef 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformChannelServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformChannelServiceImpl.java @@ -596,4 +596,9 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService { public CommonGBChannel queryChannelByPlatformIdAndChannelId(Integer platformId, Integer channelId) { return platformChannelMapper.queryShareChannel(platformId, channelId); } + + @Override + public List queryChannelByPlatformIdAndChannelIds(Integer platformId, List channelIds) { + return platformChannelMapper.queryShare(platformId, channelIds); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/IRedisRpcService.java b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/IRedisRpcService.java index 88cd3ed2..8c34a7e5 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/IRedisRpcService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/IRedisRpcService.java @@ -6,6 +6,8 @@ import com.genersoft.iot.vmp.gb28181.bean.Platform; import com.genersoft.iot.vmp.gb28181.bean.SendRtpInfo; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; +import java.util.List; + public interface IRedisRpcService { SendRtpInfo getSendRtpItem(String callId); @@ -30,4 +32,6 @@ public interface IRedisRpcService { void subscribeMobilePosition(int id, int cycle, int interval); boolean updatePlatform(String serverId, Platform platform); + + void catalogEventPublish(String serverId, Integer platformId, List channelIds, String type); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/control/RedisRpcPlatformController.java b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/control/RedisRpcPlatformController.java index 6cf669ce..50865f15 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/control/RedisRpcPlatformController.java +++ b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/control/RedisRpcPlatformController.java @@ -6,7 +6,10 @@ import com.genersoft.iot.vmp.conf.redis.RedisRpcConfig; import com.genersoft.iot.vmp.conf.redis.bean.RedisRpcMessage; import com.genersoft.iot.vmp.conf.redis.bean.RedisRpcRequest; import com.genersoft.iot.vmp.conf.redis.bean.RedisRpcResponse; +import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; import com.genersoft.iot.vmp.gb28181.bean.Platform; +import com.genersoft.iot.vmp.gb28181.event.EventPublisher; +import com.genersoft.iot.vmp.gb28181.service.IPlatformChannelService; import com.genersoft.iot.vmp.gb28181.service.IPlatformService; import com.genersoft.iot.vmp.service.redisMsg.dto.RedisRpcController; import com.genersoft.iot.vmp.service.redisMsg.dto.RedisRpcMapping; @@ -17,6 +20,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import java.util.Arrays; +import java.util.List; + @Component @Slf4j @RedisRpcController("platform") @@ -31,6 +37,12 @@ public class RedisRpcPlatformController extends RpcController { @Autowired private IPlatformService platformService; + @Autowired + private IPlatformChannelService platformChannelService; + + @Autowired + private EventPublisher eventPublisher; + private void sendResponse(RedisRpcResponse response){ log.info("[redis-rpc] >> {}", response); @@ -53,4 +65,28 @@ public class RedisRpcPlatformController extends RpcController { return response; } + /** + * 目录更新推送 + */ + @RedisRpcMapping("catalogEventPublish") + public RedisRpcResponse catalogEventPublish(RedisRpcRequest request) { + JSONObject jsonObject = JSONObject.parseObject(request.getParam().toString()); + int platformId = jsonObject.getIntValue("platformId"); + Integer[] channelIds = jsonObject.getJSONArray("channelIds").toArray(Integer.class); + String type = jsonObject.getString("type"); + RedisRpcResponse response = request.getResponse(); + + Platform platform = platformService.queryOne(platformId); + if (platform == null ) { + log.warn("[]"); + response.setStatusCode(ErrorCode.ERROR400.getCode()); + response.setBody(ErrorCode.ERROR400.getMsg()); + return response; + } + List commonGBChannels = platformChannelService.queryChannelByPlatformIdAndChannelIds(platformId, Arrays.asList(channelIds)); + eventPublisher.catalogEventPublish(platform, commonGBChannels, type); + response.setStatusCode(ErrorCode.SUCCESS.getCode()); + return response; + } + } diff --git a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/service/RedisRpcServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/service/RedisRpcServiceImpl.java index 30a51bad..d420bdc8 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/service/RedisRpcServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/service/RedisRpcServiceImpl.java @@ -24,6 +24,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import java.util.List; + @Slf4j @Service public class RedisRpcServiceImpl implements IRedisRpcService { @@ -229,4 +231,14 @@ public class RedisRpcServiceImpl implements IRedisRpcService { RedisRpcResponse response = redisRpcConfig.request(request, 40); return Boolean.parseBoolean(response.getBody().toString()); } + + @Override + public void catalogEventPublish(String serverId, Integer platformId, List channelIds, String type) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("platformId", platformId); + jsonObject.put("channelIds", channelIds); + jsonObject.put("type", type); + RedisRpcRequest request = buildRequest("platform/catalogEventPublish", jsonObject); + redisRpcConfig.request(request, 100); + } }