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 | 143 ++++++++++++++++++++++++++---------------------
1 files changed, 79 insertions(+), 64 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 f9a5d5d..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;//浼樺厛绾т綆鏃犳硶涓婇攣
}
}
}
--
Gitblit v1.9.3