diff --git a/src/main/java/com/genersoft/iot/vmp/service/ICommonGbChannelService.java b/src/main/java/com/genersoft/iot/vmp/service/ICommonGbChannelService.java index 621e48b7..b5854cbd 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/ICommonGbChannelService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/ICommonGbChannelService.java @@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.service; import com.genersoft.iot.vmp.common.CommonGbChannel; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; +import com.genersoft.iot.vmp.gb28181.bean.command.PTZCommand; import com.genersoft.iot.vmp.service.bean.*; import com.genersoft.iot.vmp.vmanager.bean.UpdateCommonChannelToGroup; import com.genersoft.iot.vmp.vmanager.bean.UpdateCommonChannelToRegion; @@ -72,4 +73,6 @@ public interface ICommonGbChannelService { void removeShareChannel(ShareCommonGbChannelParam param); PageInfo getShareChannelList(int platformId, int page, int count, String query, String type, Boolean online); + + void ptzControl(CommonGbChannel channel, PTZCommand ptzCommand); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/CommonGbChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/CommonGbChannelServiceImpl.java index 874b9416..2ff1d33f 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/CommonGbChannelServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/CommonGbChannelServiceImpl.java @@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.common.BatchLimit; import com.genersoft.iot.vmp.common.CommonGbChannel; import com.genersoft.iot.vmp.conf.exception.ControllerException; import com.genersoft.iot.vmp.gb28181.bean.*; +import com.genersoft.iot.vmp.gb28181.bean.command.PTZCommand; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEventType; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.gb28181.utils.SipUtils; @@ -488,4 +489,11 @@ public class CommonGbChannelServiceImpl implements ICommonGbChannelService { List all = commonGbChannelMapper.getShareChannel(platformId, query, type, online); return new PageInfo<>(all); } + + @Override + public void ptzControl(CommonGbChannel channel, PTZCommand ptzCommand) { + IResourceService resourceService = resourceServiceMap.get(channel.getType()); + assert resourceService != null; + resourceService.ptzControl(channel, ptzCommand); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/channel/CommonChannelController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/channel/CommonChannelController.java index 5217feb5..e94e46b7 100755 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/channel/CommonChannelController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/channel/CommonChannelController.java @@ -3,9 +3,12 @@ package com.genersoft.iot.vmp.vmanager.channel; import com.genersoft.iot.vmp.common.CommonGbChannel; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.conf.security.JwtUtils; +import com.genersoft.iot.vmp.gb28181.bean.command.PTZCommand; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.service.ICommonGbChannelService; -import com.genersoft.iot.vmp.service.bean.*; +import com.genersoft.iot.vmp.service.bean.DeviceType; +import com.genersoft.iot.vmp.service.bean.IndustryCodeType; +import com.genersoft.iot.vmp.service.bean.NetworkIdentificationType; import com.genersoft.iot.vmp.vmanager.bean.*; import com.genersoft.iot.vmp.vmanager.channel.bean.ShareCommonChannelListResult; import com.genersoft.iot.vmp.vmanager.channel.bean.ShareCommonGbChannelParam; @@ -282,4 +285,72 @@ public class CommonChannelController { } return commonGbChannelService.getShareChannelList(platformId, page, count, query, type, online); } + + @Operation(summary = "云台控制", security = @SecurityRequirement(name = JwtUtils.HEADER)) + @Parameter(name = "channelDeviceId", description = "通用通道国标编号", required = true) + @Parameter(name = "command", description = "控制指令,允许值: left, right, up, down, upleft, upright, downleft, downright, zoomin, zoomout, stop", required = true) + @Parameter(name = "horizonSpeed", description = "水平速度", required = true) + @Parameter(name = "verticalSpeed", description = "垂直速度", required = true) + @Parameter(name = "zoomSpeed", description = "缩放速度", required = true) + @RequestMapping(value = "/ptz", method = {RequestMethod.GET, RequestMethod.POST}) + public void ptz(String channelDeviceId, String command, int horizonSpeed, int verticalSpeed, int zoomSpeed){ + + if (logger.isDebugEnabled()) { + logger.debug("通用通道云台控制 API调用,channelDeviceId:{} ,command:{} ,horizonSpeed:{} ,verticalSpeed:{} " + + ",zoomSpeed:{}", channelDeviceId, command, horizonSpeed, verticalSpeed, zoomSpeed); + } + assert !ObjectUtils.isEmpty(channelDeviceId); + + CommonGbChannel channel = commonGbChannelService.getChannel(channelDeviceId); + assert channel != null; + + PTZCommand ptzCommand = new PTZCommand(); + ptzCommand.setzSpeed(zoomSpeed); + ptzCommand.setxSpeed(horizonSpeed); + ptzCommand.setySpeed(verticalSpeed); + switch (command){ + case "left": + ptzCommand.setLeft(true); + break; + case "right": + ptzCommand.setRight(true); + break; + case "up": + ptzCommand.setUp(true); + break; + case "down": + ptzCommand.setDown(true); + break; + case "upleft": + ptzCommand.setUp(true); + ptzCommand.setLeft(true); + break; + case "upright": + ptzCommand.setUp(true); + ptzCommand.setRight(true); + break; + case "downleft": + ptzCommand.setDown(true); + ptzCommand.setLeft(true); + break; + case "downright": + ptzCommand.setDown(true); + ptzCommand.setRight(true); + break; + case "zoomin": + ptzCommand.setIn(true); + break; + case "zoomout": + ptzCommand.setOut(true); + break; + case "stop": + ptzCommand.setzSpeed(0); + ptzCommand.setxSpeed(0); + ptzCommand.setySpeed(0); + break; + default: + break; + } + commonGbChannelService.ptzControl(channel, ptzCommand); + } }