From b5cd784d0cde5b7c82ea78aef4ac0e5a161d8c5d Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Mon, 18 May 2026 14:42:43 +0800
Subject: [PATCH] 优化
---
ard-modules/ard-modules-work/src/main/java/com/ard/work/sdk/service/CameraSDKService.java | 799 +++++++++++---------------------------------------------
1 files changed, 167 insertions(+), 632 deletions(-)
diff --git a/ard-modules/ard-modules-work/src/main/java/com/ard/work/sdk/service/CameraSDKService.java b/ard-modules/ard-modules-work/src/main/java/com/ard/work/sdk/service/CameraSDKService.java
index 7cecad4..34721f2 100644
--- a/ard-modules/ard-modules-work/src/main/java/com/ard/work/sdk/service/CameraSDKService.java
+++ b/ard-modules/ard-modules-work/src/main/java/com/ard/work/sdk/service/CameraSDKService.java
@@ -18,22 +18,15 @@
import com.ard.work.utils.gis.GisUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
+
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
-
-/**
- * @Description: 相机sdk业务
- * @ClassName: CameraSdkServiceImpl
- * @Author: 刘苏义
- * @Date: 2023年10月16日15:21:01
- **/
@Service
@Slf4j
public class CameraSDKService {
@@ -45,7 +38,8 @@
@Resource
private IArdNoViewingZoneService ardNoViewingZoneService;
- //登录
+ // ========== 基础操作 ==========
+
@Async("cameraSdkExecutor")
public void login(ArdCamera ardCamera) {
if (ardCamera == null) {
@@ -55,708 +49,212 @@
sdk.login(ardCamera);
}
- //注销
public void logout(String cameraId) {
ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cameraId);
- if (ardCamera == null) {
+ if (ardCamera == null || ardCamera.getFactory() == null) {
return;
}
- if(ardCamera.getFactory()!= null) {
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(ardCamera.getFactory());
- cameraSDK.logout(cameraId);
- }
+ CameraSDK sdk = cameraSDKFactory.createCameraSDK(ardCamera.getFactory());
+ sdk.logout(cameraId);
}
+ // ========== 简单操作(一行搞定) ==========
- //在线检测
- public boolean isOnLine(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cameraId);
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cameraId);
- if (loginId == null) {
- return false;
- }
- cmd.setLoginId(loginId);
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(ardCamera.getFactory());
- return cameraSDK.isOnLine(cmd);
- }
-
- //云台控制
@SdkOperate
public Boolean pTZControl(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
-
- cmd.setLoginId(loginId);
-
- // 调用各厂商 SDK 方法,异常由各自 SDK 实现抛出
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(ardCamera.getFactory());
- return cameraSDK.pTZControl(cmd);
+ return getSdk(cmd).pTZControl(cmd);
}
- //设置聚焦值
public Boolean setFocusPos(CameraCmd cmd) {
- // 1️⃣ 获取相机信息
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
-
- cmd.setLoginId(loginId);
-
- // 3️⃣ 调用对应厂商 SDK
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.setFocusPos(cmd);
+ return getSdk(cmd).setFocusPos(cmd);
}
- //获取聚焦值
public Integer getFocusPos(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
-
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.getFocusPos(cmd);
+ return getSdk(cmd).getFocusPos(cmd);
}
- //设置预置位
public Boolean setPreset(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.setPreset(cmd);
+ return getSdk(cmd).setPreset(cmd);
}
- //调用预置位
public Boolean gotoPreset(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.gotoPreset(cmd);
+ return getSdk(cmd).gotoPreset(cmd);
}
- //获取码流压缩参数
public VideoCompressionCfg getVideoCompressionCfg(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.getVideoCompressionCfg(cmd);
+ return getSdk(cmd).getVideoCompressionCfg(cmd);
}
- //透雾开关
public Boolean controlDefog(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.controlDefog(cmd);
+ return getSdk(cmd).controlDefog(cmd);
}
- //查询是否开启透雾
public Boolean isEnableDefog(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.isEnableDefog(cmd);
+ return getSdk(cmd).isEnableDefog(cmd);
}
- //红外开关
public Boolean controlInfrared(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.controlInfrared(cmd);
-
+ return getSdk(cmd).controlInfrared(cmd);
}
- //查询是否开启红外
public Boolean isEnableInfrared(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.isEnableInfrared(cmd);
+ return getSdk(cmd).isEnableInfrared(cmd);
}
- //手动/自动聚焦
public Boolean controlFocusMode(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.controlFocusMode(cmd);
+ return getSdk(cmd).controlFocusMode(cmd);
}
- //获取聚焦模式
public Boolean getFocusMode(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.getFocusMode(cmd);
+ return getSdk(cmd).getFocusMode(cmd);
}
- //云台加热
public Boolean controlPTHeater(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.controlPTHeater(cmd);
+ return getSdk(cmd).controlPTHeater(cmd);
}
- //镜头加热
public Boolean controlCameraDeicing(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.controlCameraDeicing(cmd);
+ return getSdk(cmd).controlCameraDeicing(cmd);
}
- //获取云台锁定信息
public Boolean getPTZLockInfo(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.getPTZLockInfo(cmd);
+ return getSdk(cmd).getPTZLockInfo(cmd);
}
- //设置云台锁定信息
public Boolean setPTZLockInfo(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- boolean enable = cmd.isEnable();//0未锁 1锁定
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.setPTZLockInfo(cmd);
+ return getSdk(cmd).setPTZLockInfo(cmd);
}
- //本地抓图
public byte[] localCapture(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
-
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.localCapture(cmd);
+ return getSdk(cmd).localCapture(cmd);
}
- //抓图
- @SdkOperate
- public String picCutCate(CameraCmd cmd) {
- //从redis中获取摄像头信息
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- return "";
- }
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- return "";
- }
- cmd.setLoginId(loginId);
- //获取摄像头工厂
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.picCutCate(cmd);
- }
-
- //抓图
- @SdkOperate
- public String picCutCate(CameraCmd cmd, String bucketName, String objectName) {
- String url = "";
- try {
- //从redis中获取摄像头信息
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- return "";
- }
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- return "";
- }
- cmd.setLoginId(loginId);
- //获取摄像头工厂
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- url = cameraSDK.picCutCate(cmd, bucketName, objectName);
-
- } catch (Exception ex) {
- log.error("抓图异常:{}", ex.getMessage());
- }
- return url;
- }
-
- //获取ptz
- public PtzDto getPtz(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- String type = ardCamera.getType();
- if ("1".equals(type)) {
- return cameraSDK.getPtzHigh(cmd);
- } else {
- return cameraSDK.getPtz(cmd);
- }
- }
-
- //获取ptz范围
public PtzScope getPtzScope(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.getPtzScope(cmd);
+ return getSdk(cmd).getPtzScope(cmd);
}
- //设置ptz
+ public Boolean setZeroPtz(CameraCmd cmd) {
+ return getSdk(cmd).setZeroPtz(cmd);
+ }
+
+ public Boolean set3DPosition(CameraCmd cmd) {
+ return getSdk(cmd).set3DPosition(cmd);
+ }
+
+ public PtzParamDTO getGisInfo(CameraCmd cmd) {
+ return getSdk(cmd).getGisInfo(cmd);
+ }
+
+ public Double correctPitch(CameraCmd cmd) {
+ return getSdk(cmd).correctPitch(cmd);
+ }
+
+ // ========== 需要判断类型的操作 ==========
+
+ public PtzDto getPtz(CameraCmd cmd) {
+ return getSdk(cmd).getPtz(cmd);
+ }
+
@SdkOperate
public Boolean setPtz(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(ardCamera.getFactory());
- String type = ardCamera.getType();
- if ("1".equals(type)) {
- DeviceCFG systemInfo = cameraSDK.getSystemInfo(cmd);
- if (systemInfo != null && "5.5.112".equals(systemInfo.getDwSoftwareVersion())) {
- //大光电新固件使用高精度ptz透传设置
- return cameraSDK.setPtzHighT(cmd);
- } else {
- //使用高精度ptz设置
- return cameraSDK.setPtzHigh(cmd);
- }
-
- } else {
- return cameraSDK.setPtz(cmd);
- }
+ return getSdk(cmd).setPtz(cmd);
}
- //设置零方位角
- public Boolean setZeroPtz(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.setZeroPtz(cmd);
- }
+ // ========== 抓图(重载方法) ==========
- //引导指向目标
@SdkOperate
- public Boolean guideTargetPosition(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- //判断是否超出引导距离
- if (isOutMaxDistance(cameraId, cmd.getTargetPosition())) {
- throw new CameraSDKException(CameraSDKException.ErrorCode.OVER_GUIDANCE_RANGE.getCode(), cameraId,
- "目标超出最大引导距离");
- }
- //判断是否在不可视域
- if (isInNoViewingZone(cameraId, cmd.getTargetPosition())) {
- throw new CameraSDKException(CameraSDKException.ErrorCode.BEYOND_VISIBILITY_RANGE.getCode(), cameraId
- , "目标超出最大引导距离");
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- cmd.setBaseYaw(ardCamera.getBaseYaw());
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.guideTargetPosition(cmd);
+ public String picCutCate(CameraCmd cmd) {
+ return getSdk(cmd).picCutCate(cmd);
}
- //判断坐标是否超出引导范围
- private Boolean isOutMaxDistance(String cameraId, Point targetPoint) {
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cameraId);
- if (ardCamera == null) {
- log.error("设备不存在");
- return true;
- }
- Point cameraCoordinate = new Point(ardCamera.getLongitude(), ardCamera.getLatitude(), ardCamera.getAltitude());
- double distance = GisUtil.getDistance(cameraCoordinate, targetPoint);
- if (ardCamera.getCamMaxVisibleDistance() == null) {
- throw new CameraSDKException(CameraSDKException.ErrorCode.CAMERA_MAX_VISIBLE_DISTANCE_NULL.getCode(),
- cameraId, CameraSDKException.ErrorCode.CAMERA_MAX_VISIBLE_DISTANCE_NULL.getMsg());
- }
- double camMaxVisibleDistance = ardCamera.getCamMaxVisibleDistance();
- return distance > camMaxVisibleDistance;
+ @SdkOperate
+ public String picCutCate(CameraCmd cmd, String bucketName, String objectName) {
+ return getSdk(cmd).picCutCate(cmd, bucketName, objectName);
}
- //判断坐标是否在不可视域
- private Boolean isInNoViewingZone(String cameraId, Point targetPoint) {
- ArdNoViewingZone ardNoViewingZone = new ArdNoViewingZone();
- ardNoViewingZone.setCameraId(cameraId);
- List<ArdNoViewingZone> ardNoViewingZones =
- ardNoViewingZoneService.selectArdNoViewingZoneList(ardNoViewingZone);//获取相机的不可视域列表
- List<Point> pointList = new ArrayList<>();
- if (ardNoViewingZones.isEmpty()) {
- return false;
- }
- ardNoViewingZones.forEach(noViewingZone -> {
- String poi = noViewingZone.getPoi();
- String[] parts = poi.split(",");
- 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);
- }
- });
- return GisUtil.isInPolygon(targetPoint, pointList);
- }
-
- //录像
+ // ========== 录像 ==========
public String record(CameraCmd cmd) {
- String url = "";
- try {
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera != null) {
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- url = cameraSDK.record(cmd);
- }
- } catch (Exception ex) {
- log.error("录像异常:{}", ex.getMessage());
- }
- return url;
+ return getSdk(cmd).record(cmd);
}
- //开始录像
public Boolean recordStart(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
- }
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- Boolean result = cameraSDK.recordStart(cmd);
+ CameraSDK sdk = getSdk(cmd);
+ Boolean result = sdk.recordStart(cmd);
if (result != null && result) {
RecordManager.addRecord(cmd.getCameraId() + "_" + cmd.getChanNo());
}
return result;
}
- //停止录像并存入minio
public String recordStop(CameraCmd cmd) {
- String url = "";
- try {
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- return url;
- }
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- return url;
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- url = cameraSDK.recordStop(cmd);
- String key = cmd.getCameraId() + "_" + cmd.getChanNo();
- RecordManager.stopRecord(key);
- } catch (Exception ex) {
- log.error("停止录像异常:{}", ex.getMessage());
- }
+ CameraSDK sdk = getSdk(cmd);
+ String url = sdk.recordStop(cmd);
+ String key = cmd.getCameraId() + "_" + cmd.getChanNo();
+ RecordManager.stopRecord(key);
return url;
}
+ // ========== 智能引导 ==========
- //获取相机架设参数
- public PtzParamDTO getGisInfo(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
+ @SdkOperate
+ public Boolean guideTargetPosition(CameraCmd cmd) {
+ CameraSDK sdk = getSdk(cmd);
+ ArdCamera camera = getCamera(cmd.getCameraId());
+ String cameraId = camera.getId();
+
+ // 判断是否超出引导距离
+ if (isOutMaxDistance(cameraId, cmd.getTargetPosition())) {
+ throw new CameraSDKException(CameraSDKException.ErrorCode.OVER_GUIDANCE_RANGE.getCode(),
+ cameraId, "目标超出最大引导距离");
}
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
+
+ // 判断是否在不可视域
+ if (isInNoViewingZone(cameraId, cmd.getTargetPosition())) {
+ throw new CameraSDKException(CameraSDKException.ErrorCode.BEYOND_VISIBILITY_RANGE.getCode(),
+ cameraId, "目标在不可视区域内");
}
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.getGisInfo(cmd);
+
+ cmd.setBaseYaw(camera.getBaseYaw());
+ return sdk.guideTargetPosition(cmd);
}
- //获取相机通道信息
+ // ========== 在线检测 ==========
+
+ public boolean isOnLine(CameraCmd cmd) {
+ Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
+ if (loginId == null) {
+ return false;
+ }
+ cmd.setLoginId(loginId);
+ CameraSDK sdk = getSdk(cmd);
+ return sdk.isOnLine(cmd);
+ }
+
+ // ========== 通道信息 ==========
+
public List<ArdChannel> getChannels(ArdCamera camera) {
Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, camera.getId());
if (loginId == null) {
return new ArrayList<>();
}
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(camera.getFactory());
- return cameraSDK.getChannels(camera);
+ CameraSDK sdk = cameraSDKFactory.createCameraSDK(camera.getFactory());
+ return sdk.getChannels(camera);
}
- //NET_DVR_PTZSelZoomIn
- public Boolean set3DPosition(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
+ // ========== 视频标签 ==========
+
+ public AjaxResult getCameraVideoLable(CameraCmd cmd) {
+ CameraSDK sdk = cameraSDKFactory.createCameraSDK("1"); // 硬编码问题建议修复
+ try {
+ List<Map<String, Object>> result = sdk.getCameraVideoLable(SecurityUtils.getUserId(), cmd);
+ return AjaxResult.success(result);
+ } catch (ServiceException e) {
+ return AjaxResult.error(e.getMessage());
}
- // 设备在线检查
- Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
- if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
- }
- cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.set3DPosition(cmd);
}
- //录像超时检查
+ // ========== 定时任务 ==========
+
@Scheduled(fixedRate = 30 * 1000)
public void checkVideoTimeout() {
Date now = new Date();
@@ -774,32 +272,69 @@
});
}
- //获取相机架设参数
- public Double correctPitch(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- // 设备存在性检查
- ArdCamera ardCamera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cmd.getCameraId());
- if (ardCamera == null) {
- throw CameraSDKException.cameraNotExist(cameraId);
+ // ========== 私有辅助方法 ==========
+
+ /**
+ * 获取SDK实例(会校验参数、相机存在性、在线状态)
+ */
+ private CameraSDK getSdk(CameraCmd cmd) {
+ if (cmd == null || cmd.getCameraId() == null || cmd.getCameraId().isBlank()) {
+ throw CameraSDKException.cameraNotExist(null);
}
- // 设备在线检查
+
Long loginId = redisService.getCacheMapValue(CacheConstants.CAMERA_ONLINE, cmd.getCameraId());
if (loginId == null) {
- throw CameraSDKException.cameraOffline(cameraId);
+ throw CameraSDKException.cameraOffline(cmd.getCameraId());
}
cmd.setLoginId(loginId);
- String factory = ardCamera.getFactory();
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
- return cameraSDK.correctPitch(cmd);
- }
- public AjaxResult getCameraVideoLable(CameraCmd cmd) {
- CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK("1");
- try {
- List<Map<String, Object>> r= cameraSDK.getCameraVideoLable(SecurityUtils.getUserId(), cmd);
- return AjaxResult.success(r);
- }catch (ServiceException e){
- return AjaxResult.error(e.getMessage());
- }
+
+ ArdCamera camera = getCamera(cmd.getCameraId());
+ return cameraSDKFactory.createCameraSDK(camera.getFactory());
}
-}
+ /**
+ * 获取相机信息(会校验存在性)
+ */
+ private ArdCamera getCamera(String cameraId) {
+ ArdCamera camera = redisService.getCacheMapValue(CacheConstants.CAMERA_LIST, cameraId);
+ if (camera == null) {
+ throw CameraSDKException.cameraNotExist(cameraId);
+ }
+ return camera;
+ }
+
+ // 判断坐标是否超出引导范围
+ private Boolean isOutMaxDistance(String cameraId, Point targetPoint) {
+ ArdCamera camera = getCamera(cameraId);
+ Point cameraCoordinate = new Point(camera.getLongitude(), camera.getLatitude(), camera.getAltitude());
+ double distance = GisUtil.getDistance(cameraCoordinate, targetPoint);
+
+ if (camera.getCamMaxVisibleDistance() == null) {
+ throw new CameraSDKException(CameraSDKException.ErrorCode.CAMERA_MAX_VISIBLE_DISTANCE_NULL.getCode(),
+ cameraId, CameraSDKException.ErrorCode.CAMERA_MAX_VISIBLE_DISTANCE_NULL.getMsg());
+ }
+ return distance > camera.getCamMaxVisibleDistance();
+ }
+
+ // 判断坐标是否在不可视域
+ private Boolean isInNoViewingZone(String cameraId, Point targetPoint) {
+ ArdNoViewingZone query = new ArdNoViewingZone();
+ query.setCameraId(cameraId);
+ List<ArdNoViewingZone> zones = ardNoViewingZoneService.selectArdNoViewingZoneList(query);
+ if (zones.isEmpty()) {
+ return false;
+ }
+
+ List<Point> points = new ArrayList<>();
+ for (ArdNoViewingZone zone : zones) {
+ String[] parts = zone.getPoi().split(",");
+ 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]));
+ points.add(point);
+ }
+ }
+ return GisUtil.isInPolygon(targetPoint, points);
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.3