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<VideoCompressionCfg> 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<PtzDto> 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<Boolean> 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<String> 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<Boolean> recordStartRpc(@RequestBody CameraCmd cmd) {
|
boolean b = cameraSDK.recordStart(cmd);
|
return R.ok(b);
|
}
|
|
@InnerAuth
|
@PostMapping("/recordStop/rpc")
|
public R<String> 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);
|
}
|
}
|