mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-10-31 21:00:53 +08:00 
			
		
		
		
	perf: 对获取路由信息接口增加缓存处理
1.优化 Spring Cache 配置 2.暂时移除 Jackson 针对数值类型:Long、BigInteger、BigDecimal 的 toString 处理(TreeUtil 疑似在字符串类型 parentId 时会出现转换异常)
This commit is contained in:
		| @@ -16,9 +16,8 @@ | ||||
|  | ||||
| package top.charles7c.cnadmin.auth.service.impl; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.Set; | ||||
| import java.util.*; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| import lombok.RequiredArgsConstructor; | ||||
|  | ||||
| @@ -44,7 +43,6 @@ import top.charles7c.cnadmin.common.util.TreeUtils; | ||||
| import top.charles7c.cnadmin.common.util.helper.LoginHelper; | ||||
| import top.charles7c.cnadmin.common.util.validate.CheckUtils; | ||||
| import top.charles7c.cnadmin.system.model.entity.UserDO; | ||||
| import top.charles7c.cnadmin.system.model.query.MenuQuery; | ||||
| import top.charles7c.cnadmin.system.model.vo.DeptDetailVO; | ||||
| import top.charles7c.cnadmin.system.model.vo.MenuVO; | ||||
| import top.charles7c.cnadmin.system.service.DeptService; | ||||
| @@ -91,21 +89,20 @@ public class LoginServiceImpl implements LoginService { | ||||
|  | ||||
|     @Override | ||||
|     public List<RouteVO> buildRouteTree(Long userId) { | ||||
|         Set<String> roleSet = permissionService.listRoleCodeByUserId(userId); | ||||
|         if (CollUtil.isEmpty(roleSet)) { | ||||
|         Set<String> roleCodeSet = permissionService.listRoleCodeByUserId(userId); | ||||
|         if (CollUtil.isEmpty(roleCodeSet)) { | ||||
|             return new ArrayList<>(0); | ||||
|         } | ||||
|  | ||||
|         // 查询菜单列表 | ||||
|         List<MenuVO> menuList; | ||||
|         if (roleSet.contains(SysConsts.ADMIN_ROLE_CODE)) { | ||||
|             MenuQuery menuQuery = new MenuQuery(); | ||||
|             menuQuery.setStatus(DisEnableStatusEnum.ENABLE.getValue()); | ||||
|             menuList = menuService.list(menuQuery, null); | ||||
|         Set<MenuVO> menuSet = new LinkedHashSet<>(); | ||||
|         if (roleCodeSet.contains(SysConsts.ADMIN_ROLE_CODE)) { | ||||
|             menuSet.addAll(menuService.list()); | ||||
|         } else { | ||||
|             menuList = menuService.listByUserId(userId); | ||||
|             roleCodeSet.forEach(roleCode -> menuSet.addAll(menuService.listByRoleCode(roleCode))); | ||||
|         } | ||||
|         menuList.removeIf(m -> MenuTypeEnum.BUTTON.equals(m.getType())); | ||||
|         List<MenuVO> menuList = | ||||
|             menuSet.stream().filter(m -> !MenuTypeEnum.BUTTON.equals(m.getType())).collect(Collectors.toList()); | ||||
|  | ||||
|         // 构建路由树 | ||||
|         TreeField treeField = MenuVO.class.getDeclaredAnnotation(TreeField.class); | ||||
|   | ||||
| @@ -42,11 +42,11 @@ public interface MenuMapper extends BaseMapper<MenuDO> { | ||||
|     Set<String> selectPermissionByUserId(@Param("userId") Long userId); | ||||
|  | ||||
|     /** | ||||
|      * 根据用户 ID 查询 | ||||
|      * 根据角色编码查询 | ||||
|      * | ||||
|      * @param userId | ||||
|      *            用户 ID | ||||
|      * @param roleCode | ||||
|      *            角色编码 | ||||
|      * @return 菜单列表 | ||||
|      */ | ||||
|     List<MenuDO> selectListByUserId(@Param("userId") Long userId); | ||||
|     List<MenuDO> selectListByRoleCode(@Param("roleCode") String roleCode); | ||||
| } | ||||
|   | ||||
| @@ -42,11 +42,18 @@ public interface MenuService extends BaseService<MenuVO, MenuVO, MenuQuery, Menu | ||||
|     Set<String> listPermissionByUserId(Long userId); | ||||
|  | ||||
|     /** | ||||
|      * 根据用户 ID 查询 | ||||
|      * 根据角色编码查询 | ||||
|      * | ||||
|      * @param userId | ||||
|      *            用户 ID | ||||
|      * @param roleCode | ||||
|      *            角色编码 | ||||
|      * @return 菜单列表 | ||||
|      */ | ||||
|     List<MenuVO> listByUserId(Long userId); | ||||
|     List<MenuVO> listByRoleCode(String roleCode); | ||||
|  | ||||
|     /** | ||||
|      * 查询所有菜单 | ||||
|      * | ||||
|      * @return 菜单列表 | ||||
|      */ | ||||
|     List<MenuVO> list(); | ||||
| } | ||||
|   | ||||
| @@ -20,12 +20,16 @@ import java.util.*; | ||||
|  | ||||
| import lombok.RequiredArgsConstructor; | ||||
|  | ||||
| import org.springframework.cache.annotation.CacheConfig; | ||||
| import org.springframework.cache.annotation.CacheEvict; | ||||
| import org.springframework.cache.annotation.Cacheable; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import cn.hutool.core.bean.BeanUtil; | ||||
|  | ||||
| import top.charles7c.cnadmin.common.base.BaseServiceImpl; | ||||
| import top.charles7c.cnadmin.common.constant.CacheConsts; | ||||
| import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum; | ||||
| import top.charles7c.cnadmin.common.util.validate.CheckUtils; | ||||
| import top.charles7c.cnadmin.system.mapper.MenuMapper; | ||||
| @@ -43,10 +47,12 @@ import top.charles7c.cnadmin.system.service.MenuService; | ||||
|  */ | ||||
| @Service | ||||
| @RequiredArgsConstructor | ||||
| @CacheConfig(cacheNames = CacheConsts.MENU_KEY_PREFIX) | ||||
| public class MenuServiceImpl extends BaseServiceImpl<MenuMapper, MenuDO, MenuVO, MenuVO, MenuQuery, MenuRequest> | ||||
|     implements MenuService { | ||||
|  | ||||
|     @Override | ||||
|     @CacheEvict(allEntries = true) | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public Long add(MenuRequest request) { | ||||
|         String title = request.getTitle(); | ||||
| @@ -58,6 +64,7 @@ public class MenuServiceImpl extends BaseServiceImpl<MenuMapper, MenuDO, MenuVO, | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @CacheEvict(allEntries = true) | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void update(MenuRequest request, Long id) { | ||||
|         String title = request.getTitle(); | ||||
| @@ -68,6 +75,7 @@ public class MenuServiceImpl extends BaseServiceImpl<MenuMapper, MenuDO, MenuVO, | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @CacheEvict(allEntries = true) | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void delete(List<Long> ids) { | ||||
|         baseMapper.lambdaUpdate().in(MenuDO::getParentId, ids).remove(); | ||||
| @@ -80,13 +88,22 @@ public class MenuServiceImpl extends BaseServiceImpl<MenuMapper, MenuDO, MenuVO, | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<MenuVO> listByUserId(Long userId) { | ||||
|         List<MenuDO> menuList = baseMapper.selectListByUserId(userId); | ||||
|     @Cacheable(key = "#roleCode") | ||||
|     public List<MenuVO> listByRoleCode(String roleCode) { | ||||
|         List<MenuDO> menuList = baseMapper.selectListByRoleCode(roleCode); | ||||
|         List<MenuVO> list = BeanUtil.copyToList(menuList, MenuVO.class); | ||||
|         list.forEach(this::fill); | ||||
|         return list; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Cacheable(key = "'ALL'") | ||||
|     public List<MenuVO> list() { | ||||
|         MenuQuery menuQuery = new MenuQuery(); | ||||
|         menuQuery.setStatus(DisEnableStatusEnum.ENABLE.getValue()); | ||||
|         return super.list(menuQuery, null); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 检查名称是否存在 | ||||
|      * | ||||
|   | ||||
| @@ -21,6 +21,7 @@ import java.util.stream.Collectors; | ||||
|  | ||||
| import lombok.RequiredArgsConstructor; | ||||
|  | ||||
| import org.springframework.cache.annotation.CacheEvict; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| @@ -30,6 +31,7 @@ import cn.hutool.core.util.ObjectUtil; | ||||
|  | ||||
| import top.charles7c.cnadmin.auth.service.OnlineUserService; | ||||
| import top.charles7c.cnadmin.common.base.BaseServiceImpl; | ||||
| import top.charles7c.cnadmin.common.constant.CacheConsts; | ||||
| import top.charles7c.cnadmin.common.constant.SysConsts; | ||||
| import top.charles7c.cnadmin.common.enums.DataScopeEnum; | ||||
| import top.charles7c.cnadmin.common.enums.DataTypeEnum; | ||||
| @@ -82,6 +84,7 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleVO, | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @CacheEvict(cacheNames = CacheConsts.MENU_KEY_PREFIX, key = "#request.code == 'admin' ? 'ALL' : #request.code") | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void update(RoleRequest request, Long id) { | ||||
|         String name = request.getName(); | ||||
| @@ -167,15 +170,15 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleVO, | ||||
|  | ||||
|     @Override | ||||
|     public Set<String> listCodeByUserId(Long userId) { | ||||
|         List<Long> roleIds = userRoleService.listRoleIdByUserId(userId); | ||||
|         List<RoleDO> roleList = baseMapper.lambdaQuery().select(RoleDO::getCode).in(RoleDO::getId, roleIds).list(); | ||||
|         List<Long> roleIdList = userRoleService.listRoleIdByUserId(userId); | ||||
|         List<RoleDO> roleList = baseMapper.lambdaQuery().select(RoleDO::getCode).in(RoleDO::getId, roleIdList).list(); | ||||
|         return roleList.stream().map(RoleDO::getCode).collect(Collectors.toSet()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Set<RoleDTO> listByUserId(Long userId) { | ||||
|         List<Long> roleIds = userRoleService.listRoleIdByUserId(userId); | ||||
|         List<RoleDO> roleList = baseMapper.lambdaQuery().in(RoleDO::getId, roleIds).list(); | ||||
|         List<Long> roleIdList = userRoleService.listRoleIdByUserId(userId); | ||||
|         List<RoleDO> roleList = baseMapper.lambdaQuery().in(RoleDO::getId, roleIdList).list(); | ||||
|         return new HashSet<>(BeanUtil.copyToList(roleList, RoleDTO.class)); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -14,14 +14,12 @@ | ||||
|           AND t3.`status` = 1 | ||||
|     </select> | ||||
|  | ||||
|     <select id="selectListByUserId" resultType="top.charles7c.cnadmin.system.model.entity.MenuDO"> | ||||
|     <select id="selectListByRoleCode" resultType="top.charles7c.cnadmin.system.model.entity.MenuDO"> | ||||
|         SELECT t1.* | ||||
|         FROM `sys_menu` AS t1 | ||||
|             LEFT JOIN `sys_role_menu` AS t2 ON t2.`menu_id` = t1.`id` | ||||
|             LEFT JOIN `sys_role` AS t3 ON t3.`id` = t2.`role_id` | ||||
|             LEFT JOIN `sys_user_role` AS t4 ON t4.`role_id` = t3.`id` | ||||
|             LEFT JOIN `sys_user` AS t5 ON t5.`id` = t4.`user_id` | ||||
|         WHERE t5.`id` = #{userId} | ||||
|         WHERE t3.`code` = #{roleCode} | ||||
|           AND t1.`status` = 1 | ||||
|           AND t3.`status` = 1 | ||||
|     </select> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user