package com.ruoyi.framework.aspectj; import com.ruoyi.common.annotation.SdkOperate; import com.ruoyi.common.core.domain.AjaxResult; 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.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.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.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * SDK控制处理 * * @author ruoyi */ @Aspect @Component public class SdkOperateAspect { @Resource IArdCamerasService ardCamerasService; @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]; 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;//未过期并且不是当前用户则不可控 } } return true; } }