package com.ruoyi.device.camera.controller; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.IArdCamerasService; import com.ruoyi.device.camera.service.ICameraSdkService; import com.ruoyi.device.noguidezone.domain.ArdCameraNoGuideZone; import com.ruoyi.device.noguidezone.service.IArdCameraNoGuideZoneService; import com.ruoyi.utils.gis.GisUtil; import com.ruoyi.utils.gis.Point; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @Description: 相机通用SDK接口 * @ClassName: CameraSdkController * @Author: 刘苏义 * @Date: 2023年10月14日17:02:56 **/ @Api(tags = "相机通用SDK接口") @Controller @RequestMapping("/cameraSdk") @Anonymous public class CameraSdkController extends BaseController { @Resource private ICameraSdkService cameraSdkService; @Resource private IArdCamerasService ardCamerasService; @Autowired private IArdCameraNoGuideZoneService ardCameraNoGuideZoneService; @RequestMapping("/preview") private String preview() { return "preview"; } @RequestMapping("/index") private String index() { return "test"; } @GetMapping("/list") public @ResponseBody AjaxResult list(ArdCameras ardCamera) { List list = ardCamerasService.selectArdCamerasListNoDataScope(ardCamera); return AjaxResult.success("相机列表:", list); } @ApiOperation("获取码流压缩参数") @PostMapping("/getVideoCompressionCfg") @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) @Log(title = "获取码流压缩参数", businessType = BusinessType.CONTROL) public @ResponseBody AjaxResult getVideoCompressionCfg(@RequestBody CameraCmd cmd) { return AjaxResult.success(cameraSdkService.getVideoCompressionCfg(cmd)); } @ApiOperation("在线状态") @PostMapping("/state") @ApiOperationSupport(includeParameters = {"cmd.cameraId"}) @Log(title = "在线状态", businessType = BusinessType.CONTROL) public @ResponseBody AjaxResult getOnlineState(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); boolean onLine = cameraSdkService.isOnLine(cmd); return AjaxResult.success(onLine); } @ApiOperation(value = "云台控制", notes = "Code:1-左上 2-上 3-右上 4-左 5-巡航 6-右 7-左下 8-下 9-右下 10-焦距变大 11-焦距变小\n" + "12-焦点前调 13-焦点后调 14-光圈扩大 15-光圈缩小 16-雨刷开启") @PostMapping("/PTZControlWithSpeed") @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.speed", "cmd.enable", "cmd.code"}) @Log(title = "云台控制", businessType = BusinessType.CONTROL) public @ResponseBody AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.pTZControl(cmd); } @ApiOperation("调用预置点") @PostMapping("/gotoPreset") @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.presetIndex"}) @Log(title = "调用预置点", businessType = BusinessType.CONTROL) public @ResponseBody AjaxResult gotoPreset(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.gotoPreset(cmd); } @ApiOperation("设置预置点") @PostMapping("/setPreset") @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.presetIndex"}) @Log(title = "设置预置点", businessType = BusinessType.CONTROL) public @ResponseBody AjaxResult setPreset(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.setPreset(cmd); } @ApiOperation("获取聚焦值") @PostMapping("/getFocusPos") @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) @Log(title = "获取聚焦值", businessType = BusinessType.CONTROL) public @ResponseBody AjaxResult getFocusPos(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.getFocusPos(cmd); } @ApiOperation("设置聚焦值") @PostMapping("/setFocusPos") @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.dwFocusPos"}) @Log(title = "设置聚焦值", businessType = BusinessType.CONTROL) public @ResponseBody AjaxResult setFocusPos(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.setFocusPos(cmd); } @ApiOperation("获取PTZ") @PostMapping("/getPTZ") @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) @Log(title = "获取PTZ", businessType = BusinessType.CONTROL) public @ResponseBody AjaxResult getPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.getPtz(cmd); } @ApiOperation("获取PTZ范围") @PostMapping("/getPTZScope") @Log(title = "获取PTZ范围", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) public @ResponseBody AjaxResult getPTZScope(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.getPtzScope(cmd); } @ApiOperation("设置PTZ") @PostMapping("/setPTZ") @Log(title = "设置PTZ", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.ptzMap"}) public @ResponseBody AjaxResult setPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.setPtz(cmd); } @ApiOperation("指向目标") @PostMapping("/setTargetPosition") @Log(title = "指向目标", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.targetPosition"}) public @ResponseBody AjaxResult setTargetPosition(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); //拦截手动引导 ArdCameraNoGuideZone ardCameraNoGuideZone = new ArdCameraNoGuideZone(); ardCameraNoGuideZone.setCameraId(cmd.getCameraId()); ardCameraNoGuideZone.setEnabled("1"); //获取当前相机的禁引可视域列表 List ardCameraNoGuideZones = ardCameraNoGuideZoneService.selectArdCameraNoGuideZoneList(ardCameraNoGuideZone); if (ardCameraNoGuideZones.size() > 0) { //获取到当前相机的坐标集合 for (ArdCameraNoGuideZone zone : ardCameraNoGuideZones) { String[] parts = zone.getPoi().split(","); List pointList = new ArrayList<>(); for (int i = 0; i < parts.length; i += 3) { Point point = new Point(); point.setLongitude(Double.valueOf(parts[i])); point.setLatitude(Double.valueOf(parts[i + 1])); pointList.add(point); } double lon = cmd.getTargetPosition()[0]; double lat = cmd.getTargetPosition()[1]; Point targetPoint = new Point(lon, lat); //判断引导目标是否在坐标集合组成的多边形内 boolean inPolygon = GisUtil.isInPolygon(targetPoint, pointList); if (inPolygon) { return AjaxResult.error("引导坐标位于禁引可视域内"); } } } return cameraSdkService.guideTargetPosition(cmd); } @ApiOperation("指向目标井") @PostMapping("/setTargetWell") @Log(title = "指向目标井", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.wellId"}) public @ResponseBody AjaxResult setTargetWell(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.guideTargetWell(cmd); } @ApiOperation("设置零方位角") @PostMapping("/setZeroPTZ") @Log(title = "设置零方位角", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) public @ResponseBody AjaxResult setZeroPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.setZeroPtz(cmd); } @ApiOperation("设置锁定") @PostMapping("/setPTZLock") @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.expired"}) @Log(title = "设置锁定", businessType = BusinessType.CONTROL) public @ResponseBody AjaxResult setPTZLock(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.controlLock(cmd); } @ApiOperation("设置解锁") @PostMapping("/setPTZUnLock") @ApiOperationSupport(includeParameters = {"cmd.cameraId"}) @Log(title = "设置解锁", businessType = BusinessType.CONTROL) public @ResponseBody AjaxResult setPTZUnLock(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.controlUnLock(cmd); } @ApiOperation("获取云台锁定信息") @PostMapping("/getPTZLockInfo") @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) @Log(title = "获取云台锁定信息", businessType = BusinessType.CONTROL) public @ResponseBody AjaxResult getPTZLockInfo(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); AjaxResult ajaxResult = cameraSdkService.getPTZLockInfo(cmd); Integer byWorkMode = (Integer) ajaxResult.get("msg"); if (byWorkMode == 0) { return AjaxResult.success("云台锁定状态:解锁"); } else if (byWorkMode == 1) { return AjaxResult.success("云台锁定状态:锁定"); } else { return AjaxResult.error("云台锁定状态:失败"); } } @ApiOperation("透雾开关") @PostMapping("/defogcfg") @Log(title = "透雾开关", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"}) public @ResponseBody AjaxResult defogcfg(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.controlDefogcfg(cmd); } @ApiOperation("红外开关") @PostMapping("/infrarecfg") @Log(title = "红外开关", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"}) public @ResponseBody AjaxResult infrarecfg(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.controlInfrarecfg(cmd); } @ApiOperation(value = "手动/自动聚焦", notes = "true手动flase自动") @PostMapping("/focusMode") @Log(title = "手动/自动聚焦", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"}) public @ResponseBody AjaxResult enableFocusMode(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.controlFocusMode(cmd); } @ApiOperation(value = "获取聚焦模式", notes = "1手动2自动") @PostMapping("/getFocusMode") @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) public @ResponseBody AjaxResult getFocusMode(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.getFocusMode(cmd); } @ApiOperation("云台加热") @PostMapping("/heateRpwron") @Log(title = "云台加热", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"}) public @ResponseBody AjaxResult heateRpwron(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.controlPTHeateRpwron(cmd); } @ApiOperation("镜头加热") @PostMapping("/cameraDeicing") @Log(title = "镜头加热", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"}) public @ResponseBody AjaxResult cameraDeicing(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.controlCameraDeicing(cmd); } @ApiOperation("相机抓图") @PostMapping("/picCutCate") @Log(title = "相机抓图", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) public @ResponseBody AjaxResult picCutCate(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); String path = cameraSdkService.picCutCate(cmd); return toAjaxString(path, "相机抓图"); } @ApiOperation("本地抓图") @PostMapping("/localCapture") @Log(title = "相机抓图", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) public @ResponseBody void localCapture(@RequestBody CameraCmd cmd, HttpServletResponse response) throws IOException { cmd.setOperator(SecurityUtils.getUserId()); response.setContentType("image/jpeg"); AjaxResult result = cameraSdkService.localCapture(cmd); OutputStream outputStream = response.getOutputStream(); byte[] data = (byte[]) result.get("data"); outputStream.write(data); } @ApiOperation("获取相机架设参数") @PostMapping("/getGisInfo") @Log(title = "获取相机架设参数", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) public @ResponseBody AjaxResult getGisInfo(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.getGisInfo(cmd); } //@ApiOperation("录像") @PostMapping("/record") @Log(title = "手动录像开始", businessType = BusinessType.CONTROL) //@ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo", "cmd.enable"}) public @ResponseBody AjaxResult record(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); String url = cameraSdkService.record(cmd); return AjaxResult.success(url); } //@ApiOperation("手动录像开始") @PostMapping("/recordStart") @Log(title = "手动录像开始", businessType = BusinessType.CONTROL) //@ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) public @ResponseBody AjaxResult recordStart(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); boolean b = cameraSdkService.recordStart(cmd); return toAjax(b); } //@ApiOperation("手动录像停止") @PostMapping("/recordStop") @Log(title = "手动录像停止", businessType = BusinessType.CONTROL) //@ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.recordBucketName", "cmd.recordObjectName"}) public @ResponseBody AjaxResult recordStop(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); String url = cameraSdkService.recordStopToMinio(cmd); return AjaxResult.success(url); } @ApiOperation("本地录像开始") @PostMapping("/localRecordStart") @Log(title = "本地录像开始", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) public @ResponseBody AjaxResult localRecordStart(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return cameraSdkService.localRecordStart(cmd); } @ApiOperation("本地录像停止") @PostMapping("/localRecordStop") @Log(title = "本地录像停止", businessType = BusinessType.CONTROL) @ApiOperationSupport(includeParameters = {"cmd.cameraId", "cmd.chanNo"}) public @ResponseBody void localRecordStop(@RequestBody CameraCmd cmd, HttpServletResponse response) throws IOException { cmd.setOperator(SecurityUtils.getUserId()); response.setContentType("video/mp4"); AjaxResult result = cameraSdkService.localRecordStop(cmd); byte[] recordBytes = (byte[]) result.get("data"); OutputStream outputStream = response.getOutputStream(); outputStream.write(recordBytes); } }