From c6eb731b0a70946e5ba265d9e5d427b8bb4537a6 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期四, 25 五月 2023 16:36:50 +0800 Subject: [PATCH] 修改云台可控优先级策略 --- ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/hikClientServiceImpl.java | 146 +++++++++++++++++++++++++++--------------------- 1 files changed, 81 insertions(+), 65 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/hikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/hikClientServiceImpl.java index 1b97cff..92e8124 100644 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/hikClientServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/hikClientServiceImpl.java @@ -5,20 +5,17 @@ import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.constant.sdkPriority; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; import com.ruoyi.device.hiksdk.common.global.globalVariable; import com.ruoyi.device.camera.domain.ArdCameras; -import com.ruoyi.device.camera.service.IArdCamerasService; -import com.ruoyi.device.cameracalibration.domain.ArdCamerasCalibration; import com.ruoyi.device.hiksdk.domain.recordInfo; -import com.ruoyi.device.cameracalibration.service.IArdCamerasCalibrationService; +import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil; import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK; import com.ruoyi.device.hiksdk.service.hikClientService; -import com.ruoyi.device.hiksdk.util.imageUtil.waterMarkUtil; import com.ruoyi.device.hiksdk.util.minioUtil.MinioUtil; import com.ruoyi.system.mapper.SysUserMapper; -import com.ruoyi.system.service.ISysUserService; import com.sun.jna.Native; import com.sun.jna.Platform; import com.sun.jna.Pointer; @@ -29,11 +26,8 @@ import sun.misc.BASE64Encoder; import javax.annotation.Resource; -import javax.imageio.ImageIO; -import javax.servlet.http.HttpServletResponse; import java.io.*; import java.math.BigDecimal; -import java.net.URLEncoder; import java.nio.ByteBuffer; import java.text.DecimalFormat; import java.text.SimpleDateFormat; @@ -289,7 +283,6 @@ } return bool; } - /** * 璁剧疆鑱氱劍鍊� @@ -595,6 +588,39 @@ } } + @Override + public boolean setTargetPosition(CameraCmd cmd) { + String cameraId = cmd.getCameraId(); + Integer channelNum = cmd.getChannelNum(); + if (!globalVariable.loginMap.containsKey(cameraId)) { + return false; + } + Integer userId = globalVariable.loginMap.get(cameraId); + HCNetSDK.NET_DVR_PTZPOS m_ptzPosCurrent = new HCNetSDK.NET_DVR_PTZPOS(); + m_ptzPosCurrent.wAction = 1; + try { + double[] cameraPositon = Arrays.stream(cmd.getCamPosition().split(",")).mapToDouble(Double::parseDouble).toArray(); + double[] targetPositions = Arrays.stream(cmd.getTargetPosition().split(",")).mapToDouble(Double::parseDouble).toArray(); + double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150); + String p = String.valueOf((int) ( cameraPTZ[0] * 10)); + String t = String.valueOf((int) ( cameraPTZ[1] * 10)); + String z = String.valueOf((int) (cameraPTZ[2]* 10)); + m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16)); + m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16)); + 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()); + if (!bool) { + int code = hCNetSDK.NET_DVR_GetLastError(); + log.info("璁剧疆ptz澶辫触,璇风◢鍚庨噸璇�" + code); + } + return bool; + } catch (Exception ex) { + log.error(ex.getMessage()); + return false; + } + } /** * @鎻忚堪 鎿嶆帶閿佸畾 * @鍙傛暟 [userId, channelNum] @@ -605,77 +631,66 @@ */ @Override public boolean controlLock(CameraCmd cmd) { - String cameraId = cmd.getCameraId(); - Integer expired = cmd.getExpired(); + String cameraId = cmd.getCameraId();//鐢宠閿佺殑鐩告満 ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId); if (StringUtils.isNull(ardCameras)) { return false;//鎵句笉鍒扮浉鏈烘嫆缁濇搷鎺� } - String operatorId = ardCameras.getOperatorId(); - if (StringUtils.isEmpty(operatorId)) { - //濡傛灉璇ョ浉鏈烘棤浜洪攣瀹氾紝鐩存帴閿佸畾 - LoginUser loginUser = SecurityUtils.getLoginUser(); - if (StringUtils.isNull(loginUser)) { - return false;//褰撳墠鐧诲綍鐢ㄦ埛涓虹┖涓嶅彲浠ユ帶鍒� - } - SysUser user = loginUser.getUser(); - if (StringUtils.isNull(user.getCameraPriority())) { - return false;//鏈厤缃紭鍏堢骇鐨勭敤鎴蜂笉鍙互鎺у埗 - } + Integer expired = cmd.getExpired();//鐢宠鎺у埗鏃堕暱 + String operator=cmd.getOperator();//鐢宠鑰� + String currentOperator = ardCameras.getOperatorId();//鐩告満褰撳墠鎺у埗鑰� + Date currentExpired = ardCameras.getOperatorExpired();//鐩告満褰撳墠杩囨湡鏃堕棿 + if(currentExpired==null) + { //璁剧疆褰撳墠鎿嶄綔鐢ㄦ埛ID - ardCameras.setOperatorId(user.getUserId()); + ardCameras.setOperatorId(operator); //璁剧疆褰撳墠杩囨湡鏃堕棿 Date now = new Date(); - now.setTime(now.getTime() + expired * 1000); + now.setTime(now.getTime() + expired * 1000*60); ardCameras.setOperatorExpired(now); ardCamerasMapper.updateArdCameras(ardCameras); - } else { - //濡傛灉璇ョ浉鏈烘湁浜洪攣瀹氾紝鍒ゆ柇浼樺厛绾� - SysUser operatorUser = sysUserMapper.selectUserById(operatorId); - if (StringUtils.isNull(operatorUser)) { - return false; - } - if (StringUtils.isEmpty(operatorUser.getCameraPriority())) { - return false; - } - Integer operatorPriority = Integer.parseInt(operatorUser.getCameraPriority());//鐩告満宸叉搷浣滅敤鎴蜂紭鍏堢骇 - - LoginUser loginUser = SecurityUtils.getLoginUser(); - if (StringUtils.isNull(loginUser)) { - return false;//褰撳墠鐧诲綍鐢ㄦ埛涓虹┖涓嶅彲浠ユ帶鍒� - } - SysUser user = loginUser.getUser(); - if (StringUtils.isEmpty(user.getCameraPriority())) { - return false;//鏈厤缃紭鍏堢骇鐨勭敤鎴蜂笉鍙互鎺у埗 - } - Integer loginUserCameraPriority = Integer.parseInt(user.getCameraPriority());//褰撳墠鐧诲綍鐢ㄦ埛浼樺厛绾� - if (user.getUserId().equals(operatorUser.getUserId())) { - //濡傛灉褰撳墠鐢ㄦ埛宸茬粡鎿嶆帶锛岀洿鎺ユ洿鏂拌繃鏈熸椂闂� + } + else { + //濡傛灉杩囨湡鏃堕棿鏈夊�� + //濡傛灉鏄湰浜虹洿鎺ヤ慨鏀� + if(currentOperator.equals(operator)) + { + //璁剧疆褰撳墠杩囨湡鏃堕棿 Date now = new Date(); - now.setTime(now.getTime() + expired * 60 * 1000); - ardCameras.setOperatorExpired(now);//璁剧疆褰撳墠杩囨湡鏃堕棿 + now.setTime(now.getTime() + expired * 1000*60); + ardCameras.setOperatorExpired(now); ardCamerasMapper.updateArdCameras(ardCameras); - } else { - if (loginUserCameraPriority > operatorPriority) { - //濡傛灉鐧诲綍鐢ㄦ埛浼樺厛绾ч珮浜庡凡鎿嶄綔鐢ㄦ埛锛岃鐩栨洿鏂� - ardCameras.setOperatorId(user.getUserId());//璁剧疆褰撳墠鎿嶄綔鐢ㄦ埛ID + } + else { + //濡傛灉闈炴湰浜烘瘮杈冧紭鍏堢骇 + Integer currentLevel = 0;//褰撳墠鎿嶄綔鑰呯殑浼樺厛绾� + if (sdkPriority.priorityMap.containsKey(currentOperator)) { + /*褰撳墠鎺у埗鑰呬负绯荤粺鎶ヨ鐢ㄦ埛*/ + currentLevel = (Integer) sdkPriority.priorityMap.get(currentOperator); + } else { + /*褰撳墠鎺у埗鑰呬负鏅�氱敤鎴�*/ + SysUser sysUser = sysUserMapper.selectUserById(currentOperator); + currentLevel = sysUser.getCameraPriority(); + } + Integer operatorLevel = 0;//鑾峰彇鐢宠鑰呯殑浼樺厛绾� + if (sdkPriority.priorityMap.containsKey(operator)) { + /*鍖呭惈璇存槑褰撳墠鐢宠鎺у埗鑰呬负绯荤粺鎶ヨ鐢ㄦ埛*/ + operatorLevel = (Integer) sdkPriority.priorityMap.get(operator); + } else { + /*鍚﹀垯鐢宠鎺у埗鑰呬负褰撳墠鐧诲綍鐢ㄦ埛*/ + LoginUser loginUser = SecurityUtils.getLoginUser(); + SysUser user = loginUser.getUser();//鑾峰彇鐧诲綍鐢ㄦ埛鐨勪俊鎭� + operatorLevel = user.getCameraPriority(); + } + //鍒ゆ柇浼樺厛绾� + if (operatorLevel > currentLevel) { Date now = new Date(); now.setTime(now.getTime() + expired * 60 * 1000); ardCameras.setOperatorExpired(now);//璁剧疆褰撳墠杩囨湡鏃堕棿 + ardCameras.setOperatorId(operator);//璁剧疆褰撳墠鐢ㄦ埛 ardCamerasMapper.updateArdCameras(ardCameras); } else { - //濡傛灉鐧诲綍鐢ㄦ埛浼樺厛绾т綆浜庣瓑浜庡凡鎿嶄綔鐢ㄦ埛锛屽垽鏂槸鍚﹁繃鏈� - Date now = new Date(); - Date operatorExpired = ardCameras.getOperatorExpired(); - if (now.after(operatorExpired)) { - //宸茶繃鏈� - ardCameras.setOperatorId(user.getUserId());//璁剧疆褰撳墠鎿嶄綔鐢ㄦ埛ID - now.setTime(now.getTime() + expired * 60 * 1000); - ardCameras.setOperatorExpired(now);//璁剧疆褰撳墠杩囨湡鏃堕棿 - ardCamerasMapper.updateArdCameras(ardCameras); - } else { - return false;//鏈繃鏈熶笉鍙帶 - } + return false;//浼樺厛绾т綆鏃犳硶涓婇攣 } } } @@ -921,7 +936,8 @@ if (enable) { struFocusMode.byFocusMode = 1;//鎵嬪姩鑱氱劍 } else { - struFocusMode.byFocusMode = 0;//鑷姩鑱氱劍 + struFocusMode.byAutoFocusMode=1; + struFocusMode.byFocusMode = 2;//鑷姩鑱氱劍 } struFocusMode.byFocusDefinitionDisplay = 1; struFocusMode.byFocusSpeedLevel = 3; -- Gitblit v1.9.3