From a7c7965a518359a1c81bde0a8c451f2fc1cc25fe Mon Sep 17 00:00:00 2001
From: zhangjian <zhangjianrock@163.com>
Date: Fri, 07 Jul 2023 16:31:40 +0800
Subject: [PATCH] 无人机转发接口
---
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/SdkOperateAspect.java | 111 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 93 insertions(+), 18 deletions(-)
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..25cb772 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
@@ -1,19 +1,31 @@
package com.ruoyi.framework.aspectj;
+import com.ruoyi.common.annotation.SdkOperate;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.constant.CamPriority;
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 lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
+
+import javax.annotation.Nullable;
import javax.annotation.Resource;
+import java.lang.reflect.Method;
import java.util.Date;
+
+import static jdk.nashorn.internal.runtime.regexp.joni.Config.log;
/**
* SDK控制处理
@@ -22,10 +34,13 @@
*/
@Aspect
@Component
+@Slf4j(topic = "hikSdk")
public class SdkOperateAspect {
@Resource
IArdCamerasService ardCamerasService;
+ @Resource
+ ISysUserService sysUserService;
@Pointcut("@annotation(com.ruoyi.common.annotation.SdkOperate)")
public void dsPointCut() {
@@ -34,10 +49,14 @@
@Around("dsPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
- Boolean resultMap = dataScopeFilter(point);
- if (resultMap) {
+ MethodSignature signature = (MethodSignature) point.getSignature();
+ Method method = signature.getMethod();
+ Boolean result = controlScopeFilter(point);
+ if (result) {
+ log.debug("已获取相机控制权--" + method.getName());
return point.proceed();
} else {
+ log.debug("未获取相机控制权--" + method.getName());
return false;//代替目标方法的返回值
}
}
@@ -47,28 +66,84 @@
*
* @param joinPoint 切点
*/
- public Boolean dataScopeFilter(ProceedingJoinPoint joinPoint) {
- //获取请求控制相机的信息
+ public Boolean controlScopeFilter(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)) {
- //未过期
-
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if (StringUtils.isNull(loginUser)) {
- return false;//当前登录用户为空不可以控制
- }
- SysUser user = loginUser.getUser();
- if (!user.getUserId().equals(ardCameras.getOperatorId())) {
- return false;//未过期并且不是当前用户则不可控
+ Date currentExpired = ardCameras.getOperatorExpired();//当前相机的过期时间
+ String currentOperator = ardCameras.getOperatorId();//当前相机的操作者
+ /*先判断锁定时间*/
+ if (currentExpired == null) {
+ /*如果未配置锁定时间,任何人可控制*/
+ ardCameras.setOperatorId(operator);
+ ardCamerasService.updateArdCameras(ardCameras);//更新相机当前控制者
+ return true;
+ } else {
+ /*锁定时间配置了,判断当前操作者*/
+ if (StringUtils.isEmpty(currentOperator)) {
+ /*当前相机控制者为空时,任何人可控*/
+ ardCameras.setOperatorId(operator);
+ ardCamerasService.updateArdCameras(ardCameras);//更新相机当前控制者
+ return true;
+ } else {
+ /*判断是否本人继续控制*/
+ if (currentOperator.equals(operator)) {
+ return true;
+ } else {
+ /*当前相机有人控制并且配置了过期时间,先判断优先级,优先级高允许控制*/
+ Integer currentLevel = 0;//当前相机的操作者的优先级
+ if (CamPriority.priorityMap.containsKey(currentOperator)) {
+ /*当前控制者为系统报警用户*/
+ currentLevel = (Integer) CamPriority.priorityMap.get(currentOperator);
+ } else {
+ /*当前控制者为普通用户*/
+ SysUser sysUser = sysUserService.selectUserById(currentOperator);
+ currentLevel = sysUser.getCameraPriority();
+ }
+ Integer operatorLevel = 0;//获取申请者的优先级
+ if (CamPriority.priorityMap.containsKey(operator)) {
+ /*包含说明当前申请控制者为系统报警用户*/
+ operatorLevel = (Integer) CamPriority.priorityMap.get(operator);
+ } else {
+ /*否则申请控制者为当前登录用户*/
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ SysUser user = loginUser.getUser();//获取登录用户的信息
+ operatorLevel = user.getCameraPriority();
+ }
+ /*申请者未控则判断优先级*/
+ if (operatorLevel > currentLevel) {
+ /*如果申请者优先级高,允许控制*/
+ ardCameras.setOperatorId(operator);
+ ardCameras.setOperatorExpired(null);
+ ardCamerasService.updateArdCameras(ardCameras);//更新相机当前控制者
+ return true;
+ } else {
+ /*如果申请者优先级低,则判断过期时间*/
+ if (currentExpired == null) {
+ /*当前相机未配置过期时间,可控*/
+ ardCameras.setOperatorId(operator);
+ ardCameras.setOperatorExpired(null);
+ ardCamerasService.updateArdCameras(ardCameras);//更新相机当前控制者
+ return true;
+ } else {
+ if (new Date().before(currentExpired)) {
+ /*时间未过期,不可控*/
+ return false;
+ } else {
+ /*时间过期,可以控制,更新控制者*/
+ ardCameras.setOperatorId(operator);
+ ardCamerasService.updateArdCameras(ardCameras);//更新相机当前控制者
+ return true;
+ }
+ }
+ }
+ }
}
}
- return true;
}
}
--
Gitblit v1.9.3