diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/AlarmController.java b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/AlarmController.java index a08c7c710..de75437a6 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/AlarmController.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/AlarmController.java @@ -99,7 +99,7 @@ public class AlarmController { @Operation(summary = "测试向上级/设备发送模拟报警通知", security = @SecurityRequirement(name = JwtUtils.HEADER)) @Parameter(name = "deviceId", description = "设备国标编号") public void delete(@RequestParam String deviceId) { - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); Platform platform = storage.queryParentPlatByServerGBId(deviceId); DeviceAlarm deviceAlarm = new DeviceAlarm(); deviceAlarm.setChannelId(deviceId); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceConfig.java b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceConfig.java index ccdeb0044..d485be4a0 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceConfig.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceConfig.java @@ -77,7 +77,7 @@ public class DeviceConfig { if (log.isDebugEnabled()) { log.debug("报警复位API调用"); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONFIG + deviceId + channelId; try { @@ -130,7 +130,7 @@ public class DeviceConfig { } String key = DeferredResultHolder.CALLBACK_CMD_CONFIGDOWNLOAD + (ObjectUtils.isEmpty(channelId) ? deviceId : channelId); String uuid = UUID.randomUUID().toString(); - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); try { cmder.deviceConfigQuery(device, channelId, configType, event -> { RequestMessage msg = new RequestMessage(); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceControl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceControl.java index ed503b66c..06d5fa85f 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceControl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceControl.java @@ -59,7 +59,7 @@ public class DeviceControl { if (log.isDebugEnabled()) { log.debug("设备远程启动API调用"); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); try { cmder.teleBootCmd(device); } catch (InvalidArgumentException | SipException | ParseException e) { @@ -85,7 +85,7 @@ public class DeviceControl { if (log.isDebugEnabled()) { log.debug("开始/停止录像API调用"); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONTROL + deviceId + channelId; DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(3 * 1000L); @@ -132,7 +132,7 @@ public class DeviceControl { if (log.isDebugEnabled()) { log.debug("布防/撤防API调用"); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONTROL + deviceId + deviceId; String uuid =UUID.randomUUID().toString(); try { @@ -181,7 +181,7 @@ public class DeviceControl { if (log.isDebugEnabled()) { log.debug("报警复位API调用"); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONTROL + deviceId + channelId; try { @@ -225,7 +225,7 @@ public class DeviceControl { if (log.isDebugEnabled()) { log.debug("强制关键帧API调用"); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); try { cmder.iFrameCmd(device, channelId); } catch (InvalidArgumentException | SipException | ParseException e) { @@ -263,7 +263,7 @@ public class DeviceControl { } String key = DeferredResultHolder.CALLBACK_CMD_DEVICECONTROL + (ObjectUtils.isEmpty(channelId) ? deviceId : channelId); String uuid = UUID.randomUUID().toString(); - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); try { cmder.homePositionCmd(device, channelId, enabled, resetTime, presetIndex, event -> { RequestMessage msg = new RequestMessage(); @@ -326,7 +326,7 @@ public class DeviceControl { if (log.isDebugEnabled()) { log.debug(String.format("设备拉框放大 API调用,deviceId:%s ,channelId:%s ,length:%d ,width:%d ,midpointx:%d ,midpointy:%d ,lengthx:%d ,lengthy:%d",deviceId, channelId, length, width, midpointx, midpointy,lengthx, lengthy)); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); StringBuffer cmdXml = new StringBuffer(200); cmdXml.append("<DragZoomIn>\r\n"); cmdXml.append("<Length>" + length+ "</Length>\r\n"); @@ -378,7 +378,7 @@ public class DeviceControl { if (log.isDebugEnabled()) { log.debug(String.format("设备拉框缩小 API调用,deviceId:%s ,channelId:%s ,length:%d ,width:%d ,midpointx:%d ,midpointy:%d ,lengthx:%d ,lengthy:%d",deviceId, channelId, length, width, midpointx, midpointy,lengthx, lengthy)); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); StringBuffer cmdXml = new StringBuffer(200); cmdXml.append("<DragZoomOut>\r\n"); cmdXml.append("<Length>" + length+ "</Length>\r\n"); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceQuery.java index 712f6182f..9c92ca5de 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceQuery.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceQuery.java @@ -91,7 +91,7 @@ public class DeviceQuery { @GetMapping("/devices/{deviceId}") public Device devices(@PathVariable String deviceId){ - return deviceService.getDevice(deviceId); + return deviceService.getDeviceByDeviceId(deviceId); } /** @@ -148,7 +148,7 @@ public class DeviceQuery { if (log.isDebugEnabled()) { log.debug("设备通道信息同步API调用,deviceId:" + deviceId); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); boolean status = deviceService.isSyncRunning(deviceId); // 已存在则返回进度 if (status) { @@ -273,7 +273,7 @@ public class DeviceQuery { "UDP(udp传输),TCP-ACTIVE(tcp主动模式,暂不支持),TCP-PASSIVE(tcp被动模式)", required = true) @PostMapping("/transport/{deviceId}/{streamMode}") public void updateTransport(@PathVariable String deviceId, @PathVariable String streamMode){ - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); device.setStreamMode(streamMode); deviceService.updateCustomDevice(device); } @@ -330,7 +330,7 @@ public class DeviceQuery { if (log.isDebugEnabled()) { log.debug("设备状态查询API调用"); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + deviceId; DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(2*1000L); @@ -393,7 +393,7 @@ public class DeviceQuery { if (log.isDebugEnabled()) { log.debug("设备报警查询API调用"); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); String key = DeferredResultHolder.CALLBACK_CMD_ALARM + deviceId; String uuid = UUID.randomUUID().toString(); try { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/GBRecordController.java b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/GBRecordController.java index b289b7424..254404871 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/GBRecordController.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/GBRecordController.java @@ -83,7 +83,7 @@ public class GBRecordController { throw new ControllerException(ErrorCode.ERROR100.getCode(), "endTime格式为" + DateUtil.PATTERN); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); // 指定超时时间 1分钟30秒 String uuid = UUID.randomUUID().toString(); int sn = (int)((Math.random()*9+1)*100000); @@ -182,7 +182,7 @@ public class GBRecordController { throw new ControllerException(ErrorCode.ERROR400); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); if (device == null) { throw new ControllerException(ErrorCode.ERROR400.getCode(), "设备:" + deviceId + "未找到"); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/MobilePositionController.java b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/MobilePositionController.java index 79c38d242..5c10b1192 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/MobilePositionController.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/MobilePositionController.java @@ -99,7 +99,7 @@ public class MobilePositionController { @Parameter(name = "deviceId", description = "设备国标编号", required = true) @GetMapping("/realtime/{deviceId}") public DeferredResult<MobilePosition> realTimePosition(@PathVariable String deviceId) { - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_MOBILE_POSITION + deviceId; try { @@ -147,7 +147,7 @@ public class MobilePositionController { if (StringUtil.isEmpty(interval)) { interval = "5"; } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); device.setSubscribeCycleForMobilePosition(Integer.parseInt(expires)); device.setMobilePositionSubmissionInterval(Integer.parseInt(interval)); deviceService.updateCustomDevice(device); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/PlayController.java b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/PlayController.java index 96e68cf45..e4a12334f 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/PlayController.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/PlayController.java @@ -94,7 +94,7 @@ public class PlayController { Assert.notNull(deviceId, "设备国标编号不可为NULL"); Assert.notNull(channelId, "通道国标编号不可为NULL"); // 获取可用的zlm - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); MediaServer newMediaServerItem = playService.getNewMediaServerItem(device); RequestMessage requestMessage = new RequestMessage(); @@ -169,7 +169,7 @@ public class PlayController { throw new ControllerException(ErrorCode.ERROR400); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); if (device == null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "设备[" + deviceId + "]不存在"); } @@ -212,7 +212,7 @@ public class PlayController { if (log.isDebugEnabled()) { log.debug("语音广播API调用"); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); if (device == null) { throw new ControllerException(ErrorCode.ERROR400.getCode(), "未找到设备: " + deviceId); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/PlaybackController.java b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/PlaybackController.java index 0d293b5fb..756d96327 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/PlaybackController.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/PlaybackController.java @@ -140,7 +140,7 @@ public class PlaybackController { if (ObjectUtils.isEmpty(deviceId) || ObjectUtils.isEmpty(channelId) || ObjectUtils.isEmpty(stream)) { throw new ControllerException(ErrorCode.ERROR400); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); if (device == null) { throw new ControllerException(ErrorCode.ERROR400.getCode(), "设备:" + deviceId + " 未找到"); } @@ -195,7 +195,7 @@ public class PlaybackController { log.warn("streamId不存在!"); throw new ControllerException(ErrorCode.ERROR400.getCode(), "streamId不存在"); } - Device device = deviceService.getDevice(inviteInfo.getDeviceId()); + Device device = deviceService.getDeviceByDeviceId(inviteInfo.getDeviceId()); try { cmder.playSeekCmd(device, inviteInfo.getStreamInfo(), seekTime); } catch (InvalidArgumentException | ParseException | SipException e) { @@ -219,7 +219,7 @@ public class PlaybackController { log.warn("不支持的speed: " + speed); throw new ControllerException(ErrorCode.ERROR100.getCode(), "不支持的speed(0.25 0.5 1、2、4)"); } - Device device = deviceService.getDevice(inviteInfo.getDeviceId()); + Device device = deviceService.getDeviceByDeviceId(inviteInfo.getDeviceId()); try { cmder.playSpeedCmd(device, inviteInfo.getStreamInfo(), speed); } catch (InvalidArgumentException | ParseException | SipException e) { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/PtzController.java b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/PtzController.java index 1d5043008..e83eae33e 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/PtzController.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/PtzController.java @@ -66,7 +66,7 @@ public class PtzController { if (log.isDebugEnabled()) { log.debug(String.format("设备云台控制 API调用,deviceId:%s ,channelId:%s ,command:%s ,horizonSpeed:%d ,verticalSpeed:%d ,zoomSpeed:%d",deviceId, channelId, command, horizonSpeed, verticalSpeed, zoomSpeed)); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); int cmdCode = 0; switch (command){ case "left": @@ -129,7 +129,7 @@ public class PtzController { if (log.isDebugEnabled()) { log.debug(String.format("设备云台控制 API调用,deviceId:%s ,channelId:%s ,cmdCode:%d parameter1:%d parameter2:%d",deviceId, channelId, cmdCode, parameter1, parameter2)); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); try { cmder.frontEndCmd(device, channelId, cmdCode, parameter1, parameter2, combindCode2); @@ -148,7 +148,7 @@ public class PtzController { if (log.isDebugEnabled()) { log.debug("设备预置位查询API调用"); } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_PRESETQUERY + (ObjectUtils.isEmpty(channelId) ? deviceId : channelId); DeferredResult<String> result = new DeferredResult<String> (3 * 1000L); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java index 44389f345..35df9b7ab 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java @@ -456,4 +456,100 @@ public interface CommonGBChannelMapper { "</foreach>" + "</script>"}) int batchUpdate(List<CommonGBChannel> commonGBChannels); + + @Select("select\n" + + " wdc.id as gb_id,\n" + + " wdc.device_db_id as gb_device_db_id,\n" + + " wdc.stream_push_id,\n" + + " wdc.stream_proxy_id,\n" + + " wdc.create_time,\n" + + " wdc.update_time,\n" + + " coalesce(wpgc.device_id, wdc.gb_device_id, wdc.device_id) as gb_device_id,\n" + + " coalesce(wpgc.name, wdc.gb_name, wdc.name) as gb_name,\n" + + " coalesce(wdc.gb_manufacturer, wdc.manufacturer) as gb_manufacturer,\n" + + " coalesce(wdc.gb_model, wdc.model) as gb_model,\n" + + " coalesce(wdc.gb_owner, wdc.owner) as gb_owner,\n" + + " coalesce(wpgc.civil_code, wdc.gb_civil_code, wdc.civil_code),\n" + + " coalesce(wdc.gb_block, wdc.block) as gb_block,\n" + + " coalesce(wdc.gb_address, wdc.address) as gb_address,\n" + + " coalesce(wdc.gb_parental, wdc.parental) as gb_parental,\n" + + " coalesce(wpgc.parent_id, wdc.gb_parent_id, wdc.parent_id) as gb_parent_id,\n" + + " coalesce(wdc.gb_safety_way, wdc.safety_way) as gb_safety_way,\n" + + " coalesce(wdc.gb_register_way, wdc.register_way) as gb_register_way,\n" + + " coalesce(wdc.gb_cert_num, wdc.cert_num) as gb_cert_num,\n" + + " coalesce(wdc.gb_certifiable, wdc.certifiable) as gb_certifiable,\n" + + " coalesce(wdc.gb_err_code, wdc.err_code) as gb_err_code,\n" + + " coalesce(wdc.gb_end_time, wdc.end_time) as gb_end_time,\n" + + " coalesce(wdc.gb_secrecy, wdc.secrecy) as gb_secrecy,\n" + + " coalesce(wdc.gb_ip_address, wdc.ip_address) as gb_ip_address,\n" + + " coalesce(wdc.gb_port, wdc.port) as gb_port,\n" + + " coalesce(wdc.gb_password, wdc.password) as gb_password,\n" + + " coalesce(wdc.gb_status, wdc.status) as gb_status,\n" + + " coalesce(wdc.gb_longitude, wdc.longitude) as gb_longitude,\n" + + " coalesce(wdc.gb_latitude, wdc.latitude) as gb_latitude,\n" + + " coalesce(wdc.gb_ptz_type, wdc.ptz_type) as gb_ptz_type,\n" + + " coalesce(wdc.gb_position_type, wdc.position_type) as gb_position_type,\n" + + " coalesce(wdc.gb_room_type, wdc.room_type) as gb_room_type,\n" + + " coalesce(wdc.gb_use_type, wdc.use_type) as gb_use_type,\n" + + " coalesce(wdc.gb_supply_light_type, wdc.supply_light_type) as gb_supply_light_type,\n" + + " coalesce(wdc.gb_direction_type, wdc.direction_type) as gb_direction_type,\n" + + " coalesce(wdc.gb_resolution, wdc.resolution) as gb_resolution,\n" + + " coalesce(wpgc.business_group_id, wdc.gb_business_group_id, wdc.business_group_id) as gb_business_group_id,\n" + + " coalesce(wdc.gb_download_speed, wdc.download_speed) as gb_download_speed,\n" + + " coalesce(wdc.gb_svc_space_support_mod, wdc.svc_space_support_mod) as gb_svc_space_support_mod,\n" + + " coalesce(wdc.gb_svc_time_support_mode, wdc.svc_time_support_mode) as gb_svc_time_support_mode\n" + + " from wvp_device_channel wdc" + + " left jon wvp_platform_gb_channel wpgc on wdc.id = wpgc.device_channel_id" + + " where wpgc.platform_id = #{platformId}" + + ) + List<CommonGBChannel> queryWithPlatform(@Param("platformId") Integer platformId); + + @Select("select\n" + + " wdc.id as gb_id,\n" + + " wdc.device_db_id as gb_device_db_id,\n" + + " wdc.stream_push_id,\n" + + " wdc.stream_proxy_id,\n" + + " wdc.create_time,\n" + + " wdc.update_time,\n" + + " coalesce(wpgc.device_id, wdc.gb_device_id, wdc.device_id) as gb_device_id,\n" + + " coalesce(wpgc.name, wdc.gb_name, wdc.name) as gb_name,\n" + + " coalesce(wdc.gb_manufacturer, wdc.manufacturer) as gb_manufacturer,\n" + + " coalesce(wdc.gb_model, wdc.model) as gb_model,\n" + + " coalesce(wdc.gb_owner, wdc.owner) as gb_owner,\n" + + " coalesce(wpgc.civil_code, wdc.gb_civil_code, wdc.civil_code),\n" + + " coalesce(wdc.gb_block, wdc.block) as gb_block,\n" + + " coalesce(wdc.gb_address, wdc.address) as gb_address,\n" + + " coalesce(wdc.gb_parental, wdc.parental) as gb_parental,\n" + + " coalesce(wpgc.parent_id, wdc.gb_parent_id, wdc.parent_id) as gb_parent_id,\n" + + " coalesce(wdc.gb_safety_way, wdc.safety_way) as gb_safety_way,\n" + + " coalesce(wdc.gb_register_way, wdc.register_way) as gb_register_way,\n" + + " coalesce(wdc.gb_cert_num, wdc.cert_num) as gb_cert_num,\n" + + " coalesce(wdc.gb_certifiable, wdc.certifiable) as gb_certifiable,\n" + + " coalesce(wdc.gb_err_code, wdc.err_code) as gb_err_code,\n" + + " coalesce(wdc.gb_end_time, wdc.end_time) as gb_end_time,\n" + + " coalesce(wdc.gb_secrecy, wdc.secrecy) as gb_secrecy,\n" + + " coalesce(wdc.gb_ip_address, wdc.ip_address) as gb_ip_address,\n" + + " coalesce(wdc.gb_port, wdc.port) as gb_port,\n" + + " coalesce(wdc.gb_password, wdc.password) as gb_password,\n" + + " coalesce(wdc.gb_status, wdc.status) as gb_status,\n" + + " coalesce(wdc.gb_longitude, wdc.longitude) as gb_longitude,\n" + + " coalesce(wdc.gb_latitude, wdc.latitude) as gb_latitude,\n" + + " coalesce(wdc.gb_ptz_type, wdc.ptz_type) as gb_ptz_type,\n" + + " coalesce(wdc.gb_position_type, wdc.position_type) as gb_position_type,\n" + + " coalesce(wdc.gb_room_type, wdc.room_type) as gb_room_type,\n" + + " coalesce(wdc.gb_use_type, wdc.use_type) as gb_use_type,\n" + + " coalesce(wdc.gb_supply_light_type, wdc.supply_light_type) as gb_supply_light_type,\n" + + " coalesce(wdc.gb_direction_type, wdc.direction_type) as gb_direction_type,\n" + + " coalesce(wdc.gb_resolution, wdc.resolution) as gb_resolution,\n" + + " coalesce(wpgc.business_group_id, wdc.gb_business_group_id, wdc.business_group_id) as gb_business_group_id,\n" + + " coalesce(wdc.gb_download_speed, wdc.download_speed) as gb_download_speed,\n" + + " coalesce(wdc.gb_svc_space_support_mod, wdc.svc_space_support_mod) as gb_svc_space_support_mod,\n" + + " coalesce(wdc.gb_svc_time_support_mode, wdc.svc_time_support_mode) as gb_svc_time_support_mode\n" + + " from wvp_device_channel wdc" + + " left jon wvp_platform_gb_channel wpgc on wdc.id = wpgc.device_channel_id" + + " where wpgc.platform_id = #{platformId} and coalesce(wpgc.device_id, wdc.gb_device_id, wdc.device_id) = #{channelDeviceId}" + + ) + CommonGBChannel queryOneWithPlatform(@Param("platformId") Integer platformId, @Param("channelDeviceId") String channelDeviceId); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceMapper.java index dc1192dfa..79974f905 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceMapper.java @@ -347,4 +347,7 @@ public interface DeviceMapper { @Select("select * from wvp_device_channel where id = #{id}") DeviceChannel getRawChannel(@Param("id") int id); + + @Select("select * from wvp_device where id = #{id}") + Device query(@Param("id") Integer id); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/GroupMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/GroupMapper.java index 212e722b1..c0b10691c 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/GroupMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/GroupMapper.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.dao; +import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; import com.genersoft.iot.vmp.gb28181.bean.Group; import com.genersoft.iot.vmp.gb28181.bean.GroupTree; import com.genersoft.iot.vmp.gb28181.bean.Region; @@ -160,4 +161,14 @@ public interface GroupMapper { " <foreach collection='groupList' item='item' open='(' separator=',' close=')' > #{item.deviceId}</foreach>" + " </script>") List<Region> queryInGroupList(List<Group> groupList); + + @Select(" <script>" + + " SELECT " + + " device_id as gb_device_id" + + " name as gb_name" + + " from wvp_common_group " + + " where (device_id, business_group) in " + + " <foreach collection='channelList' item='item' open='(' separator=',' close=')' > (#{item.gbParentId}, #{item.gbBusinessGroupId})</foreach>" + + " </script>") + List<CommonGBChannel> queryInChannelList(List<CommonGBChannel> channelList); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/RegionMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/RegionMapper.java index 2289ffb21..6523459ae 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/RegionMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/RegionMapper.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.dao; +import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; import com.genersoft.iot.vmp.gb28181.bean.Region; import com.genersoft.iot.vmp.gb28181.bean.RegionTree; import org.apache.ibatis.annotations.*; @@ -96,4 +97,14 @@ public interface RegionMapper { " <foreach collection='regionList' item='item' open='(' separator=',' close=')' > #{item.deviceId}</foreach>" + " </script>") List<Region> queryInRegionList(List<Region> regionList); + + @Select(" <script>" + + " SELECT " + + " device_id as gb_device_id" + + " name as gb_name" + + " from wvp_common_region " + + " where device_id in " + + " <foreach collection='channelList' item='item' open='(' separator=',' close=')' > #{item.gbCivilCode}</foreach>" + + " </script>") + List<CommonGBChannel> queryInChannelList(List<CommonGBChannel> channelList); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceService.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceService.java index 25ad7f64b..970fc46b5 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceService.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceService.java @@ -81,7 +81,7 @@ public interface IDeviceService { * @param deviceId 设备编号 * @return 设备信息 */ - Device getDevice(String deviceId); + Device getDeviceByDeviceId(String deviceId); /** * 获取所有在线设备 @@ -164,4 +164,7 @@ public interface IDeviceService { List<Device> getAll(); PageInfo<Device> getAll(int page, int count, String query, Boolean status); + + Device getDevice(Integer gbDeviceDbId); + } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java index b57cb74a7..a8e8c668e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java @@ -75,4 +75,6 @@ public interface IGbChannelService { void deleteChannelToGroupByGbDevice(List<Integer> deviceIds); void batchUpdate(List<CommonGBChannel> commonGBChannels); + + CommonGBChannel queryOneWithPlatform(Integer platformId, String channelDeviceId); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IPlatformService.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IPlatformService.java index c34c44a0c..423734416 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IPlatformService.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IPlatformService.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.gb28181.service; +import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.Platform; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; @@ -79,7 +80,7 @@ public interface IPlatformService { /** * 语音喊话回复BYE */ - void stopBroadcast(Platform platform, DeviceChannel channel, String stream, boolean sendBye, MediaServer mediaServerItem); + void stopBroadcast(Platform platform, CommonGBChannel channel, String stream, boolean sendBye, MediaServer mediaServerItem); void addSimulatedSubscribeInfo(Platform parentPlatform); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java index d3823ad52..51db16a07 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java @@ -351,7 +351,7 @@ public class DeviceServiceImpl implements IDeviceService { } @Override - public Device getDevice(String deviceId) { + public Device getDeviceByDeviceId(String deviceId) { Device device = redisCatchStorage.getDevice(deviceId); if (device == null) { device = deviceMapper.getDeviceByDeviceId(deviceId); @@ -568,4 +568,9 @@ public class DeviceServiceImpl implements IDeviceService { List<Device> all = deviceMapper.getDeviceList(query, status); return new PageInfo<>(all); } + + @Override + public Device getDevice(Integer id) { + return deviceMapper.query(id); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java index 422fc10f2..c0d98bc0e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java @@ -3,6 +3,8 @@ package com.genersoft.iot.vmp.gb28181.service.impl; import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.dao.CommonGBChannelMapper; +import com.genersoft.iot.vmp.gb28181.dao.GroupMapper; +import com.genersoft.iot.vmp.gb28181.dao.RegionMapper; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; import com.genersoft.iot.vmp.gb28181.service.IGbChannelService; @@ -32,6 +34,12 @@ public class GbChannelServiceImpl implements IGbChannelService { @Autowired private CommonGBChannelMapper commonGBChannelMapper; + @Autowired + private RegionMapper regionMapper; + + @Autowired + private GroupMapper groupMapper; + @Override public CommonGBChannel queryByDeviceId(String gbDeviceId) { return commonGBChannelMapper.queryByDeviceId(gbDeviceId); @@ -316,14 +324,19 @@ public class GbChannelServiceImpl implements IGbChannelService { // 是否包含行政区划信息 if (platform.getCatalogWithRegion()) { - + List<CommonGBChannel> regionChannelList = regionMapper.queryInChannelList(commonGBChannelList); + if (!regionChannelList.isEmpty()) { + channelList.addAll(regionChannelList); + } } // 是否包含分组信息 if (platform.getCatalogWithGroup()) { - + List<CommonGBChannel> groupChannelList = groupMapper.queryInChannelList(commonGBChannelList); + if (!groupChannelList.isEmpty()) { + channelList.addAll(groupChannelList); + } } - - + channelList.addAll(commonGBChannelList); return channelList; } @@ -619,4 +632,9 @@ public class GbChannelServiceImpl implements IGbChannelService { } commonGBChannelMapper.removeParentIdByChannels(channelList); } + + @Override + public CommonGBChannel queryOneWithPlatform(Integer platformId, String channelDeviceId) { + return commonGBChannelMapper.queryOneWithPlatform(platformId, channelDeviceId); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformServiceImpl.java index b63369396..20332854d 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformServiceImpl.java @@ -165,7 +165,6 @@ public class PlatformServiceImpl implements IPlatformService { // 每次发送目录的数量默认为1 parentPlatform.setCatalogGroup(1); } - parentPlatform.setCatalogId(parentPlatform.getDeviceGBId()); int result = platformMapper.addParentPlatform(parentPlatform); // 添加缓存 PlatformCatch parentPlatformCatch = new PlatformCatch(); @@ -776,23 +775,23 @@ public class PlatformServiceImpl implements IPlatformService { } @Override - public void stopBroadcast(Platform platform, DeviceChannel channel, String stream, boolean sendBye, MediaServer mediaServerItem) { + public void stopBroadcast(Platform platform, CommonGBChannel channel, String stream, boolean sendBye, MediaServer mediaServerItem) { try { if (sendBye) { - commanderForPlatform.streamByeCmd(platform, channel.getDeviceId(), stream, null, null); + commanderForPlatform.streamByeCmd(platform, channel.getGbDeviceId(), stream, null, null); } } catch (InvalidArgumentException | SipException | ParseException | SsrcTransactionNotFoundException e) { - log.warn("[消息发送失败] 停止语音对讲, 平台:{},通道:{}", platform.getId(), channel.getDeviceId() ); + log.warn("[消息发送失败] 停止语音对讲, 平台:{},通道:{}", platform.getId(), channel.getGbDeviceId() ); } finally { mediaServerService.closeRTPServer(mediaServerItem, stream); - InviteInfo inviteInfo = inviteStreamService.getInviteInfo(null, platform.getServerGBId(), channel.getDeviceId(), stream); + InviteInfo inviteInfo = inviteStreamService.getInviteInfo(null, platform.getServerGBId(), channel.getGbDeviceId(), stream); if (inviteInfo != null) { // 释放ssrc mediaServerService.releaseSsrc(mediaServerItem.getId(), inviteInfo.getSsrcInfo().getSsrc()); inviteStreamService.removeInviteInfo(inviteInfo); } - streamSession.remove(platform.getServerGBId(), channel.getDeviceId(), stream); + streamSession.remove(platform.getServerGBId(), channel.getGbDeviceId(), stream); } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlayServiceImpl.java index 5e02ceff6..60d6ede6a 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlayServiceImpl.java @@ -130,7 +130,7 @@ public class PlayServiceImpl implements IPlayService { if (streamArray.length == 2) { String deviceId = streamArray[0]; String channelId = streamArray[1]; - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); if (device == null) { log.info("[语音对讲/喊话] 未找到设备:{}", deviceId); return; @@ -172,7 +172,7 @@ public class PlayServiceImpl implements IPlayService { for (SendRtpItem sendRtpItem : sendRtpItems) { if (sendRtpItem != null && sendRtpItem.getApp().equals(event.getApp())) { String platformId = sendRtpItem.getPlatformId(); - Device device = deviceService.getDevice(platformId); + Device device = deviceService.getDeviceByDeviceId(platformId); try { if (device != null) { cmder.streamByeCmd(device, sendRtpItem.getChannelId(), event.getStream(), sendRtpItem.getCallId()); @@ -200,7 +200,7 @@ public class PlayServiceImpl implements IPlayService { if (streamArray.length == 2) { String deviceId = streamArray[0]; String channelId = streamArray[1]; - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); if (device == null) { log.info("[语音对讲/喊话] 未找到设备:{}", deviceId); return; @@ -753,7 +753,7 @@ public class PlayServiceImpl implements IPlayService { @Override public void playBack(String deviceId, String channelId, String startTime, String endTime, ErrorCallback<Object> callback) { - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); if (device == null) { log.warn("[录像回放] 未找到设备 deviceId: {},channelId:{}", deviceId, channelId); throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到设备:" + deviceId); @@ -793,7 +793,7 @@ public class PlayServiceImpl implements IPlayService { return; } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); if (device == null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "设备: " + deviceId + "不存在"); } @@ -959,7 +959,7 @@ public class PlayServiceImpl implements IPlayService { @Override public void download(String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, ErrorCallback<Object> callback) { - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); if (device == null) { return; } @@ -989,7 +989,7 @@ public class PlayServiceImpl implements IPlayService { null); return; } - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); if (device == null) { callback.run(InviteErrorCode.ERROR_FOR_PARAMETER_ERROR.getCode(), "设备:" + deviceId + "不存在", @@ -1169,7 +1169,7 @@ public class PlayServiceImpl implements IPlayService { if (allSsrc.size() > 0) { for (SsrcTransaction ssrcTransaction : allSsrc) { if (ssrcTransaction.getMediaServerId().equals(mediaServerId)) { - Device device = deviceService.getDevice(ssrcTransaction.getDeviceId()); + Device device = deviceService.getDeviceByDeviceId(ssrcTransaction.getDeviceId()); if (device == null) { continue; } @@ -1291,7 +1291,7 @@ public class PlayServiceImpl implements IPlayService { } if (audioBroadcastCatchList.size() > 0) { for (AudioBroadcastCatch audioBroadcastCatch : audioBroadcastCatchList) { - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); if (device == null || audioBroadcastCatch == null) { return; } @@ -1390,7 +1390,7 @@ public class PlayServiceImpl implements IPlayService { if (!result) { throw new ServiceException("暂停RTP接收失败"); } - Device device = deviceService.getDevice(inviteInfo.getDeviceId()); + Device device = deviceService.getDeviceByDeviceId(inviteInfo.getDeviceId()); cmder.playPauseCmd(device, inviteInfo.getStreamInfo()); } @@ -1418,7 +1418,7 @@ public class PlayServiceImpl implements IPlayService { if (!result) { throw new ServiceException("继续RTP接收失败"); } - Device device = deviceService.getDevice(inviteInfo.getDeviceId()); + Device device = deviceService.getDeviceByDeviceId(inviteInfo.getDeviceId()); cmder.playResumeCmd(device, inviteInfo.getStreamInfo()); } @@ -1450,7 +1450,7 @@ public class PlayServiceImpl implements IPlayService { @Override public void startSendRtpStreamFailHand(SendRtpItem sendRtpItem, Platform platform, CallIdHeader callIdHeader) { if (sendRtpItem.isOnlyAudio()) { - Device device = deviceService.getDevice(sendRtpItem.getDeviceId()); + Device device = deviceService.getDeviceByDeviceId(sendRtpItem.getDeviceId()); AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(sendRtpItem.getDeviceId(), sendRtpItem.getChannelId()); if (audioBroadcastCatch != null) { try { @@ -1571,7 +1571,7 @@ public class PlayServiceImpl implements IPlayService { @Override public void getSnap(String deviceId, String channelId, String fileName, ErrorCallback errorCallback) { - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); if (device == null) { errorCallback.run(InviteErrorCode.ERROR_FOR_PARAMETER_ERROR.getCode(), InviteErrorCode.ERROR_FOR_PARAMETER_ERROR.getMsg(), null); return; diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java index 6329833a8..52976144e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/AckRequestProcessor.java @@ -122,7 +122,7 @@ public class AckRequestProcessor extends SIPRequestProcessorParent implements In } } }else { - Device device = deviceService.getDevice(fromUserId); + Device device = deviceService.getDeviceByDeviceId(fromUserId); if (device == null) { log.warn("[收到ACK]:来自{},目标为({})的推流信息为找到流体服务[{}]信息",fromUserId, toUserId, sendRtpItem.getMediaServerId()); return; diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java index c36016713..5903cd15f 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java @@ -67,10 +67,10 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In private AudioBroadcastManager audioBroadcastManager; @Autowired - private IDeviceChannelService channelService; + private IVideoManagerStorage storager; @Autowired - private IVideoManagerStorage storager; + private IGbChannelService channelService; @Autowired private IMediaServerService mediaServerService; @@ -163,7 +163,7 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In if (mediaInfo.getReaderCount() <= 0) { log.info("[收到bye] {} 无其它观看者,通知设备停止推流", streamId); if (sendRtpItem.getPlayType().equals(InviteStreamType.PLAY)) { - Device device = deviceService.getDevice(sendRtpItem.getDeviceId()); + Device device = deviceService.getDeviceByDeviceId(sendRtpItem.getDeviceId()); if (device == null) { log.info("[收到bye] {} 通知设备停止推流时未找到设备信息", streamId); } @@ -189,7 +189,7 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In if (platform != null ) { if (ssrcTransaction.getType().equals(InviteSessionType.BROADCAST)) { log.info("[收到bye] 上级停止语音对讲,来自:{}, 通道已停止推流: {}", ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId()); - DeviceChannel channel = storager.queryChannelInParentPlatform(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId()); + CommonGBChannel channel = channelService.queryOneWithPlatform(platform.getId(), ssrcTransaction.getChannelId()); if (channel == null) { log.info("[收到bye] 未找到通道,设备:{}, 通道:{}", ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId()); return; @@ -198,16 +198,16 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In platformService.stopBroadcast(platform, channel, ssrcTransaction.getStream(), false, mediaServerService.getOne(mediaServerId)); - playService.stopAudioBroadcast(ssrcTransaction.getDeviceId(), channel.getDeviceId()); + playService.stopAudioBroadcast(ssrcTransaction.getDeviceId(), channel.getGbDeviceId()); } }else { - Device device = deviceService.getDevice(ssrcTransaction.getDeviceId()); + Device device = deviceService.getDeviceByDeviceId(ssrcTransaction.getDeviceId()); if (device == null) { log.info("[收到bye] 未找到设备:{} ", ssrcTransaction.getDeviceId()); return; } - DeviceChannel channel = channelService.getOne(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId()); + DeviceChannel channel = deviceChannelService.getOne(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId()); if (channel == null) { log.info("[收到bye] 未找到通道,设备:{}, 通道:{}", ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId()); return; diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java index 6c3fe7e4d..53518ad65 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java @@ -10,6 +10,7 @@ import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.gb28181.bean.*; +import com.genersoft.iot.vmp.gb28181.service.IGbChannelService; import com.genersoft.iot.vmp.gb28181.service.IPlayService; import com.genersoft.iot.vmp.gb28181.session.AudioBroadcastManager; import com.genersoft.iot.vmp.gb28181.session.SSRCFactory; @@ -82,6 +83,9 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @Autowired private IVideoManagerStorage storager; + @Autowired + private IGbChannelService channelService; + @Autowired private IStreamPushService streamPushService; @@ -190,15 +194,12 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements } else { // 查询平台下是否有该通道 - DeviceChannel channel = storager.queryChannelInParentPlatform(requesterId, channelId); - GbStream gbStream = storager.queryStreamInParentPlatform(requesterId, channelId); -// PlatformCatalog catalog = storager.getCatalog(requesterId, channelId); - + CommonGBChannel channel= channelService.queryOneWithPlatform(platform.getId(), channelId); MediaServer mediaServerItem = null; StreamPush streamPushItem = null; StreamProxy proxyByAppAndStream = null; // 不是通道可能是直播流 - if (channel != null && gbStream == null) { + if (channel != null ) { // 通道存在,发100,TRYING try { responseAck(request, Response.TRYING); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java index abcac1703..23a6e42a5 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java @@ -93,7 +93,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen SipUri uri = (SipUri) address.getURI(); String deviceId = uri.getUser(); - Device device = deviceService.getDevice(deviceId); + Device device = deviceService.getDeviceByDeviceId(deviceId); RemoteAddressInfo remoteAddressInfo = SipUtils.getRemoteAddressFromRequest(request, userSetting.getSipUseSourceIpAsRemoteAddress()); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/info/InfoRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/info/InfoRequestProcessor.java index 6a206cf93..3cdbbfe3c 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/info/InfoRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/info/InfoRequestProcessor.java @@ -9,7 +9,6 @@ import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; -import com.genersoft.iot.vmp.gb28181.utils.SipUtils; import com.genersoft.iot.vmp.gb28181.service.IDeviceService; import com.genersoft.iot.vmp.gb28181.service.IInviteStreamService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; @@ -28,6 +27,9 @@ import javax.sip.header.ContentTypeHeader; import javax.sip.message.Response; import java.text.ParseException; +/** + * INFO 一般用于国标级联时的回放控制 + */ @Slf4j @Component public class InfoRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor { @@ -68,22 +70,17 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I public void process(RequestEvent evt) { log.debug("接收到消息:" + evt.getRequest()); SIPRequest request = (SIPRequest) evt.getRequest(); - String deviceId = SipUtils.getUserIdFromFromHeader(request); CallIdHeader callIdHeader = request.getCallIdHeader(); // 先从会话内查找 SsrcTransaction ssrcTransaction = sessionManager.getSsrcTransaction(null, null, callIdHeader.getCallId(), null); - // 兼容海康 媒体通知 消息from字段不是设备ID的问题 - if (ssrcTransaction != null) { - deviceId = ssrcTransaction.getDeviceId(); - } // 查询设备是否存在 - Device device = redisCatchStorage.getDevice(deviceId); + Device device = redisCatchStorage.getDevice(ssrcTransaction.getDeviceId()); // 查询上级平台是否存在 - Platform parentPlatform = storage.queryParentPlatByServerGBId(deviceId); + Platform parentPlatform = storage.queryParentPlatByServerGBId(ssrcTransaction.getDeviceId()); try { if (device != null && parentPlatform != null) { - log.warn("[重复]平台与设备编号重复:{}", deviceId); + log.warn("[重复]平台与设备编号重复:{}", ssrcTransaction.getDeviceId()); String hostAddress = request.getRemoteAddress().getHostAddress(); int remotePort = request.getRemotePort(); if (device.getHostAddress().equals(hostAddress + ":" + remotePort)) { @@ -94,8 +91,8 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I } if (device == null && parentPlatform == null) { // 不存在则回复404 - responseAck(request, Response.NOT_FOUND, "device "+ deviceId +" not found"); - log.warn("[设备未找到 ]: {}", deviceId); + responseAck(request, Response.NOT_FOUND, "device "+ ssrcTransaction.getDeviceId() +" not found"); + log.warn("[设备未找到 ]: {}", ssrcTransaction.getDeviceId()); if (sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()) != null){ DeviceNotFoundEvent deviceNotFoundEvent = new DeviceNotFoundEvent(evt.getDialog()); deviceNotFoundEvent.setCallId(callIdHeader.getCallId()); @@ -114,8 +111,9 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I responseAck(request, Response.NOT_FOUND, "stream " + streamId + " not found"); return; } - Device device1 = deviceService.getDevice(inviteInfo.getDeviceId()); + Device device1 = deviceService.getDeviceByDeviceId(inviteInfo.getDeviceId()); if (inviteInfo.getStreamInfo() != null) { + // 不解析协议, 直接转发给对应的设备 cmder.playbackControlCmd(device1,inviteInfo.getStreamInfo(),new String(evt.getRequest().getRawContent()),eventResult -> { // 失败的回复 try { @@ -143,6 +141,4 @@ public class InfoRequestProcessor extends SIPRequestProcessorParent implements I log.warn("SIP回复时解析异常", e); } } - - } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java index c5e762603..b8080d96e 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java @@ -65,38 +65,14 @@ public class DeviceControlQueryMessageHandler extends SIPRequestProcessorParent String channelId = getText(rootElement, "DeviceID"); // 远程启动功能 if (!ObjectUtils.isEmpty(getText(rootElement, "TeleBoot"))) { - // TODO 拒绝远程启动命令 - log.warn("[国标级联]收到平台的远程启动命令, 不处理"); - -// if (parentPlatform.getServerGBId().equals(targetGBId)) { -// // 远程启动本平台:需要在重新启动程序后先对SipStack解绑 -// logger.info("执行远程启动本平台命令"); -// try { -// cmderFroPlatform.unregister(parentPlatform, null, null); -// } catch (InvalidArgumentException | ParseException | SipException e) { -// logger.error("[命令发送失败] 国标级联 注销: {}", e.getMessage()); -// } -// taskExecutor.execute(() -> { -// // 远程启动 -//// try { -//// Thread.sleep(3000); -//// SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider"); -//// SipStackImpl stack = (SipStackImpl)up.getSipStack(); -//// stack.stop(); -//// Iterator listener = stack.getListeningPoints(); -//// while (listener.hasNext()) { -//// stack.deleteListeningPoint((ListeningPoint) listener.next()); -//// } -//// Iterator providers = stack.getSipProviders(); -//// while (providers.hasNext()) { -//// stack.deleteSipProvider((SipProvider) providers.next()); -//// } -//// VManageBootstrap.restart(); -//// } catch (InterruptedException | ObjectInUseException e) { -//// logger.error("[任务执行失败] 服务重启: {}", e.getMessage()); -//// } -// }); -// } + // 拒绝远程启动命令 + log.warn("[国标级联]收到平台的远程启动命令, 禁用,不允许上级平台随意重启下级平台"); + try { + responseAck(request, Response.FORBIDDEN); + } catch (SipException | InvalidArgumentException | ParseException e) { + log.error("[命令发送失败] 错误信息: {}", e.getMessage()); + } + return; } DeviceControlType deviceControlType = DeviceControlType.typeOf(rootElement); log.info("[接受deviceControl命令] 命令: {}", deviceControlType); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/BroadcastNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/BroadcastNotifyMessageHandler.java index df483ca4e..ceca2576e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/BroadcastNotifyMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/BroadcastNotifyMessageHandler.java @@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.gb28181.bean.*; +import com.genersoft.iot.vmp.gb28181.service.IGbChannelService; import com.genersoft.iot.vmp.gb28181.session.AudioBroadcastManager; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; @@ -42,6 +43,9 @@ public class BroadcastNotifyMessageHandler extends SIPRequestProcessorParent imp @Autowired private IVideoManagerStorage storage; + @Autowired + private IGbChannelService channelService; + @Autowired private ISIPCommanderForPlatform commanderForPlatform; @@ -94,14 +98,14 @@ public class BroadcastNotifyMessageHandler extends SIPRequestProcessorParent imp log.info("[国标级联 语音喊话] platform: {}, channel: {}", platform.getServerGBId(), targetId); - DeviceChannel deviceChannel = storage.queryChannelInParentPlatform(platform.getServerGBId(), targetId); - if (deviceChannel == null) { + CommonGBChannel channel = channelService.queryOneWithPlatform(platform.getId(), targetId); + if (channel == null) { log.warn("[国标级联 语音喊话] 未找到通道 platform: {}, channel: {}", platform.getServerGBId(), targetId); responseAck(request, Response.NOT_FOUND, "TargetID not found"); return; } // 向下级发送语音的喊话请求 - Device device = deviceService.getDevice(deviceChannel.getDeviceId()); + Device device = deviceService.getDevice(channel.getGbDeviceDbId()); if (device == null) { responseAck(request, Response.NOT_FOUND, "device not found"); return; @@ -110,26 +114,26 @@ public class BroadcastNotifyMessageHandler extends SIPRequestProcessorParent imp // 查看语音通道是否已经建立并且已经在使用 if (playService.audioBroadcastInUse(device, targetId)) { - commanderForPlatform.broadcastResultCmd(platform, deviceChannel, sn, false,null, null); + commanderForPlatform.broadcastResultCmd(platform, channel, sn, false,null, null); return; } MediaServer mediaServerForMinimumLoad = mediaServerService.getMediaServerForMinimumLoad(null); - commanderForPlatform.broadcastResultCmd(platform, deviceChannel, sn, true, eventResult->{ + commanderForPlatform.broadcastResultCmd(platform, channel, sn, true, eventResult->{ log.info("[国标级联] 语音喊话 回复失败 platform: {}, 错误:{}/{}", platform.getServerGBId(), eventResult.statusCode, eventResult.msg); }, eventResult->{ // 消息发送成功, 向上级发送invite,获取推流 try { - platformService.broadcastInvite(platform, deviceChannel.getDeviceId(), mediaServerForMinimumLoad, (hookData)->{ + platformService.broadcastInvite(platform, channel.getGbDeviceId(), mediaServerForMinimumLoad, (hookData)->{ // 上级平台推流成功 AudioBroadcastCatch broadcastCatch = audioBroadcastManager.get(device.getDeviceId(), targetId); if (broadcastCatch != null ) { if (playService.audioBroadcastInUse(device, targetId)) { log.info("[国标级联] 语音喊话 设备正在使用中 platform: {}, channel: {}", - platform.getServerGBId(), deviceChannel.getDeviceId()); + platform.getServerGBId(), channel.getGbDeviceId()); // 查看语音通道已经建立且已经占用 回复BYE - platformService.stopBroadcast(platform, deviceChannel, hookData.getStream(), true, hookData.getMediaServer()); + platformService.stopBroadcast(platform, channel, hookData.getStream(), true, hookData.getMediaServer()); }else { // 查看语音通道已经建立但是未占用 broadcastCatch.setApp(hookData.getApp()); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java index 1c0762572..d66d6a476 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java @@ -41,14 +41,6 @@ public class CatalogQueryMessageHandler extends SIPRequestProcessorParent implem @Autowired private SIPCommanderFroPlatform cmderFroPlatform; - @Autowired - private SipConfig config; - - @Autowired - private EventPublisher publisher; - - @Autowired - private IVideoManagerStorage storage; @Override public void afterPropertiesSet() throws Exception { @@ -57,7 +49,10 @@ public class CatalogQueryMessageHandler extends SIPRequestProcessorParent implem @Override public void handForDevice(RequestEvent evt, Device device, Element element) { - + try { + // 回复200 OK + responseAck((SIPRequest) evt.getRequest(), Response.FORBIDDEN); + } catch (SipException | InvalidArgumentException | ParseException ignored) {} } @Override @@ -84,6 +79,5 @@ public class CatalogQueryMessageHandler extends SIPRequestProcessorParent implem } catch (SipException | InvalidArgumentException | ParseException e) { log.error("[命令发送失败] 国标级联 目录查询回复: {}", e.getMessage()); } - } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceInfoQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceInfoQueryMessageHandler.java index 2aaa27ca6..ca8b4db1b 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceInfoQueryMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceInfoQueryMessageHandler.java @@ -48,7 +48,7 @@ public class DeviceInfoQueryMessageHandler extends SIPRequestProcessorParent imp } @Override - public void handForPlatform(RequestEvent evt, Platform parentPlatform, Element rootElement) { + public void handForPlatform(RequestEvent evt, Platform platform, Element rootElement) { log.info("[DeviceInfo查询]消息"); FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); try { @@ -68,15 +68,15 @@ public class DeviceInfoQueryMessageHandler extends SIPRequestProcessorParent imp // 查询这是通道id还是设备id Device device = null; // 如果id指向平台的国标编号,那么就是查询平台的信息 - if (!parentPlatform.getDeviceGBId().equals(channelId)) { - device = storager.queryDeviceInfoByPlatformIdAndChannelId(parentPlatform.getServerGBId(), channelId); + if (!platform.getDeviceGBId().equals(channelId)) { + device = storager.queryDeviceInfoByPlatformIdAndChannelId(platform.getServerGBId(), channelId); if (device ==null){ - log.error("[平台没有该通道的使用权限]:platformId"+parentPlatform.getServerGBId()+" deviceID:"+channelId); + log.error("[平台没有该通道的使用权限]:platformId"+platform.getServerGBId()+" deviceID:"+channelId); return; } } try { - cmderFroPlatform.deviceInfoResponse(parentPlatform, device, sn, fromHeader.getTag()); + cmderFroPlatform.deviceInfoResponse(platform, device, sn, fromHeader.getTag()); } catch (SipException | InvalidArgumentException | ParseException e) { log.error("[命令发送失败] 国标级联 DeviceInfo查询回复: {}", e.getMessage()); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java index 343826a1a..f4027f304 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java @@ -1,8 +1,10 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.cmd; +import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.Platform; +import com.genersoft.iot.vmp.gb28181.service.IGbChannelService; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; @@ -34,7 +36,7 @@ public class DeviceStatusQueryMessageHandler extends SIPRequestProcessorParent i private QueryMessageHandler queryMessageHandler; @Autowired - private IVideoManagerStorage storager; + private IGbChannelService channelService; @Autowired private ISIPCommanderForPlatform cmderFroPlatform; @@ -62,13 +64,13 @@ public class DeviceStatusQueryMessageHandler extends SIPRequestProcessorParent i } String sn = rootElement.element("SN").getText(); String channelId = getText(rootElement, "DeviceID"); - DeviceChannel deviceChannel = storager.queryChannelInParentPlatform(parentPlatform.getServerGBId(), channelId); - if (deviceChannel ==null){ + CommonGBChannel channel= channelService.queryOneWithPlatform(parentPlatform.getId(), channelId); + if (channel ==null){ log.error("[平台没有该通道的使用权限]:platformId"+parentPlatform.getServerGBId()+" deviceID:"+channelId); return; } try { - cmderFroPlatform.deviceStatusResponse(parentPlatform,channelId, sn, fromHeader.getTag(), "ON".equalsIgnoreCase(deviceChannel.getStatus())); + cmderFroPlatform.deviceStatusResponse(parentPlatform, channelId, sn, fromHeader.getTag(), "ON".equalsIgnoreCase(channel.getGbStatus())); } catch (SipException | InvalidArgumentException | ParseException e) { log.error("[命令发送失败] 国标级联 DeviceStatus查询回复: {}", e.getMessage()); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java index 823d53012..55782a0b2 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/RecordInfoQueryMessageHandler.java @@ -1,9 +1,12 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.cmd; +import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.Platform; import com.genersoft.iot.vmp.gb28181.event.record.RecordEndEventListener; +import com.genersoft.iot.vmp.gb28181.service.IDeviceService; +import com.genersoft.iot.vmp.gb28181.service.IGbChannelService; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; @@ -38,6 +41,12 @@ public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent imp @Autowired private IVideoManagerStorage storager; + @Autowired + private IGbChannelService channelService; + + @Autowired + private IDeviceService deviceService; + @Autowired private SIPCommanderFroPlatform cmderFroPlatform; @@ -85,56 +94,65 @@ public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent imp if (typeElement != null) { type = typeElement.getText(); } - // 确认是直播还是国标, 国标直接请求下级,直播请求录像管理服务 - List<ChannelSourceInfo> channelSources = storager.getChannelSource(parentPlatform.getServerGBId(), channelId); - if (channelSources.get(0).getCount() > 0) { // 国标 - // 向国标设备请求录像数据 - Device device = storager.queryVideoDeviceByPlatformIdAndChannelId(parentPlatform.getServerGBId(), channelId); - DeviceChannel deviceChannel = storager.queryChannelInParentPlatform(parentPlatform.getServerGBId(), channelId); - // 接收录像数据 - recordEndEventListener.addEndEventHandler(deviceChannel.getDeviceId(), channelId, (recordInfo)->{ - try { - log.info("[国标级联] 录像查询收到数据, 通道: {},准备转发===", channelId); - cmderFroPlatform.recordInfo(deviceChannel, parentPlatform, request.getFromTag(), recordInfo); - } catch (SipException | InvalidArgumentException | ParseException e) { - log.error("[命令发送失败] 国标级联 回复录像数据: {}", e.getMessage()); - } - }); - try { - commander.recordInfoQuery(device, channelId, DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(startTime), - DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(endTime), sn, secrecy, type, (eventResult -> { - // 回复200 OK - try { - responseAck(request, Response.OK); - } catch (SipException | InvalidArgumentException | ParseException e) { - log.error("[命令发送失败] 录像查询回复: {}", e.getMessage()); - } - }),(eventResult -> { - // 查询失败 - try { - responseAck(request, eventResult.statusCode, eventResult.msg); - } catch (SipException | InvalidArgumentException | ParseException e) { - log.error("[命令发送失败] 录像查询回复: {}", e.getMessage()); - } - })); - } catch (InvalidArgumentException | ParseException | SipException e) { - log.error("[命令发送失败] 录像查询: {}", e.getMessage()); - } - - }else if (channelSources.get(1).getCount() > 0) { // 直播流 - // TODO - try { - responseAck(request, Response.NOT_IMPLEMENTED); // 回复未实现 - } catch (SipException | InvalidArgumentException | ParseException e) { - log.error("[命令发送失败] 录像查询: {}", e.getMessage()); - } - }else { // 错误的请求 + // 向国标设备请求录像数据 + CommonGBChannel channel = channelService.queryOneWithPlatform(parentPlatform.getId(), channelId); + if (channel == null) { + log.info("[平台查询录像记录] 未找到通道 {}/{}", parentPlatform.getName(), channelId ); try { responseAck(request, Response.BAD_REQUEST); } catch (SipException | InvalidArgumentException | ParseException e) { - log.error("[命令发送失败] 录像查询: {}", e.getMessage()); + log.error("[命令发送失败] [平台查询录像记录] 未找到通道: {}", e.getMessage()); } + return; + } + if (channel.getStreamProxyId() > 0 || channel.getStreamPushId() > 0) { + log.info("[平台查询录像记录] 不支持查询推流和拉流代理的录像数据 {}/{}", parentPlatform.getName(), channelId ); + try { + responseAck(request, Response.NOT_IMPLEMENTED); // 回复未实现 + } catch (SipException | InvalidArgumentException | ParseException e) { + log.error("[命令发送失败] 平台查询录像记录: {}", e.getMessage()); + } + return; + } + Device device = deviceService.getDevice(channel.getGbDeviceDbId()); + if (device == null) { + log.warn("[平台查询录像记录] 未找到通道对应的设备 {}/{}", parentPlatform.getName(), channelId ); + try { + responseAck(request, Response.BAD_REQUEST); + } catch (SipException | InvalidArgumentException | ParseException e) { + log.error("[命令发送失败] [平台查询录像记录] 未找到通道对应的设备: {}", e.getMessage()); + } + return; + } + // 接收录像数据 + recordEndEventListener.addEndEventHandler(channel.getGbDeviceId(), channelId, (recordInfo)->{ + try { + log.info("[国标级联] 录像查询收到数据, 通道: {},准备转发===", channelId); + cmderFroPlatform.recordInfo(channel, parentPlatform, request.getFromTag(), recordInfo); + } catch (SipException | InvalidArgumentException | ParseException e) { + log.error("[命令发送失败] 国标级联 回复录像数据: {}", e.getMessage()); + } + }); + try { + commander.recordInfoQuery(device, channelId, DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(startTime), + DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(endTime), sn, secrecy, type, (eventResult -> { + // 回复200 OK + try { + responseAck(request, Response.OK); + } catch (SipException | InvalidArgumentException | ParseException e) { + log.error("[命令发送失败] 录像查询回复: {}", e.getMessage()); + } + }),(eventResult -> { + // 查询失败 + try { + responseAck(request, eventResult.statusCode, eventResult.msg); + } catch (SipException | InvalidArgumentException | ParseException e) { + log.error("[命令发送失败] 录像查询回复: {}", e.getMessage()); + } + })); + } catch (InvalidArgumentException | ParseException | SipException e) { + log.error("[命令发送失败] 录像查询: {}", e.getMessage()); } } } 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 9a7420737..1e75b4343 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java @@ -248,7 +248,7 @@ public class MediaServiceImpl implements IMediaService { } } } - Device device = deviceService.getDevice(inviteInfo.getDeviceId()); + Device device = deviceService.getDeviceByDeviceId(inviteInfo.getDeviceId()); if (device != null) { try { // 多查询一次防止已经被处理了 diff --git a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisAlarmMsgListener.java b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisAlarmMsgListener.java index fbe6e78db..670f8556c 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisAlarmMsgListener.java +++ b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisAlarmMsgListener.java @@ -129,7 +129,7 @@ public class RedisAlarmMsgListener implements MessageListener { } }else { - Device device = deviceService.getDevice(gbId); + Device device = deviceService.getDeviceByDeviceId(gbId); Platform platform = storage.queryParentPlatByServerGBId(gbId); if (device != null && platform == null) { try { diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiControlController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiControlController.java index 50829c5cf..edfd71a2d 100644 --- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiControlController.java +++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiControlController.java @@ -51,7 +51,7 @@ public class ApiControlController { } if (channel == null) {channel = 0;} if (speed == null) {speed = 0;} - Device device = deviceService.getDevice(serial); + Device device = deviceService.getDeviceByDeviceId(serial); if (device == null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "device[ " + serial + " ]未找到"); } @@ -125,7 +125,7 @@ public class ApiControlController { } if (channel == null) {channel = 0;} - Device device = deviceService.getDevice(serial); + Device device = deviceService.getDeviceByDeviceId(serial); if (device == null) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "device[ " + serial + " ]未找到"); } diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java index 891e36a97..06fd5f81c 100644 --- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java +++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java @@ -200,7 +200,7 @@ public class ApiDeviceController { serial, channel, code, fill, timeout); } - Device device = deviceService.getDevice(serial); + Device device = deviceService.getDeviceByDeviceId(serial); String uuid = UUID.randomUUID().toString(); String key = DeferredResultHolder.CALLBACK_CMD_PRESETQUERY + (ObjectUtils.isEmpty(code) ? serial : code); DeferredResult<Object> result = new DeferredResult<> (timeout * 1000L); diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java index 39049b780..e8566deed 100644 --- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java +++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java @@ -82,7 +82,7 @@ public class ApiStreamController { ){ DeferredResult<JSONObject> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue() + 10); - Device device = deviceService.getDevice(serial); + Device device = deviceService.getDeviceByDeviceId(serial); if (device == null ) { JSONObject resultJSON = new JSONObject(); resultJSON.put("error","device[ " + serial + " ]未找到"); @@ -230,7 +230,7 @@ public class ApiStreamController { result.put("error","未找到流信息"); return result; } - Device device = deviceService.getDevice(serial); + Device device = deviceService.getDeviceByDeviceId(serial); if (device == null) { JSONObject result = new JSONObject(); result.put("error","未找到设备");