From a4fe077a231ed2ae0094af0fc6fa0735b764c862 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期五, 28 六月 2024 12:49:58 +0800 Subject: [PATCH] update 优化 大数据量下join卡顿问题 使用子查询提高性能 --- ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java | 44 ++++++++++++++++++++++++++++++++++---------- 1 files changed, 34 insertions(+), 10 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java index 8a2b939..01fb564 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java @@ -37,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; /** * 瑙掕壊 涓氬姟灞傚鐞� @@ -80,7 +81,6 @@ .between(params.get("beginTime") != null && params.get("endTime") != null, "r.create_time", params.get("beginTime"), params.get("endTime")) .orderByAsc("r.role_sort").orderByAsc("r.create_time"); - ; return wrapper; } @@ -92,14 +92,24 @@ */ @Override public List<SysRoleVo> selectRolesByUserId(Long userId) { - List<SysRoleVo> userRoles = baseMapper.selectRolePermissionByUserId(userId); + return baseMapper.selectRolesByUserId(userId); + } + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊鍒楄〃(鍖呭惈琚巿鏉冪姸鎬�) + * + * @param userId 鐢ㄦ埛ID + * @return 瑙掕壊鍒楄〃 + */ + @Override + public List<SysRoleVo> selectRolesAuthByUserId(Long userId) { + List<SysRoleVo> userRoles = baseMapper.selectRolesByUserId(userId); List<SysRoleVo> roles = selectRoleAll(); + // 浣跨敤HashSet鎻愰珮鏌ユ壘鏁堢巼 + Set<Long> userRoleIds = userRoles.stream().map(SysRoleVo::getRoleId).collect(Collectors.toSet()); for (SysRoleVo role : roles) { - for (SysRoleVo userRole : userRoles) { - if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) { - role.setFlag(true); - break; - } + if (userRoleIds.contains(role.getRoleId())) { + role.setFlag(true); } } return roles; @@ -113,7 +123,7 @@ */ @Override public Set<String> selectRolePermissionByUserId(Long userId) { - List<SysRoleVo> perms = baseMapper.selectRolePermissionByUserId(userId); + List<SysRoleVo> perms = baseMapper.selectRolesByUserId(userId); Set<String> permsSet = new HashSet<>(); for (SysRoleVo perm : perms) { if (ObjectUtil.isNotNull(perm)) { @@ -141,7 +151,8 @@ */ @Override public List<Long> selectRoleListByUserId(Long userId) { - return baseMapper.selectRoleListByUserId(userId); + List<SysRoleVo> list = baseMapper.selectRolesByUserId(userId); + return StreamUtils.toList(list, SysRoleVo::getRoleId); } /** @@ -153,6 +164,19 @@ @Override public SysRoleVo selectRoleById(Long roleId) { return baseMapper.selectRoleById(roleId); + } + + /** + * 閫氳繃瑙掕壊ID涓叉煡璇㈣鑹� + * + * @param roleIds 瑙掕壊ID涓� + * @return 瑙掕壊鍒楄〃淇℃伅 + */ + @Override + public List<SysRoleVo> selectRoleByIds(List<Long> roleIds) { + return baseMapper.selectRoleList(new QueryWrapper<SysRole>() + .eq("r.status", UserConstants.ROLE_NORMAL) + .in(CollUtil.isNotEmpty(roleIds), "r.role_id", roleIds)); } /** @@ -393,7 +417,7 @@ roleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, ids)); // 鍒犻櫎瑙掕壊涓庨儴闂ㄥ叧鑱� roleDeptMapper.delete(new LambdaQueryWrapper<SysRoleDept>().in(SysRoleDept::getRoleId, ids)); - return baseMapper.deleteBatchIds(ids); + return baseMapper.deleteByIds(ids); } /** -- Gitblit v1.9.3