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/constant/sdkPriority.java | 8 +
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/hikClientServiceImpl.java | 102 +++++++++++--------------
ruoyi-framework/target/classes/com/ruoyi/framework/aspectj/SdkOperateAspect.class | 0
ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java | 8 +
ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java | 4 +
ard-work/target/classes/com/ruoyi/device/hiksdk/controller/SdkController.class | 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java | 6
ard-work/target/classes/com/ruoyi/device/hiksdk/service/impl/hikClientServiceImpl.class | 0
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/SdkOperateAspect.java | 80 ++++++++++++++++---
9 files changed, 132 insertions(+), 76 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/constant/sdkPriority.java b/ard-work/src/main/java/com/ruoyi/constant/sdkPriority.java
index e144862..9a271b0 100644
--- a/ard-work/src/main/java/com/ruoyi/constant/sdkPriority.java
+++ b/ard-work/src/main/java/com/ruoyi/constant/sdkPriority.java
@@ -1,5 +1,8 @@
package com.ruoyi.constant;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* @Description: sdk鎺у埗浼樺厛绾�
* @ClassName: sdkPriority
@@ -8,5 +11,8 @@
* @Version: 1.0
**/
public class sdkPriority {
- static Integer radar_fire = 999;
+ public static Map<String,Object> priorityMap=new HashMap<>();
+ static {
+ priorityMap.put("sys_radar_fire",999);
+ }
}
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java b/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
index c96576a..712d915 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
@@ -8,6 +8,7 @@
@Data
@ApiModel(description = "sdk鍛戒护瀹炰綋绫�")
public class CameraCmd {
+
/*鐩告満ID*/
String cameraId;
/*鐩告満閫氶亾鍙�*/
@@ -24,10 +25,13 @@
Integer dwFocusPos;
/*PTZ鍊�*/
Map<String,Double>ptzMap;
- /*杩囨湡闂撮殧锛堝垎閽燂級*/
- Integer expired;
+
/*鐩告満缁忕含搴�*/
String camPosition;
/*鐩爣缁忕含搴�*/
String targetPosition;
+ /*褰撳墠鎿嶄綔鑰�*/
+ String operator;
+ /*杩囨湡闂撮殧锛堝垎閽燂級*/
+ Integer expired;
}
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java
index 37d47f1..c75e097 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/controller/SdkController.java
@@ -3,7 +3,9 @@
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.service.IArdCamerasService;
@@ -93,6 +95,7 @@
@Log(title = "浜戝彴鎺у埗", businessType = BusinessType.CONTROL)
public @ResponseBody
AjaxResult PTZControlWithSpeed(@RequestBody CameraCmd cmd) {
+ cmd.setOperator(SecurityUtils.getUserId());
return toAjax(sdk.PTZControlWithSpeed(cmd));
}
@@ -188,6 +191,7 @@
@Log(title = "璁剧疆閿佸畾", businessType = BusinessType.CONTROL)
public @ResponseBody
AjaxResult setPTZLock(@RequestBody CameraCmd cmd) {
+ cmd.setOperator(SecurityUtils.getUserId());
return toAjax(sdk.controlLock(cmd));
}
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 f1121bb..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,6 +5,7 @@
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;
@@ -233,7 +234,7 @@
* @淇敼浜哄拰鍏跺畠淇℃伅
*/
@Override
- // @SdkOperate
+ @SdkOperate
public boolean PTZControlWithSpeed(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
boolean enable = cmd.isEnable();
@@ -630,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;//浼樺厛绾т綆鏃犳硶涓婇攣
}
}
}
diff --git a/ard-work/target/classes/com/ruoyi/device/hiksdk/controller/SdkController.class b/ard-work/target/classes/com/ruoyi/device/hiksdk/controller/SdkController.class
index d484177..b442fd2 100644
--- a/ard-work/target/classes/com/ruoyi/device/hiksdk/controller/SdkController.class
+++ b/ard-work/target/classes/com/ruoyi/device/hiksdk/controller/SdkController.class
Binary files differ
diff --git a/ard-work/target/classes/com/ruoyi/device/hiksdk/service/impl/hikClientServiceImpl.class b/ard-work/target/classes/com/ruoyi/device/hiksdk/service/impl/hikClientServiceImpl.class
index dc7b4af..1993ea6 100644
--- a/ard-work/target/classes/com/ruoyi/device/hiksdk/service/impl/hikClientServiceImpl.class
+++ b/ard-work/target/classes/com/ruoyi/device/hiksdk/service/impl/hikClientServiceImpl.class
Binary files differ
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
index dd4b35d..2f3b193 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -94,17 +94,17 @@
private Long roleId;
/** 鐩告満鎿嶆帶浼樺厛绾� */
- private String cameraPriority;
+ private Integer cameraPriority;
public SysUser()
{
}
- public String getCameraPriority() {
+ public Integer getCameraPriority() {
return cameraPriority;
}
- public void setCameraPriority(String cameraPriority) {
+ public void setCameraPriority(Integer cameraPriority) {
this.cameraPriority = cameraPriority;
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/SdkOperateAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/SdkOperateAspect.java
index 6f27a17..447bc7b 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/SdkOperateAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/SdkOperateAspect.java
@@ -4,14 +4,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.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.service.IArdCamerasService;
+import com.ruoyi.system.service.ISysUserService;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
+
import javax.annotation.Resource;
import java.util.Date;
@@ -26,6 +29,8 @@
@Resource
IArdCamerasService ardCamerasService;
+ @Resource
+ ISysUserService sysUserService;
@Pointcut("@annotation(com.ruoyi.common.annotation.SdkOperate)")
public void dsPointCut() {
@@ -48,27 +53,74 @@
* @param joinPoint 鍒囩偣
*/
public Boolean dataScopeFilter(ProceedingJoinPoint joinPoint) {
- //鑾峰彇璇锋眰鎺у埗鐩告満鐨勪俊鎭�
+ //鑾峰彇璇锋眰鎺у埗鐩告満鐨勫懡浠や俊鎭�
CameraCmd cmd = (CameraCmd) joinPoint.getArgs()[0];
+ String operator = cmd.getOperator();//鐢宠鑰�
+ /*鑾峰彇鐩告満褰撳墠鐨勮鎺т俊鎭�*/
ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cmd.getCameraId());
if (StringUtils.isNull(ardCameras)) {
return false;
}
- //浼樺厛绾ф瘮瀵�
- Date operatorExpired = ardCameras.getOperatorExpired();
- Date now = new Date();
- if (now.before(operatorExpired)) {
- //鏈繃鏈�
+ Date currentExpired = ardCameras.getOperatorExpired();//褰撳墠鐩告満鐨勮繃鏈熸椂闂�
+ String currentOperator = ardCameras.getOperatorId();//褰撳墠鐩告満鐨勬搷浣滆��
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if (StringUtils.isNull(loginUser)) {
- return false;//褰撳墠鐧诲綍鐢ㄦ埛涓虹┖涓嶅彲浠ユ帶鍒�
- }
- SysUser user = loginUser.getUser();
- if (!user.getUserId().equals(ardCameras.getOperatorId())) {
- return false;//鏈繃鏈熷苟涓斾笉鏄綋鍓嶇敤鎴峰垯涓嶅彲鎺�
+ if (StringUtils.isEmpty(currentOperator)) {
+ /*褰撳墠鐩告満鎺у埗鑰呬负绌烘椂锛岀洿鎺ユ洿鏂版帶鍒惰�咃紝骞跺厑璁�*/
+ ardCameras.setOperatorId(operator);
+ ardCamerasService.updateArdCameras(ardCameras);//鏇存柊鐩告満褰撳墠鎺у埗鑰�
+ return true;
+ } else {
+ if (operator.equals(currentOperator)) {
+ /*鍒ゆ柇鐢宠鑰呭凡缁忓湪鎺э紝鐩存帴鍏佽*/
+ return true;
+ } else {
+ Integer currentLevel = 0;//褰撳墠鐩告満鐨勬搷浣滆�呯殑浼樺厛绾�
+ if (sdkPriority.priorityMap.containsKey(currentOperator)) {
+ /*褰撳墠鎺у埗鑰呬负绯荤粺鎶ヨ鐢ㄦ埛*/
+ currentLevel = (Integer) sdkPriority.priorityMap.get(currentOperator);
+ } else {
+ /*褰撳墠鎺у埗鑰呬负鏅�氱敤鎴�*/
+ SysUser sysUser = sysUserService.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) {
+ /*濡傛灉鐢宠鑰呬紭鍏堢骇楂橈紝鍏佽鎺у埗*/
+ ardCameras.setOperatorId(operator);
+ ardCamerasService.updateArdCameras(ardCameras);//鏇存柊鐩告満褰撳墠鎺у埗鑰�
+ return true;
+ } else {
+ /*濡傛灉鐢宠鑰呬紭鍏堢骇浣庯紝鍒欏垽鏂繃鏈熸椂闂�*/
+ Date now = new Date();
+ if (currentExpired == null) {
+ /*褰撳墠鐩告満鏈厤缃繃鏈熸椂闂达紝鍙帶*/
+ ardCameras.setOperatorId(operator);
+ ardCamerasService.updateArdCameras(ardCameras);//鏇存柊鐩告満褰撳墠鎺у埗鑰�
+ return true;
+ }
+ else {
+ if (now.before(currentExpired)) {
+ /*鏃堕棿鏈繃鏈燂紝涓嶅彲鎺�*/
+ return false;
+ } else {
+ /*鏃堕棿杩囨湡锛屽彲浠ユ帶鍒讹紝鏇存柊鎺у埗鑰�*/
+ ardCameras.setOperatorId(operator);
+ ardCamerasService.updateArdCameras(ardCameras);//鏇存柊鐩告満褰撳墠鎺у埗鑰�
+ return true;
+ }
+ }
+ }
}
}
- return true;
}
}
diff --git a/ruoyi-framework/target/classes/com/ruoyi/framework/aspectj/SdkOperateAspect.class b/ruoyi-framework/target/classes/com/ruoyi/framework/aspectj/SdkOperateAspect.class
index b9019ef..60d7f20 100644
--- a/ruoyi-framework/target/classes/com/ruoyi/framework/aspectj/SdkOperateAspect.class
+++ b/ruoyi-framework/target/classes/com/ruoyi/framework/aspectj/SdkOperateAspect.class
Binary files differ
--
Gitblit v1.9.3