|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.ruoyi.common.core.domain.entity.SysUser; | 
|---|
|  |  |  | import com.ruoyi.common.core.domain.model.LoginUser; | 
|---|
|  |  |  | import com.ruoyi.common.core.redis.RedisCache; | 
|---|
|  |  |  | import com.ruoyi.common.utils.DictUtils; | 
|---|
|  |  |  | 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 org.aspectj.lang.annotation.Around; | 
|---|
|  |  |  | import org.aspectj.lang.annotation.Aspect; | 
|---|
|  |  |  | import org.aspectj.lang.annotation.Pointcut; | 
|---|
|  |  |  | import org.aspectj.lang.reflect.MethodSignature; | 
|---|
|  |  |  | import org.springframework.stereotype.Component; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import javax.annotation.Resource; | 
|---|
|  |  |  | import java.lang.reflect.Method; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import static jdk.nashorn.internal.runtime.regexp.joni.Config.log; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * SDK控制处理 | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Aspect | 
|---|
|  |  |  | @Component | 
|---|
|  |  |  | @Slf4j(topic = "hikSdk") | 
|---|
|  |  |  | @Slf4j(topic = "sdk") | 
|---|
|  |  |  | public class SdkOperateAspect { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Resource | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Around("dsPointCut()") | 
|---|
|  |  |  | public Object around(ProceedingJoinPoint point) throws Throwable { | 
|---|
|  |  |  | MethodSignature signature = (MethodSignature) point.getSignature(); | 
|---|
|  |  |  | Method method = signature.getMethod(); | 
|---|
|  |  |  | Boolean result = controlScopeFilter(point); | 
|---|
|  |  |  | if (result) { | 
|---|
|  |  |  | log.debug("已获取相机控制权"); | 
|---|
|  |  |  | log.debug("已获取相机控制权--" + method.getName()); | 
|---|
|  |  |  | return point.proceed(); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | log.debug("未获取相机控制权"); | 
|---|
|  |  |  | log.debug("未获取相机控制权--" + method.getName()); | 
|---|
|  |  |  | return false;//代替目标方法的返回值 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | * @param joinPoint 切点 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public Boolean controlScopeFilter(ProceedingJoinPoint joinPoint) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取请求控制相机的命令信息 | 
|---|
|  |  |  | CameraCmd cmd = (CameraCmd) joinPoint.getArgs()[0]; | 
|---|
|  |  |  | String operator = cmd.getOperator();//申请者 | 
|---|
|  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | /*当前相机有人控制并且配置了过期时间,先判断优先级,优先级高允许控制*/ | 
|---|
|  |  |  | Integer currentLevel = 0;//当前相机的操作者的优先级 | 
|---|
|  |  |  | if (CamPriority.priorityMap.containsKey(currentOperator)) { | 
|---|
|  |  |  | String camerasPriority = DictUtils.getDictValue("cameras_priority", currentOperator); | 
|---|
|  |  |  | if(StringUtils.isNotEmpty(camerasPriority)) { | 
|---|
|  |  |  | /*当前控制者为系统报警用户*/ | 
|---|
|  |  |  | currentLevel = (Integer) CamPriority.priorityMap.get(currentOperator); | 
|---|
|  |  |  | currentLevel = Integer.valueOf(camerasPriority); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | /*当前控制者为普通用户*/ | 
|---|
|  |  |  | SysUser sysUser = sysUserService.selectUserById(currentOperator); | 
|---|
|  |  |  | currentLevel = sysUser.getCameraPriority(); | 
|---|
|  |  |  | if(StringUtils.isNull(sysUser)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | currentLevel = Integer.valueOf(sysUser.getCameraPriority()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Integer operatorLevel = 0;//获取申请者的优先级 | 
|---|
|  |  |  | if (CamPriority.priorityMap.containsKey(operator)) { | 
|---|
|  |  |  | String operatorPriority = DictUtils.getDictValue("cameras_priority", operator); | 
|---|
|  |  |  | if (StringUtils.isNotEmpty(operatorPriority)) { | 
|---|
|  |  |  | /*包含说明当前申请控制者为系统报警用户*/ | 
|---|
|  |  |  | operatorLevel = (Integer) CamPriority.priorityMap.get(operator); | 
|---|
|  |  |  | operatorLevel = Integer.valueOf(operatorPriority); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | /*否则申请控制者为当前登录用户*/ | 
|---|
|  |  |  | LoginUser loginUser = SecurityUtils.getLoginUser(); | 
|---|
|  |  |  | SysUser user = loginUser.getUser();//获取登录用户的信息 | 
|---|
|  |  |  | operatorLevel = user.getCameraPriority(); | 
|---|
|  |  |  | operatorLevel = Integer.valueOf(user.getCameraPriority()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /*申请者未控则判断优先级*/ | 
|---|
|  |  |  | if (operatorLevel > currentLevel) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|