update 优化 数据权限查询增加缓存

This commit is contained in:
疯狂的狮子Li 2024-11-11 13:30:58 +08:00
parent d2ffbfb80b
commit a82ed1e9dd
5 changed files with 46 additions and 16 deletions

View File

@ -60,6 +60,16 @@ public interface CacheNames {
*/ */
String SYS_OSS = "sys_oss#30d"; String SYS_OSS = "sys_oss#30d";
/**
* 角色自定义权限
*/
String SYS_ROLE_CUSTOM = "sys_role_custom#30d";
/**
* 部门及以下权限
*/
String SYS_DEPT_AND_CHILD = "sys_dept_and_child#30d";
/** /**
* OSS配置 * OSS配置
*/ */

View File

@ -15,28 +15,32 @@ import java.util.function.Function;
public class ObjectUtils extends ObjectUtil { public class ObjectUtils extends ObjectUtil {
/** /**
* 如果对象不为空则获取对象中的某个字段 * 如果对象不为空则获取对象中的某个字段 ObjectUtils.notNullGetter(user, User::getName);
* <p> *
*
* <code>
* <p> public class User {
* <p> private String name;
* <p> // 省略 getter/setter
* <p> }
* </code>
* <code>
* <p> User user = userService.queryById(userId);
* <p> String name = ObjectUtils.notNullGetter(user,User::getName);
* </code>
* @param obj 对象 * @param obj 对象
* @param func 获取方法 * @param func 获取方法
* @return 对象字段 * @return 对象字段
*/ */
public static <T,E> E notNullGetter(T obj, Function<T,E> func) { public static <T, E> E notNullGetter(T obj, Function<T, E> func) {
if (isNotNull(obj) && isNotNull(func)) { if (isNotNull(obj) && isNotNull(func)) {
return func.apply(obj); return func.apply(obj);
} }
return null; return null;
} }
/**
* 如果对象不为空则获取对象中的某个字段 ObjectUtils.notNullGetter(user, User::getName, "");
*
* @param obj 对象
* @param func 获取方法
* @param defaultValue 默认值
* @return 对象字段
*/
public static <T, E> E notNullGetter(T obj, Function<T, E> func, E defaultValue) {
if (isNotNull(obj) && isNotNull(func)) {
return func.apply(obj);
}
return defaultValue;
}
} }

View File

@ -5,12 +5,14 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.system.domain.SysDept; import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.SysRoleDept; import org.dromara.system.domain.SysRoleDept;
import org.dromara.system.mapper.SysDeptMapper; import org.dromara.system.mapper.SysDeptMapper;
import org.dromara.system.mapper.SysRoleDeptMapper; import org.dromara.system.mapper.SysRoleDeptMapper;
import org.dromara.system.service.ISysDataScopeService; import org.dromara.system.service.ISysDataScopeService;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@ -36,6 +38,7 @@ public class SysDataScopeServiceImpl implements ISysDataScopeService {
* @param roleId 角色Id * @param roleId 角色Id
* @return 部门Id组 * @return 部门Id组
*/ */
@Cacheable(cacheNames = CacheNames.SYS_ROLE_CUSTOM, key = "#roleId")
@Override @Override
public String getRoleCustom(Long roleId) { public String getRoleCustom(Long roleId) {
if (ObjectUtil.isNull(roleId)) { if (ObjectUtil.isNull(roleId)) {
@ -57,6 +60,7 @@ public class SysDataScopeServiceImpl implements ISysDataScopeService {
* @param deptId 部门Id * @param deptId 部门Id
* @return 部门Id组 * @return 部门Id组
*/ */
@Cacheable(cacheNames = CacheNames.SYS_DEPT_AND_CHILD, key = "#deptId")
@Override @Override
public String getDeptAndChild(Long deptId) { public String getDeptAndChild(Long deptId) {
if (ObjectUtil.isNull(deptId)) { if (ObjectUtil.isNull(deptId)) {

View File

@ -27,6 +27,7 @@ import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.service.ISysDeptService; import org.dromara.system.service.ISysDeptService;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
@ -250,6 +251,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
* @param bo 部门信息 * @param bo 部门信息
* @return 结果 * @return 结果
*/ */
@CacheEvict(cacheNames = CacheNames.SYS_DEPT_AND_CHILD, allEntries = true)
@Override @Override
public int insertDept(SysDeptBo bo) { public int insertDept(SysDeptBo bo) {
SysDept info = baseMapper.selectById(bo.getParentId()); SysDept info = baseMapper.selectById(bo.getParentId());
@ -268,7 +270,10 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
* @param bo 部门信息 * @param bo 部门信息
* @return 结果 * @return 结果
*/ */
@CacheEvict(cacheNames = CacheNames.SYS_DEPT, key = "#bo.deptId") @Caching(evict = {
@CacheEvict(cacheNames = CacheNames.SYS_DEPT, key = "#bo.deptId"),
@CacheEvict(cacheNames = CacheNames.SYS_DEPT_AND_CHILD, allEntries = true)
})
@Override @Override
public int updateDept(SysDeptBo bo) { public int updateDept(SysDeptBo bo) {
SysDept dept = MapstructUtils.convert(bo, SysDept.class); SysDept dept = MapstructUtils.convert(bo, SysDept.class);
@ -341,7 +346,10 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
* @param deptId 部门ID * @param deptId 部门ID
* @return 结果 * @return 结果
*/ */
@CacheEvict(cacheNames = CacheNames.SYS_DEPT, key = "#deptId") @Caching(evict = {
@CacheEvict(cacheNames = CacheNames.SYS_DEPT, key = "#deptId"),
@CacheEvict(cacheNames = CacheNames.SYS_DEPT_AND_CHILD, key = "#deptId")
})
@Override @Override
public int deleteDeptById(Long deptId) { public int deleteDeptById(Long deptId) {
return baseMapper.deleteById(deptId); return baseMapper.deleteById(deptId);

View File

@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
@ -33,6 +34,7 @@ import org.dromara.system.mapper.SysRoleMapper;
import org.dromara.system.mapper.SysRoleMenuMapper; import org.dromara.system.mapper.SysRoleMenuMapper;
import org.dromara.system.mapper.SysUserRoleMapper; import org.dromara.system.mapper.SysUserRoleMapper;
import org.dromara.system.service.ISysRoleService; import org.dromara.system.service.ISysRoleService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -328,6 +330,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
* @param bo 角色信息 * @param bo 角色信息
* @return 结果 * @return 结果
*/ */
@CacheEvict(cacheNames = CacheNames.SYS_ROLE_CUSTOM, key = "#bo.roleId")
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int authDataScope(SysRoleBo bo) { public int authDataScope(SysRoleBo bo) {
@ -404,6 +407,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
* @param roleIds 需要删除的角色ID * @param roleIds 需要删除的角色ID
* @return 结果 * @return 结果
*/ */
@CacheEvict(cacheNames = CacheNames.SYS_ROLE_CUSTOM, allEntries = true)
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int deleteRoleByIds(Long[] roleIds) { public int deleteRoleByIds(Long[] roleIds) {