From e8d53b7555595df35bd2fe03a5c5cf449c38859c Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期四, 14 十二月 2023 13:30:49 +0800 Subject: [PATCH] 增加PTZ引导优先; 井管理增加可见光和热红外ptz设置; 雷达报警引导只需要引导雷达塔上的光电,通道根据日夜切换自动选择; 引导优先按井配置的ptz进行引导,当未配置时按经纬度进行引导; 相机优先级队列排序取消报警次数num比对,仅由优先级和接收时间作为比较器条件; --- ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 113 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 94 insertions(+), 19 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java index 7c36f42..8bf60c2 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java +++ b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java @@ -2,8 +2,10 @@ 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.utils.file.FileUtils; import com.ruoyi.common.utils.file.MimeTypeUtils; +import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.device.camera.service.IArdCamerasService; import com.ruoyi.device.camera.factory.CameraSDK; @@ -52,7 +54,10 @@ private IArdChannelService ardChannelService; @Resource private IVtduService vtduService; + @Resource + private QueueHandler queueHandler; + public Object _lock=new Object(); public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK; private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//寮傚父鍥炶皟 @@ -214,7 +219,7 @@ //鍚屾鐧诲綍 int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (lUserID < 0) { - log.debug("Login Failed [ " + camera.getIp() + ":" + camera.getPort() + " ],閿欒鐮侊細" + hCNetSDK.NET_DVR_GetLastError()); + log.debug("Login Failed 銆� " + camera.getIp() + ":" + camera.getPort() + " 銆�,Error Code锛�" + hCNetSDK.NET_DVR_GetLastError()); camera.setChanNum(0); camera.setLoginId(-1); camera.setState("0"); @@ -224,18 +229,19 @@ return; } - log.debug("Login Success [ " + camera.getIp() + ":" + camera.getPort() + " ]"); - if (fExceptionCallBack == null) { - fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟 - //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑) - if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { - log.debug("Set fExceptionCallBack function fail"); - return; - } else { - log.debug("Set fExceptionCallBack function successfully!"); + log.debug("Login Success 銆� " + camera.getIp() + ":" + camera.getPort() + " 銆�"); + synchronized (_lock) { + if (fExceptionCallBack == null) { + fExceptionCallBack = new ExceptionCallBack();//寮傚父鍥炶皟 + //璁剧疆寮傚父鍥炶皟鍑芥暟(鍙湪鍥炶皟鍑芥暟涓幏鍙栬澶囦笂涓嬬嚎鐘舵�佺瓑) + if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, null)) { + log.debug("Set fExceptionCallBack function fail"); + return; + } else { + log.debug("Set fExceptionCallBack function successfully!"); + } } } - if (GlobalVariable.loginMap.containsKey(camera.getId())) { GlobalVariable.loginMap.remove(camera.getId()); } @@ -264,16 +270,26 @@ //娣诲姞鍒版祦濯掍綋 addVtdu(camera); //鍒涘缓寮曞闃熷垪 - if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { - Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); - PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); - GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); - } + createGuideQueue(camera); } catch (Exception ex) { log.error("娉ㄥ唽璁惧寮傚父", ex); } } + //鍒涘缓寮曞闃熷垪 + private void createGuideQueue(ArdCameras camera) { + if(camera.getCamAlarmGuideEnable()!=null) { + if (camera.getCamAlarmGuideEnable() == 1) { + if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) { + Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); + PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator); + GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); + //鍚姩闃熷垪澶勭悊鍣� + queueHandler.process(camera.getId()); + } + } + } + } //娣诲姞鍒版祦濯掍綋 private void addVtdu(ArdCameras camera) { try { @@ -921,8 +937,8 @@ * @鍒涘缓鏃堕棿 2023/1/17 16:36 * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�奸渶瑕佸姞涓�360寰楀埌鐨勬鍊艰繘琛岃缃� */ - @Override - public boolean setPtz(CameraCmd cmd) { + + public boolean setPtz1(CameraCmd cmd) { String cameraId = cmd.getCameraId(); Integer channelNum = cmd.getChanNo(); Map<String, Double> ptz = cmd.getPtzMap(); @@ -944,7 +960,7 @@ 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); + log.error("璁剧疆PTZ鍙傛暟澶辫触,璇风◢鍚庨噸璇�:" + code); } return bool; } catch (Exception ex) { @@ -953,6 +969,65 @@ } } + /** + * @鎻忚堪 璁剧疆楂樼簿搴tz淇℃伅 + * @鍙傛暟 [userId, channelNum] + * @杩斿洖鍊� boolean + * @鍒涘缓浜� 鍒樿嫃涔� + * @鍒涘缓鏃堕棿 2023/1/17 16:36 + * @淇敼浜哄拰鍏跺畠淇℃伅 娉ㄦ剰淇话瑙掑害璐熷�煎悜涓嬭礋鍊� + */ + @Override + public boolean 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; + } + Integer lUserID = (Integer) GlobalVariable.loginMap.get(cameraId); + IntByReference pchannel = new IntByReference(chanNo); + Pointer pChannelNum = pchannel.getPointer(); + + HCNetSDK.NET_DVR_STD_CONFIG lpConfigParam6697 = new HCNetSDK.NET_DVR_STD_CONFIG(); + HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG lpPTZAbsoluteEX_cfgInfo = new HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG(); + lpConfigParam6697.lpCondBuffer = pChannelNum; + lpConfigParam6697.dwCondSize = 4; + HCNetSDK.BYTE_ARRAY m_szStatusBuf = new HCNetSDK.BYTE_ARRAY(4096 * 4); + lpConfigParam6697.lpStatusBuffer = m_szStatusBuf.getPointer(); + lpConfigParam6697.dwStatusSize = 4096 * 4; + lpPTZAbsoluteEX_cfgInfo.dwSize = lpPTZAbsoluteEX_cfgInfo.size(); + lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.fPan = new Double(ptz.get("p")).floatValue(); + float t = new Double(ptz.get("t")).floatValue(); + float t1 = t > 300 ? (t - 360) : t; + BigDecimal bigDecimal = new BigDecimal(t1); + float t2 = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue(); + lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.fTilt = t2; + lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.fZoom = new Double(ptz.get("z")).floatValue(); + lpPTZAbsoluteEX_cfgInfo.struPTZCtrl.dwFocus = 399; + lpPTZAbsoluteEX_cfgInfo.dwFocalLen = 1250; + lpPTZAbsoluteEX_cfgInfo.fHorizontalSpeed = (float) 10; + lpPTZAbsoluteEX_cfgInfo.fVerticalSpeed = (float) 10; + lpPTZAbsoluteEX_cfgInfo.byZoomType = 0; + lpPTZAbsoluteEX_cfgInfo.write(); + lpConfigParam6697.lpInBuffer = lpPTZAbsoluteEX_cfgInfo.getPointer(); + lpConfigParam6697.dwInSize = lpPTZAbsoluteEX_cfgInfo.dwSize; + lpConfigParam6697.write(); + boolean bool = hCNetSDK.NET_DVR_SetSTDConfig(lUserID, NET_DVR_SET_PTZABSOLUTEEX, lpConfigParam6697); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.error("璁剧疆楂樼簿搴TZ鍙傛暟澶辫触,璇风◢鍚庨噸璇�:" + code); + } + return bool; + + }catch (Exception ex) + { + log.error("璁剧疆楂樼簿搴TZ鍙傛暟寮傚父",ex); + return false; + } + } + @Override public boolean guideTargetPosition(CameraCmd cmd) { String cameraId = cmd.getCameraId(); -- Gitblit v1.9.3