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); + } }