diff --git a/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/SysUserDataScopeServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/SysUserDataScopeServiceImpl.java index 1f106acb..2ecb857f 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/SysUserDataScopeServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/SysUserDataScopeServiceImpl.java @@ -172,6 +172,7 @@ public class SysUserDataScopeServiceImpl extends ServiceImpl orgNameMap = new HashMap<>(); + Map rvcdOrderMap = new HashMap<>(); // 3.1 查询流域名称 (BASIN) if (groupedByType.containsKey("RVCD")) { @@ -181,8 +182,30 @@ public class SysUserDataScopeServiceImpl extends ServiceImpl basins = rvcdDicMapper.selectBatchIds(rvcds); - basins.forEach(basin -> orgNameMap.put(basin.getRvcd(), basin.getRvnm())); + List dropdownBasins = rvcdDicMapper.selectRegDropdown(null, null); + Set 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 missingRvcds = rvcds.stream() + .filter(rvcd -> !handledRvcds.contains(rvcd)) + .collect(Collectors.toSet()); + + if (CollUtil.isNotEmpty(missingRvcds)) { + List 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 { + 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; }