package com.ard.work.device.camera.controller; import com.ard.common.core.domain.R; import com.ard.common.core.web.controller.BaseController; import com.ard.common.core.web.domain.AjaxResult; import com.ard.common.log.annotation.Log; import com.ard.common.log.enums.BusinessType; import com.ard.common.security.annotation.InnerAuth; import com.ard.common.security.utils.SecurityUtils; import com.ard.work.api.domian.CameraCmd; import com.ard.work.api.domian.PtzDto; import com.ard.work.api.domian.VideoCompressionCfg; import com.ard.work.sdk.model.PtzScope; import com.ard.work.sdk.service.CameraSDKService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.io.OutputStream; /** * @Description: 相机通用SDK接口 * @ClassName: CameraSdkController * @Author: 刘苏义 * @Date: 2023年10月14日17:02:56 **/ @Tag(name = "相机通用SDK接口") @RestController @RequestMapping("/cameraSdk") public class CameraSdkController extends BaseController { @Resource private CameraSDKService cameraSDK; @Operation(summary = "获取码流压缩参数") @PostMapping("/getVideoCompressionCfg") public R getVideoCompressionCfg(@RequestBody CameraCmd cmd) { return R.ok(cameraSDK.getVideoCompressionCfg(cmd)); } @Operation(summary = "在线状态") @PostMapping("/state") public AjaxResult getOnlineState(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); boolean onLine = cameraSDK.isOnLine(cmd); return AjaxResult.success(onLine); } @Operation(summary = "云台控制", description = "Code:1-左上 2-上 ... 16-雨刷开启") @PostMapping("/PTZControlWithSpeed") public AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); // 调用统一 SDK Boolean success = cameraSDK.pTZControl(cmd); // 根据返回值返回 AjaxResult return Boolean.TRUE.equals(success) ? AjaxResult.success("云台控制成功") : AjaxResult.warn("云台控制失败"); } @Operation(summary = "调用预置点") @PostMapping("/gotoPreset") public AjaxResult gotoPreset(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); boolean success = cameraSDK.gotoPreset(cmd); return success ? AjaxResult.success("调用预置点成功") : AjaxResult.warn("调用预置点失败"); } @Operation(summary = "设置预置点") @PostMapping("/setPreset") public AjaxResult setPreset(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); boolean success = cameraSDK.setPreset(cmd); return success ? AjaxResult.success("设置预置点成功") : AjaxResult.warn("设置预置点失败"); } @Operation(summary = "获取聚焦值") @PostMapping("/getFocusPos") public AjaxResult getFocusPos(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); Integer focus = cameraSDK.getFocusPos(cmd); if (focus != null) { return AjaxResult.success("获取聚焦值成功", focus); } else { return AjaxResult.warn("获取聚焦值失败"); } } @Operation(summary = "设置聚焦值") @PostMapping("/setFocusPos") public AjaxResult setFocusPos(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); // 调用底层 SDK(返回 Boolean) return cameraSDK.setFocusPos(cmd) ? AjaxResult.success("设置聚焦值成功") : AjaxResult.warn("设置聚焦值失败"); } @InnerAuth @PostMapping("/getPTZ/rpc") public R getPTZRpc(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); return R.ok(cameraSDK.getPtz(cmd)); } @Operation(summary = "获取PTZ") @PostMapping("/getPTZ") public AjaxResult getPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); PtzDto ptzDto = cameraSDK.getPtz(cmd); if (ptzDto == null) { return AjaxResult.error("获取PTZ失败"); } return AjaxResult.success(ptzDto); } @Operation(summary = "获取PTZ范围") @PostMapping("/getPTZScope") public AjaxResult getPTZScope(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); PtzScope ptzScope = cameraSDK.getPtzScope(cmd); return ptzScope != null ? AjaxResult.success(ptzScope) : AjaxResult.error("获取PTZ范围失败"); } @Operation(summary = "设置PTZ") @PostMapping("/setPTZ") public AjaxResult setPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); return cameraSDK.setPtz(cmd) ? AjaxResult.success("设置PTZ成功") : AjaxResult.error("设置PTZ失败"); } @Operation(summary = "3D定位") @PostMapping("/set3DPosition") public AjaxResult set3DPosition(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); return cameraSDK.set3DPosition(cmd) ? AjaxResult.success("3D定位成功") : AjaxResult.error("3D定位失败"); } @InnerAuth @PostMapping("/setPTZ/rpc") public R setPTZRpc(@RequestBody CameraCmd cmd) { // cmd.setOperator(SecurityUtils.getUserId().toString()); return R.ok(cameraSDK.setPtz(cmd)); } @Operation(summary = "设置零方位角") @PostMapping("/setZeroPTZ") public AjaxResult setZeroPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); return cameraSDK.setZeroPtz(cmd) ? AjaxResult.success("设置零方位角成功") : AjaxResult.error("设置零方位角失败"); } @Operation(summary = "透雾开关") @PostMapping("/defogcfg") public AjaxResult controlDefog(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); boolean success = cameraSDK.controlDefog(cmd); return success ? AjaxResult.success("透雾切换成功") : AjaxResult.warn("透雾切换失败"); } @Operation(summary = "查询透雾状态") @PostMapping("/isEnableDefog") public AjaxResult isEnableDefog(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); // SDK 层返回 Boolean Boolean enabled = cameraSDK.isEnableDefog(cmd); return AjaxResult.success(enabled ? "开启" : "关闭", enabled); } @Operation(summary = "红外开关") @PostMapping("/infrarecfg") public AjaxResult controlInfrared(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); boolean success = cameraSDK.controlInfrared(cmd); return success ? AjaxResult.success("红外切换成功") : AjaxResult.warn("红外切换失败"); } @Operation(summary = "查询红外状态") @PostMapping("/isEnableInfrared") public AjaxResult isEnableInfrared(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); // SDK 层返回 Boolean Boolean enabled = cameraSDK.isEnableInfrared(cmd); return AjaxResult.success(enabled ? "开启" : "关闭", enabled); } @Operation(summary = "手动/自动聚焦", description = "true 手动 false 自动") @PostMapping("/focusMode") public AjaxResult enableFocusMode(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); Boolean enabled = cameraSDK.controlFocusMode(cmd); return AjaxResult.success(enabled ? "设置成功" : "设置失败"); } @Operation(summary = "获取聚焦模式", description = "true 手动 false 自动") @PostMapping("/getFocusMode") public AjaxResult getFocusMode(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); Boolean enabled = cameraSDK.getFocusMode(cmd); return AjaxResult.success(enabled ? "手动" : "自动", enabled); } @Operation(summary = "云台加热") @PostMapping("/controlPTHeater") public AjaxResult controlPTHeater(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); boolean success = cameraSDK.controlPTHeater(cmd); return success ? AjaxResult.success("云台加热成功") : AjaxResult.warn("云台加热失败"); } @Operation(summary = "镜头加热") @PostMapping("/cameraDeicing") public AjaxResult cameraDeicing(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); boolean success = cameraSDK.controlCameraDeicing(cmd); return success ? AjaxResult.success("镜头加热成功") : AjaxResult.warn("镜头加热失败"); } @Operation(summary = "相机抓图") @PostMapping("/picCutCate") public R picCutCate(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); String path = cameraSDK.picCutCate(cmd); return R.ok(path, "相机抓图成功"); } @InnerAuth @PostMapping("/picCutCate/rpc/{bucketName}/{objectName}") public R picCutCateRpc(@RequestBody CameraCmd cmd, @PathVariable("bucketName") String bucketName, @PathVariable("objectName") String objectName) { // cmd.setOperator(SecurityUtils.getUserId().toString()); String path = cameraSDK.picCutCate(cmd, bucketName, objectName).toString(); return R.ok(path, "相机抓图"); } @Operation(summary = "本地抓图") @PostMapping("/localCapture") public void localCapture(@RequestBody CameraCmd cmd, HttpServletResponse response) throws IOException { cmd.setOperator(SecurityUtils.getUserId().toString()); response.setContentType("image/jpeg"); byte[] data = cameraSDK.localCapture(cmd); OutputStream outputStream = response.getOutputStream(); outputStream.write(data); } @Operation(summary = "获取相机架设参数") @PostMapping("/getGisInfo") public AjaxResult getGisInfo(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); return AjaxResult.success(cameraSDK.getGisInfo(cmd)); } @Operation(summary = "云台锁定") @PostMapping("/setPTZLockInfo") public AjaxResult setPTZLockInfo(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); boolean success = cameraSDK.setPTZLockInfo(cmd); return success ? AjaxResult.success("云台锁定成功") : AjaxResult.warn("云台锁定失败"); } @Operation(summary = "云台锁定状态") @PostMapping("/getPTZLockInfo") public AjaxResult getPTZLockInfo(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); boolean success = cameraSDK.getPTZLockInfo(cmd); return AjaxResult.success(success ? "云台锁定" : "云台未锁定"); } //@Operation(summary = "录像") @PostMapping("/record") public AjaxResult record(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); String url = cameraSDK.record(cmd); return AjaxResult.success(url); } @InnerAuth @PostMapping("/recordStart/rpc") public R recordStartRpc(@RequestBody CameraCmd cmd) { boolean b = cameraSDK.recordStart(cmd); return R.ok(b); } @InnerAuth @PostMapping("/recordStop/rpc") public R recordStopRpc(@RequestBody CameraCmd cmd) { String url = cameraSDK.recordStop(cmd); return R.ok(url); } @Operation(summary = "录像开始") @PostMapping("/recordStart") public AjaxResult recordStart(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); boolean b = cameraSDK.recordStart(cmd); return toAjax(b); } @Operation(summary = "录像停止") @PostMapping("/recordStop") public AjaxResult recordStop(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); String url = cameraSDK.recordStop(cmd); return AjaxResult.success(url); } @Operation(summary = "引导目标位置") @PostMapping("/guideTargetPosition") public R guideTargetPosition(@RequestBody CameraCmd cmd) { if (cmd.getOperator() == null) { cmd.setOperator(SecurityUtils.getUserId().toString()); } Double correctPitch = cameraSDK.correctPitch(cmd); return cameraSDK.guideTargetPosition(cmd) ? R.ok(correctPitch, "引导成功") : R.fail(correctPitch, "引导失败"); } @Operation(summary = "获取相机架设参数") @PostMapping("/getCameraVideoLable") public AjaxResult getCameraVideoLable(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId().toString()); //return AjaxResult.success(sdk.getGisInfo(cmd)); return cameraSDK.getCameraVideoLable(cmd); } }