| | |
| | | import com.ruoyi.alarm.global.domain.GuidePriorityQueue; |
| | | 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; |
| | |
| | | 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; |
| | |
| | | @Resource |
| | | private QueueHandler queueHandler; |
| | | |
| | | public Object _lock=new Object(); |
| | | public Object _lock = new Object(); |
| | | public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; |
| | | private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//异常回调 |
| | | |
| | |
| | | //同步登录 |
| | | 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"); |
| | |
| | | |
| | | //创建引导队列 |
| | | private void createGuideQueue(ArdCameras camera) { |
| | | if(camera.getCamAlarmGuideEnable()!=null) { |
| | | if (camera.getCamAlarmGuideEnable() != null) { |
| | | if (camera.getCamAlarmGuideEnable() == 1) { |
| | | if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { |
| | | Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | //添加到流媒体 |
| | | private void addVtdu(ArdCameras camera) { |
| | | try { |
| | |
| | | * @修改人和其它信息 |
| | | */ |
| | | @Override |
| | | public boolean pTZControl(CameraCmd cmd) { |
| | | @SdkOperate |
| | | 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; |
| | |
| | | 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(); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @创建时间 2023/1/17 16:36 |
| | | * @修改人和其它信息 |
| | | */ |
| | | @Override |
| | | public Map<String, Object> getPtz(CameraCmd cmd) { |
| | | public Map<String, Object> getPtz1(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * @描述 获取高精度ptz信息 |
| | | * @参数 [userId, chanNo] |
| | | * @返回值 boolean |
| | | * @创建人 刘苏义 |
| | | * @创建时间 2023/1/17 16:36 |
| | | * @修改人和其它信息 |
| | | */ |
| | | @Override |
| | | public Map<String, Object> getPtz(CameraCmd cmd) { |
| | | Map<String, Object> ptzMap = new HashMap<>(); |
| | | try { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer chanNo = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return new HashMap<>(); |
| | | } |
| | | IntByReference pchannel = new IntByReference(chanNo); |
| | | Pointer pChannelNum = pchannel.getPointer(); |
| | | Integer lUserID = (Integer) GlobalVariable.loginMap.get(cameraId); |
| | | HCNetSDK.NET_DVR_STD_CONFIG lpConfigParam6696 = new HCNetSDK.NET_DVR_STD_CONFIG(); |
| | | HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG lpPTZAbsoluteEX_cfg = new HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG(); |
| | | lpConfigParam6696.lpCondBuffer = pChannelNum; |
| | | lpConfigParam6696.dwCondSize = 4; |
| | | lpConfigParam6696.lpInBuffer = null; |
| | | lpConfigParam6696.dwInSize = 0; |
| | | lpConfigParam6696.lpOutBuffer = lpPTZAbsoluteEX_cfg.getPointer(); |
| | | lpConfigParam6696.dwOutSize = lpPTZAbsoluteEX_cfg.size(); |
| | | lpConfigParam6696.write(); |
| | | boolean res = hCNetSDK.NET_DVR_GetSTDConfig(lUserID, HCNetSDK.NET_DVR_GET_PTZABSOLUTEEX, lpConfigParam6696); |
| | | if (!res) { |
| | | log.error("获取高精度PTZ绝对位置配置失败,错误号:" + hCNetSDK.NET_DVR_GetLastError()); |
| | | } else { |
| | | lpPTZAbsoluteEX_cfg.read(); |
| | | //log.debug("P:" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fPan + " T:" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt + " Z:" + lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom |
| | | // + " 聚焦参数:" + lpPTZAbsoluteEX_cfg.struPTZCtrl.dwFocus + " 聚焦范围:" + lpPTZAbsoluteEX_cfg.dwFocalLen + " 水平转动速度:" + lpPTZAbsoluteEX_cfg.fHorizontalSpeed |
| | | // + " 垂直转动速度:" + lpPTZAbsoluteEX_cfg.fVerticalSpeed + " 镜头变倍配置类型:" + lpPTZAbsoluteEX_cfg.byZoomType); |
| | | float p = lpPTZAbsoluteEX_cfg.struPTZCtrl.fPan; |
| | | float fTilt = lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt; |
| | | float t = fTilt < 0 ? fTilt + 360 : fTilt; |
| | | float z = lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom; |
| | | ptzMap.put("p", p); |
| | | ptzMap.put("t", t); |
| | | ptzMap.put("z", z); |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("获取高精度PTZ绝对位置异常:" + ex.getMessage()); |
| | | } |
| | | return ptzMap; |
| | | } |
| | | |
| | | /** |
| | | * @描述 设置ptz信息 |
| | | * @参数 [userId, channelNum] |
| | | * @返回值 boolean |
| | |
| | | * @创建时间 2023/1/17 16:36 |
| | | * @修改人和其它信息 注意俯仰角度负值需要加上360得到的正值进行设置 |
| | | */ |
| | | |
| | | public boolean setPtz1(CameraCmd cmd) { |
| | | @Override |
| | | @SdkOperate |
| | | 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(); |
| | |
| | | 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()); |
| | | } |
| | | } |
| | | |
| | |
| | | * @修改人和其它信息 注意俯仰角度负值向下负值 |
| | | */ |
| | | @Override |
| | | public boolean setPtz(CameraCmd cmd) { |
| | | @SdkOperate |
| | | 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); |
| | |
| | | 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; |
| | | } catch (Exception ex) { |
| | | log.error("设置高精度PTZ参数异常", ex); |
| | | return AjaxResult.error("设置高精度PTZ参数异常:" + ex); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @SdkOperate |
| | | public boolean guideTargetPosition(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |
| | | Integer chanNo = cmd.getChanNo(); |
| | | if (!GlobalVariable.loginMap.containsKey(cameraId)) { |
| | | return false; |
| | | } |
| | |
| | | m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16)); |
| | | Pointer point = m_ptzPosCurrent.getPointer(); |
| | | m_ptzPosCurrent.write(); |
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, channelNum, point, m_ptzPosCurrent.size()); |
| | | boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_PTZPOS, chanNo, point, m_ptzPosCurrent.size()); |
| | | if (!bool) { |
| | | int code = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.error("设置ptz失败,请稍后重试" + code); |
| | |
| | | * @修改人和其它信息 注意俯仰角度负值需要加上360得到的正值进行设置 |
| | | */ |
| | | @Override |
| | | @SdkOperate |
| | | public boolean setZeroPtz(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | Integer channelNum = cmd.getChanNo(); |