ard-work/src/main/java/com/ruoyi/alarm/radar/service/impl/ArdRadarServiceImpl.java
@@ -4,6 +4,7 @@ import com.ruoyi.alarm.radar.domain.ArdAlarmRadar; import com.ruoyi.alarm.radar.domain.RadarAlarmData; import com.ruoyi.alarm.radar.service.ArdRadarService; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; @@ -69,12 +70,7 @@ ptzMap.put("t", t); ptzMap.put("z", cameraPTZ[2]); cmd.setPtzMap(ptzMap); boolean res = iCameraSdkService.setPtz(cmd); if (res) { log.debug("强制引导成功"); } else { log.debug("强制引导失败"); } iCameraSdkService.setPtz(cmd); } else { log.debug("未获取到雷达塔上的光电"); } ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
@@ -7,6 +7,7 @@ import com.ruoyi.common.constant.CameraConstants; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.domain.DeptAndCamerasDto; import com.ruoyi.device.camera.service.IArdCamerasService; import com.ruoyi.device.camera.service.ICameraSdkService; import com.ruoyi.common.utils.poi.ExcelUtil; @@ -193,7 +194,12 @@ Map deptAndCamera = ardCamerasService.getChildDeptAndCamera(true); return AjaxResult.success(deptAndCamera); } @GetMapping("/getDeptAndCamera1") @ApiOperation("获取部门和相机1") public AjaxResult getDeptAndCamera1() { List<DeptAndCamerasDto> deptAndCamera = ardCamerasService.getChildDeptAndCamera(); return AjaxResult.success(deptAndCamera); } @GetMapping("/getDeptAndCameraWithCheckBox") @ApiOperation("获取部门和相机(开启复选框)") public AjaxResult getDeptAndCameraWithCheckBox() { ard-work/src/main/java/com/ruoyi/device/camera/controller/CameraSdkController.java
@@ -94,7 +94,7 @@ public @ResponseBody AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return toAjax(cameraSdkService.pTZControl(cmd)); return cameraSdkService.pTZControl(cmd); } @ApiOperation("调用预置点") @@ -167,7 +167,7 @@ public @ResponseBody AjaxResult setPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return toAjax(cameraSdkService.setPtz(cmd)); return cameraSdkService.setPtz(cmd); } @ApiOperation("指向目标") ard-work/src/main/java/com/ruoyi/device/camera/domain/DeptAndCamerasDto.java
New file @@ -0,0 +1,18 @@ package com.ruoyi.device.camera.domain; import com.ruoyi.common.core.domain.entity.SysDept; import lombok.Data; import java.util.List; /** * @Description: * @ClassName: deptAndCamerasDto * @Author: 刘苏义 * @Date: 2024年03月05日8:21:22 **/ @Data public class DeptAndCamerasDto { SysDept sysDept; List<ArdCameras> ardCamerasList; } ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java
@@ -1,5 +1,6 @@ package com.ruoyi.device.camera.factory; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.channel.domain.ArdChannel; @@ -26,7 +27,7 @@ boolean isOnLine(CameraCmd cmd); //云台控制 boolean pTZControl(CameraCmd cmd); AjaxResult pTZControl(CameraCmd cmd); //设置聚焦值 boolean setFocusPos(CameraCmd cmd); @@ -78,10 +79,10 @@ Map<String, Object> getPtzScope(CameraCmd cmd); //设置ptz1(不支持2通道的Z值设置和获取) boolean setPtz1(CameraCmd cmd); AjaxResult setPtz1(CameraCmd cmd); //设置ptz(高精度ptz设置) boolean setPtz(CameraCmd cmd); AjaxResult setPtz(CameraCmd cmd); //设置零方位角 boolean setZeroPtz(CameraCmd cmd); ard-work/src/main/java/com/ruoyi/device/camera/service/IArdCamerasService.java
@@ -8,6 +8,7 @@ import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.domain.DeptAndCamerasDto; import com.ruoyi.scheduling.domian.SchedulingParam; /** @@ -106,7 +107,7 @@ * @修改人和其它信息 */ public Map getChildDeptAndCamera(Boolean disabled); public List<DeptAndCamerasDto> getChildDeptAndCamera(); public TreeMap getNearCamerasBycoordinate(CameraCmd cmd); ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java
@@ -19,7 +19,7 @@ boolean isOnLine(CameraCmd cmd); //云台控制 boolean pTZControl(CameraCmd cmd); AjaxResult pTZControl(CameraCmd cmd); //设置聚焦值 boolean setFocusPos(CameraCmd cmd); @@ -76,7 +76,7 @@ Map<String, Object> getPtzScope(CameraCmd cmd); //设置ptz boolean setPtz(CameraCmd cmd); AjaxResult setPtz(CameraCmd cmd); //设置零方位角 boolean setZeroPtz(CameraCmd cmd); ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -17,10 +17,12 @@ import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.domain.DeptAndCamerasDto; import com.ruoyi.device.channel.domain.ArdChannel; import com.ruoyi.device.channel.mapper.ArdChannelMapper; import com.ruoyi.media.service.IVtduService; import com.ruoyi.scheduling.domian.SchedulingParam; import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.utils.gis.GisUtil; import com.ruoyi.utils.tools.ArdTool; import com.ruoyi.device.camera.domain.ArdCameras; @@ -52,7 +54,8 @@ private SysDeptMapper sysDeptMapper; @Resource private RedisCache redisCache; @Autowired private ISysDeptService deptService; @Resource private ArdChannelMapper ardChannelMapper; @Resource @@ -306,7 +309,6 @@ * @创建时间 2023/6/2 10:58 * @修改人和其它信息 */ @Override public Map getChildDeptAndCamera(Boolean disabled) { Long deptId = SecurityUtils.getDeptId(); @@ -315,6 +317,11 @@ return map; } @Override public List<DeptAndCamerasDto> getChildDeptAndCamera() { List<SysDept> depts = deptService.selectDeptList(new SysDept()); return fetchChildDepartments(depts); } /** * @描述 递归查询 * @参数 [sysDept] @@ -354,7 +361,26 @@ } map.put("children", childList); return map; } /** * 获取所有部门及部门下的相机 * 刘苏义 * 2024/3/4 14:45:03 */ public List<DeptAndCamerasDto> fetchChildDepartments(List<SysDept> sysDepts) { List<DeptAndCamerasDto> deptAndCamerasList = sysDepts.stream() .map(sysDept -> { List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasByDeptId(sysDept.getDeptId()); DeptAndCamerasDto deptAndCamerasDto = new DeptAndCamerasDto(); deptAndCamerasDto.setSysDept(sysDept); deptAndCamerasDto.setArdCamerasList(ardCameras); return deptAndCamerasDto; }) .collect(Collectors.toList()); return deptAndCamerasList; } /** ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
@@ -130,20 +130,15 @@ //云台控制 @Override public boolean pTZControl(CameraCmd cmd) { try { boolean result = false; public AjaxResult pTZControl(CameraCmd cmd) { String cameraId = cmd.getCameraId(); ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory); result = cameraSDK.pTZControl(cmd); } return result; } catch (Exception ex) { log.error("ptz控制异常:" + ex.getMessage()); return false; return cameraSDK.pTZControl(cmd); } else { return AjaxResult.error("摄像头不存在"); } } @@ -403,9 +398,7 @@ String gdtype = ardCamera.getGdtype(); if (gdtype.equals("1")) { map = cameraSDK.getPtz(cmd); } else { } else { map = cameraSDK.getPtz1(cmd); } } @@ -435,27 +428,27 @@ //设置ptz @Override public boolean setPtz(CameraCmd cmd) { boolean result = false; public AjaxResult setPtz(CameraCmd cmd) { try { String cameraId = cmd.getCameraId(); ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId); if (ardCamera != null) { String factory = ardCamera.getFactory(); CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory); if (ardCamera == null) { return AjaxResult.error("摄像头不存在"); } CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(ardCamera.getFactory()); String gdtype = ardCamera.getGdtype(); if (gdtype.equals("1")) { //大光电使用高精度ptz设置 result = cameraSDK.setPtz(cmd); return cameraSDK.setPtz(cmd); } else { result = cameraSDK.setPtz1(cmd); return cameraSDK.setPtz1(cmd); } } } catch (Exception ex) { log.error("设置ptz异常:" + ex.getMessage()); AjaxResult.error("设置ptz异常:" + ex.getMessage()); } return result; return AjaxResult.success(); } //设置零方位角 @@ -529,8 +522,7 @@ cmd.setCameraId(cameraId); //获取最近相机的对象 Optional<ArdWellGuideCamera> first = ardWellGuideCameraList.stream().filter(s -> s.getCameraId().equals(cameraId)).findFirst(); if(first.isPresent()) { if (first.isPresent()) { ArdWellGuideCamera ardWellGuideCamera = first.get(); Map<String, Double> ptzMap = null; //通过通道获取预置位 @@ -557,11 +549,7 @@ if (ptzMap != null) { //使用ptz引导 cmd.setPtzMap(ptzMap); boolean res = setPtz(cmd); if (!res) { return AjaxResult.error("ptz引导失败", "cameraId:" + cameraId); } return AjaxResult.success("ptz引导成功", "cameraId:" + cameraId); return setPtz(cmd); } } ard-work/src/main/java/com/ruoyi/utils/sdk/common/SdkErrorCodeEnum.java
New file @@ -0,0 +1,73 @@ package com.ruoyi.utils.sdk.common; import com.ruoyi.common.utils.StringUtils; /** * sdk错误码枚举 * 刘苏义 * 2024/3/7 10:50:52 */ public enum SdkErrorCodeEnum { NET_DVR_PASSWORD_ERROR(1, "用户名密码错误。注册时输入的用户名或者密码错误"), NET_DVR_NOINIT(3, "SDK未初始化"), NET_DVR_NETWORK_FAIL_CONNECT(7, "连接设备失败。设备不在线或网络原因引起的连接超时等"); /** * 枚举码 */ private Integer code; /** * 枚举描述 */ private String desc; private SdkErrorCodeEnum(Integer code, String desc) { this.code = code; this.desc = desc; } public Integer getCode() { return code; } public String getDesc() { return desc; } /** * 根据枚举码获取枚举 * * @param code 枚举码 * @return 枚举 */ public static final SdkErrorCodeEnum getByCode(Integer code) { if (StringUtils.isNull(code)) { return null; } for (SdkErrorCodeEnum item : SdkErrorCodeEnum.values()) { if (item.getCode() == code) { return item; } } return null; } /** * 根据枚举码获取枚举描述 * * @param code 枚举码 * @return 枚举描述 */ public static final String getDescByCode(Integer code) { if (StringUtils.isNull(code)) { return "错误码为空"; } for (SdkErrorCodeEnum item : SdkErrorCodeEnum.values()) { if (item.getCode() == code) { return item.getDesc(); } } return "找不到错误码对应的错误描述,请联系管理员"; } } ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/controller/DhSdkController.java
@@ -47,7 +47,7 @@ public @ResponseBody AjaxResult pTZControl(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return toAjax(sdk.pTZControl(cmd)); return sdk.pTZControl(cmd); } @ApiOperation("获取PTZ") @@ -79,7 +79,7 @@ public @ResponseBody AjaxResult setPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return toAjax(sdk.setPtz(cmd)); return sdk.setPtz(cmd); } @ApiOperation("设置零方位角") ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/lib/ToolKits.java
@@ -469,8 +469,8 @@ * @return */ public static String getErrorCodePrint() { return "\n{error code: (0x80000000|" + (LoginModule.netsdk.CLIENT_GetLastError() & 0x7fffffff) +").参考 NetSDKLib.java }" + " - {error info:" + ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()) + "}\n"; return "Error Code: (0x80000000|" + (LoginModule.netsdk.CLIENT_GetLastError() & 0x7fffffff) +")" + " Error Info:" + ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()) + ""; } /** ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
@@ -4,6 +4,7 @@ import com.ruoyi.alarm.global.domain.GuideTask; import com.ruoyi.alarm.global.service.impl.QueueHandler; import com.ruoyi.common.annotation.SdkOperate; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.file.MimeTypeUtils; import com.ruoyi.common.utils.spring.SpringUtils; @@ -19,6 +20,7 @@ import com.ruoyi.utils.gis.GisUtil; import com.ruoyi.utils.minio.MinioUtil; import com.ruoyi.utils.sdk.common.GlobalVariable; import com.ruoyi.utils.sdk.dhsdk.common.ErrorCode; import com.ruoyi.utils.sdk.dhsdk.lib.NetSDKLib; import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.EM_NEW_CONFIG; import com.ruoyi.utils.sdk.dhsdk.lib.enumeration.NET_EM_CFG_OPERATE_TYPE; @@ -317,14 +319,14 @@ */ @Override @SdkOperate public boolean pTZControl(CameraCmd cmd) { public AjaxResult pTZControl(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer chanNo = cmd.getChanNo(); Integer speed = cmd.getSpeed(); Integer code = cmd.getCode(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; return AjaxResult.error("设备未登录"); } NetSDKLib.LLong loginId = (NetSDKLib.LLong) GlobalVariable.loginMap.get(cameraId); int dwStop; @@ -391,8 +393,9 @@ boolean bool = PtzControlModule.ptzControl(loginId, chanNo - 1, dwPTZCommand, speed, speed, 0, dwStop); if (!bool) { log.error("控制失败,请稍后重试" + getErrorCodePrint()); return AjaxResult.error(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError())); } return bool; return AjaxResult.success(); } /** @@ -429,7 +432,7 @@ } @Override public boolean setPtz1(CameraCmd cmd) { public AjaxResult setPtz1(CameraCmd cmd) { return setPtz(cmd) ; } @@ -443,12 +446,12 @@ */ @Override @SdkOperate public boolean setPtz(CameraCmd cmd) { public AjaxResult setPtz(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer chanNo = cmd.getChanNo(); Map<String, Double> ptz = cmd.getPtzMap(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; return AjaxResult.error("设备未登录"); } LLong loginId = (LLong) GlobalVariable.loginMap.get(cameraId); try { @@ -460,11 +463,12 @@ boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0); if (!bool) { log.error("控制失败,请稍后重试" + getErrorCodePrint()); return AjaxResult.error(ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError())); } return bool; return AjaxResult.success(); } catch (Exception ex) { log.error(ex.getMessage()); return false; return AjaxResult.error(ex.getMessage()); } } ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/controller/HikSdkController.java
@@ -85,7 +85,7 @@ public @ResponseBody AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return toAjax(sdk.pTZControl(cmd)); return sdk.pTZControl(cmd); } @ApiOperation("调用预置点") @@ -158,7 +158,7 @@ public @ResponseBody AjaxResult setPTZ(@RequestBody CameraCmd cmd) { cmd.setOperator(SecurityUtils.getUserId()); return toAjax(sdk.setPtz(cmd)); return sdk.setPtz(cmd); } @ApiOperation("指向目标") ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -4,6 +4,7 @@ import com.ruoyi.alarm.global.domain.GuideTask; import com.ruoyi.alarm.global.service.impl.QueueHandler; import com.ruoyi.common.annotation.SdkOperate; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.file.MimeTypeUtils; import com.ruoyi.common.utils.spring.SpringUtils; @@ -19,6 +20,7 @@ import com.ruoyi.utils.gis.GisUtil; import com.ruoyi.utils.minio.MinioUtil; import com.ruoyi.utils.sdk.common.GlobalVariable; import com.ruoyi.utils.sdk.common.SdkErrorCodeEnum; import com.ruoyi.utils.sdk.hiksdk.lib.ExceptionCallBack; import com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK; import com.sun.jna.NativeLong; @@ -220,7 +222,10 @@ //同步登录 int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (lUserID < 0) { log.debug("Login Failed 【 " + camera.getIp() + ":" + camera.getPort() + " 】,Error Code:" + hCNetSDK.NET_DVR_GetLastError()); int errorCode = hCNetSDK.NET_DVR_GetLastError(); log.debug("Login Failed 【 " + camera.getIp() + ":" + camera.getPort() + " 】," + "Error Code:" + errorCode + " " + "Error Info:" + SdkErrorCodeEnum.getDescByCode(errorCode)); camera.setChanNum(0); camera.setLoginId(-1); camera.setState("0"); @@ -376,14 +381,14 @@ */ @Override @SdkOperate public boolean pTZControl(CameraCmd cmd) { public AjaxResult pTZControl(CameraCmd cmd) { String cameraId = cmd.getCameraId(); boolean enable = cmd.isEnable(); Integer channelNum = cmd.getChanNo(); Integer speed = cmd.getSpeed(); Integer code = cmd.getCode(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; return AjaxResult.error("相机未登录"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); int dwStop; @@ -452,8 +457,9 @@ if (!bool) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); log.error("控制失败,请稍后重试" + errorCode); return AjaxResult.error("errorCode:" + errorCode + "errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode)); } return bool; return AjaxResult.success(); } /** @@ -992,12 +998,12 @@ */ @Override @SdkOperate public boolean setPtz1(CameraCmd cmd) { public AjaxResult setPtz1(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); Map<String, Double> ptz = cmd.getPtzMap(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; return AjaxResult.error("设备未登录"); } Integer userId = (Integer) GlobalVariable.loginMap.get(cameraId); NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS(); @@ -1013,13 +1019,14 @@ m_ptzPosCurrent.write(); boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); log.error("设置PTZ参数失败,请稍后重试:" + code); int errorCode = hCNetSDK.NET_DVR_GetLastError(); log.error("设置PTZ参数失败,请稍后重试:" + errorCode); return AjaxResult.error("errorCode:" + errorCode + "errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode)); } return bool; return AjaxResult.success(); } catch (Exception ex) { log.error(ex.getMessage()); return false; return AjaxResult.error("设置PTZ参数异常:" + ex.getMessage()); } } @@ -1033,13 +1040,13 @@ */ @Override @SdkOperate public boolean setPtz(CameraCmd cmd) { public AjaxResult setPtz(CameraCmd cmd) { try { String cameraId = cmd.getCameraId(); Integer chanNo = cmd.getChanNo(); Map<String, Double> ptz = cmd.getPtzMap(); if (!GlobalVariable.loginMap.containsKey(cameraId)) { return false; return AjaxResult.error("设备未登录"); } Integer lUserID = (Integer) GlobalVariable.loginMap.get(cameraId); IntByReference pchannel = new IntByReference(chanNo); @@ -1071,14 +1078,15 @@ lpConfigParam6697.write(); boolean bool = hCNetSDK.NET_DVR_SetSTDConfig(lUserID, NET_DVR_SET_PTZABSOLUTEEX, lpConfigParam6697); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); log.error("设置高精度PTZ参数失败,请稍后重试:" + code); int errorCode = hCNetSDK.NET_DVR_GetLastError(); log.error("设置高精度PTZ参数失败,请稍后重试:" + errorCode); return AjaxResult.error("errorCode:" + errorCode + "errorInfo:" + SdkErrorCodeEnum.getDescByCode(errorCode)); } return bool; return AjaxResult.success(); } catch (Exception ex) { log.error("设置高精度PTZ参数异常", ex); return false; return AjaxResult.error("设置高精度PTZ参数异常:" + ex); } }