package com.ruoyi.framework.aspectj; 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.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.apache.ibatis.jdbc.Null; 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; /** * SDK控制处理 * * @author ruoyi */ @Aspect @Component public class SdkOperateAspect { @Resource IArdCamerasService ardCamerasService; @Resource ISysUserService sysUserService; @Pointcut("@annotation(com.ruoyi.common.annotation.SdkOperate)") public void dsPointCut() { } @Around("dsPointCut()") public Object around(ProceedingJoinPoint point) throws Throwable { Boolean resultMap = dataScopeFilter(point); if (resultMap) { return point.proceed(); } else { return false;//代替目标方法的返回值 } } /** * 操控判断逻辑 * * @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 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 (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); ardCameras.setOperatorExpired(null); ardCamerasService.updateArdCameras(ardCameras);//更新相机当前控制者 return true; } else { /*如果申请者优先级低,则判断过期时间*/ Date now = new Date(); if (currentExpired == null) { /*当前相机未配置过期时间,可控*/ ardCameras.setOperatorId(operator); ardCameras.setOperatorExpired(null); ardCamerasService.updateArdCameras(ardCameras);//更新相机当前控制者 return true; } else { if (now.before(currentExpired)) { /*时间未过期,不可控*/ return false; } else { /*时间过期,可以控制,更新控制者*/ ardCameras.setOperatorId(operator); ardCamerasService.updateArdCameras(ardCameras);//更新相机当前控制者 return true; } } } } } } } }