✨ Introducing new features. 角色查询增加缓存,提高微服务多模块 数据权限查询效率

This commit is contained in:
冷冷 committed 2020-08-27 13:34:31 +08:00
1 parent 19490a6ccb
commit 87323975d2
5 files changed
+71 -9

No files matched your search

@@ -19,16 +19,20 @@
package com.pig4cloud.pigx.admin.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pig4cloud.pigx.admin.api.entity.SysRole;
import com.pig4cloud.pigx.admin.api.vo.RoleVO;
import com.pig4cloud.pigx.admin.service.SysRoleMenuService;
import com.pig4cloud.pigx.admin.service.SysRoleService;
import com.pig4cloud.pigx.common.core.constant.CacheConstants;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.log.annotation.SysLog;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@@ -51,6 +55,7 @@ public class SysRoleController {
/**
* 通过ID查询角色信息
*
* @param id ID
* @return 角色信息
*/
@@ -61,42 +66,49 @@ public class SysRoleController {
/**
* 添加角色
*
* @param sysRole 角色信息
* @return success、false
*/
@SysLog("添加角色")
@PostMapping
@PreAuthorize("@pms.hasPermission('sys_role_add')")
@CacheEvict(value = CacheConstants.ROLE_DETAILS, allEntries = true)
public R save(@Valid @RequestBody SysRole sysRole) {
return R.ok(sysRoleService.save(sysRole));
}
/**
* 修改角色
*
* @param sysRole 角色信息
* @return success/false
*/
@SysLog("修改角色")
@PutMapping
@PreAuthorize("@pms.hasPermission('sys_role_edit')")
@CacheEvict(value = CacheConstants.ROLE_DETAILS, allEntries = true)
public R update(@Valid @RequestBody SysRole sysRole) {
return R.ok(sysRoleService.updateById(sysRole));
}
/**
* 删除角色
*
* @param id
* @return
*/
@SysLog("删除角色")
@DeleteMapping("/{id}")
@PreAuthorize("@pms.hasPermission('sys_role_del')")
@CacheEvict(value = CacheConstants.ROLE_DETAILS, allEntries = true)
public R removeById(@PathVariable Integer id) {
return R.ok(sysRoleService.removeRoleById(id));
}
/**
* 获取角色列表
*
* @return 角色列表
*/
@GetMapping("/list")
@@ -106,6 +118,7 @@ public class SysRoleController {
/**
* 分页查询角色信息
*
* @param page 分页对象
* @return 分页对象
*/
@@ -116,6 +129,7 @@ public class SysRoleController {
/**
* 更新角色菜单
*
* @param roleVo 角色对象
* @return success、false
*/
@@ -123,18 +137,18 @@ public class SysRoleController {
@PutMapping("/menu")
@PreAuthorize("@pms.hasPermission('sys_role_perm')")
public R saveRoleMenus(@RequestBody RoleVO roleVo) {
SysRole sysRole = sysRoleService.getById(roleVo.getRoleId());
return R.ok(sysRoleMenuService.saveRoleMenus(sysRole.getRoleCode(), roleVo.getRoleId(), roleVo.getMenuIds()));
return R.ok(sysRoleService.updateRoleMenus(roleVo));
}
/**
* 通过角色ID 查询角色列表
*
* @param roleIdList 角色ID
* @return
*/
@PostMapping("/getRoleList")
public R getRoleList(@RequestBody List<String> roleIdList) {
return R.ok(sysRoleService.listByIds(roleIdList));
public R getRoleList(@RequestBody List<Integer> roleIdList) {
return R.ok(sysRoleService.findRolesByRoleIds(roleIdList, CollUtil.join(roleIdList, StrUtil.UNDERLINE)));
}
}
@@ -21,6 +21,7 @@ package com.pig4cloud.pigx.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pig4cloud.pigx.admin.api.entity.SysRole;
import com.pig4cloud.pigx.admin.api.vo.RoleVO;
import java.util.List;
@@ -36,16 +37,34 @@ public interface SysRoleService extends IService<SysRole> {
/**
* 通过用户ID,查询角色信息
*
* @param userId
* @return
*/
List<SysRole> findRolesByUserId(Integer userId);
/**
* 根据角色ID 查询角色列表
*
* @param roleIdList 角色ID列表
* @param key 缓存key
* @return
*/
List<SysRole> findRolesByRoleIds(List<Integer> roleIdList, String key);
/**
* 通过角色ID,删除角色
*
* @param id
* @return
*/
Boolean removeRoleById(Integer id);
/**
* 根据角色菜单列表
*
* @param roleVo 角色&菜单列表
* @return
*/
Boolean updateRoleMenus(RoleVO roleVo);
}
@@ -61,7 +61,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
private final SysRoleMenuMapper sysRoleMenuMapper;
@Override
@Cacheable(value = CacheConstants.MENU_DETAILS, key = "#roleId + '_menu'", unless = "#result.isEmpty()")
@Cacheable(value = CacheConstants.MENU_DETAILS, key = "#roleId", unless = "#result.isEmpty()")
public List<MenuVO> findMenuByRoleId(Integer roleId) {
return baseMapper.listMenusByRoleId(roleId);
}
@@ -58,7 +58,7 @@ public class SysRoleMenuServiceImpl extends ServiceImpl<SysRoleMenuMapper, SysRo
*/
@Override
@Transactional(rollbackFor = Exception.class)
@CacheEvict(value = CacheConstants.MENU_DETAILS, key = "#roleId + '_menu'")
@CacheEvict(value = CacheConstants.MENU_DETAILS, key = "#roleId")
public Boolean saveRoleMenus(String role, Integer roleId, String menuIds) {
this.remove(Wrappers.<SysRoleMenu>query().lambda().eq(SysRoleMenu::getRoleId, roleId));
@@ -23,10 +23,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pig4cloud.pigx.admin.api.entity.SysRole;
import com.pig4cloud.pigx.admin.api.entity.SysRoleMenu;
import com.pig4cloud.pigx.admin.api.vo.RoleVO;
import com.pig4cloud.pigx.admin.mapper.SysRoleMapper;
import com.pig4cloud.pigx.admin.mapper.SysRoleMenuMapper;
import com.pig4cloud.pigx.admin.service.SysRoleMenuService;
import com.pig4cloud.pigx.admin.service.SysRoleService;
import com.pig4cloud.pigx.common.core.constant.CacheConstants;
import lombok.AllArgsConstructor;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -44,10 +47,11 @@ import java.util.List;
@AllArgsConstructor
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {
private SysRoleMenuMapper sysRoleMenuMapper;
private SysRoleMenuService roleMenuService;
/**
* 通过用户ID,查询角色信息
*
* @param userId
* @return
*/
@@ -56,16 +60,41 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
return baseMapper.listRolesByUserId(userId);
}
/**
* 根据角色ID 查询角色列表,注意缓存删除
*
* @param roleIdList 角色ID列表
* @param key 缓存key
* @return
*/
@Override
@Cacheable(value = CacheConstants.ROLE_DETAILS, key = "#key")
public List<SysRole> findRolesByRoleIds(List<Integer> roleIdList, String key) {
return baseMapper.selectBatchIds(roleIdList);
}
/**
* 通过角色ID,删除角色,并清空角色菜单缓存
*
* @param id
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean removeRoleById(Integer id) {
sysRoleMenuMapper.delete(Wrappers.<SysRoleMenu>update().lambda().eq(SysRoleMenu::getRoleId, id));
roleMenuService.remove(Wrappers.<SysRoleMenu>update().lambda().eq(SysRoleMenu::getRoleId, id));
return this.removeById(id);
}
/**
* 根据角色菜单列表
*
* @param roleVo 角色&菜单列表
* @return
*/
@Override
public Boolean updateRoleMenus(RoleVO roleVo) {
SysRole sysRole = baseMapper.selectById(roleVo.getRoleId());
return roleMenuService.saveRoleMenus(sysRole.getRoleCode(), roleVo.getRoleId(), roleVo.getMenuIds());
}
}