fix: 优化权限查询

This commit is contained in:
tangwei 2026-06-04 18:17:30 +08:00
parent 820eb37548
commit 1db7cc5075

View File

@ -172,6 +172,7 @@ public class SysUserDataScopeServiceImpl extends ServiceImpl<SysUserDataScopeMap
// 3. 批量查询各类资源的名称 // 3. 批量查询各类资源的名称
Map<String, String> orgNameMap = new HashMap<>(); Map<String, String> orgNameMap = new HashMap<>();
Map<String, String> rvcdOrderMap = new HashMap<>();
// 3.1 查询流域名称 (BASIN) // 3.1 查询流域名称 (BASIN)
if (groupedByType.containsKey("RVCD")) { if (groupedByType.containsKey("RVCD")) {
@ -181,8 +182,30 @@ public class SysUserDataScopeServiceImpl extends ServiceImpl<SysUserDataScopeMap
.collect(Collectors.toSet()); .collect(Collectors.toSet());
if (CollUtil.isNotEmpty(rvcds)) { if (CollUtil.isNotEmpty(rvcds)) {
List<SdRvcdDic> basins = rvcdDicMapper.selectBatchIds(rvcds); List<SdRvcdDic> dropdownBasins = rvcdDicMapper.selectRegDropdown(null, null);
basins.forEach(basin -> orgNameMap.put(basin.getRvcd(), basin.getRvnm())); Set<String> handledRvcds = new HashSet<>();
int dropdownOrder = 0;
for (SdRvcdDic basin : dropdownBasins) {
dropdownOrder++;
if (rvcds.contains(basin.getRvcd())) {
orgNameMap.put(basin.getRvcd(), basin.getRvnm());
rvcdOrderMap.put(basin.getRvcd(), String.format("%010d", dropdownOrder));
handledRvcds.add(basin.getRvcd());
}
}
Set<String> missingRvcds = rvcds.stream()
.filter(rvcd -> !handledRvcds.contains(rvcd))
.collect(Collectors.toSet());
if (CollUtil.isNotEmpty(missingRvcds)) {
List<SdRvcdDic> basins = rvcdDicMapper.selectBatchIds(missingRvcds);
basins.forEach(basin -> {
orgNameMap.put(basin.getRvcd(), basin.getRvnm());
rvcdOrderMap.put(basin.getRvcd(), String.format("ROOT-%010d", basin.getOrderIndex() == null ? Integer.MAX_VALUE : basin.getOrderIndex()));
});
}
} }
} }
@ -251,6 +274,21 @@ public class SysUserDataScopeServiceImpl extends ServiceImpl<SysUserDataScopeMap
voList.add(vo); voList.add(vo);
} }
voList.sort((left, right) -> {
boolean leftRvcd = "RVCD".equals(left.getOrgType());
boolean rightRvcd = "RVCD".equals(right.getOrgType());
if (leftRvcd && rightRvcd) {
String leftKey = rvcdOrderMap.getOrDefault(left.getOrgId(), "9999999999");
String rightKey = rvcdOrderMap.getOrDefault(right.getOrgId(), "9999999999");
int compare = leftKey.compareTo(rightKey);
if (compare != 0) {
return compare;
}
return StrUtil.nullToDefault(left.getOrgId(), "").compareTo(StrUtil.nullToDefault(right.getOrgId(), ""));
}
return 0;
});
return voList; return voList;
} }