【修复】修复多个根节点组织机构情况下tree接口排序不一致的问题

dev
xuyuxiang 2025-09-07 22:23:33 +08:00
parent 64d121f702
commit 76ec2a7c79
2 changed files with 14 additions and 8 deletions

View File

@ -114,16 +114,18 @@ public class BizOrgServiceImpl extends ServiceImpl<BizOrgMapper, BizOrg> impleme
} else {
return CollectionUtil.newArrayList();
}
// 先根据排序码排序
List<BizOrg> bizOrgArrayList = CollectionUtil.sort(bizOrgSet, Comparator.comparingInt(BizOrg::getSortCode));
// 再重置排序码,解决每次相同排序码顺序不一致的问题
for (int i = 0; i < bizOrgArrayList.size(); i++) {
bizOrgArrayList.get(i).setSortCode(i);
}
// 修复使用稳定的排序方式首先按排序码排序然后按机构ID排序作为次级条件
List<BizOrg> bizOrgArrayList = new ArrayList<>(bizOrgSet);
bizOrgArrayList.sort(Comparator.comparingInt(BizOrg::getSortCode)
.thenComparing(BizOrg::getId)); // 添加ID作为次级排序条件
// 转换为TreeNode并构建树
List<TreeNode<String>> treeNodeList = bizOrgArrayList.stream().map(bizOrg ->
new TreeNode<>(bizOrg.getId(), bizOrg.getParentId(),
bizOrg.getName(), bizOrg.getSortCode()).setExtra(JSONUtil.parseObj(bizOrg)))
new TreeNode<>(bizOrg.getId(), bizOrg.getParentId(),
bizOrg.getName(), bizOrg.getSortCode()).setExtra(JSONUtil.parseObj(bizOrg)))
.collect(Collectors.toList());
return TreeUtil.build(treeNodeList, "0");
}

View File

@ -50,6 +50,7 @@ import vip.xiaonuo.sys.modular.user.entity.SysUser;
import vip.xiaonuo.sys.modular.user.enums.SysUserStatusEnum;
import vip.xiaonuo.sys.modular.user.service.SysUserService;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
@ -100,6 +101,9 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
@Override
public List<Tree<String>> tree() {
List<SysOrg> sysOrgList = this.getAllOrgList();
// 使用稳定的排序方式首先按排序码排序然后按机构ID排序作为次级条件
sysOrgList.sort(Comparator.comparingInt(SysOrg::getSortCode)
.thenComparing(SysOrg::getId)); // 添加ID作为次级排序条件
List<TreeNode<String>> treeNodeList = sysOrgList.stream().map(sysOrg ->
new TreeNode<>(sysOrg.getId(), sysOrg.getParentId(),
sysOrg.getName(), sysOrg.getSortCode()).setExtra(JSONUtil.parseObj(sysOrg)))