org_code 结构 0 和 1 为顶级
/**
* 获取组织管理树
*/
public ResponseUtil treeOrg() {
Map<String, Object> where = new HashMap<String, Object>();
List<OrgInfo> infoList = orgInfoMapper.list(where);
List<OrgInfo> topList = new ArrayList<>();
for (OrgInfo orgInfo : infoList) {
//获取顶级
if (orgInfo.getOrgCode().split("\\.").length == 1) {
topList.add(orgInfo);
}
}
//调取递归方法
this.getChildren(topList, infoList);
return ResponseUtil.success("", topList);
}
/**
* 递归获取子集
*/
public void getChildren(List<OrgInfo> topList, List<OrgInfo> infoList) {
for (OrgInfo topInfo : topList) {
List<OrgInfo> childInfo = new ArrayList<>();
//获取下级 下级截取掉最后一个.及之后的数据与上级相等
for (OrgInfo orgInfo : infoList) {
//字符串转数组
String[] infoArr = orgInfo.getOrgCode().split("\\.");
//截取掉数组最后一个元素
String[] infoArrNew = Arrays.copyOf(infoArr, infoArr.length - 1);
//数组转为字符串 与上级判断是否相等
if (String.join(".", infoArrNew).equals(topInfo.getOrgCode())) {
childInfo.add(orgInfo);
}
}
if (childInfo.size() > 0) {
topInfo.setChildren(childInfo);
} else {
topInfo.setChildren(null);
}
this.getChildren(childInfo, infoList);
}
}