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