1.部门表结构
CREATE TABLE `dept_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `dept_code` varchar(32) DEFAULT NULL COMMENT '部门编号', `dept_name` varchar(64) DEFAULT NULL COMMENT '部门名称', `pcode` varchar(32) DEFAULT NULL COMMENT '父部门code', `creator_id` int(11) DEFAULT NULL, `gmt_create` timestamp NULL DEFAULT NULL, `update_id` int(11) DEFAULT NULL, `gmt_update` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
2.递归实现列表层级集合
public List<DeptInfo> getLevelDeptInfoList() {
DeptInfo deptInfo = new DeptInfo();
deptInfo.setPageNum(null);
deptInfo.setPageSize(null);
List<DeptInfo> deptInfos = deptInfoMapper.getDeptInfoList(deptInfo);
//层级集合
List<DeptInfo> rootDeptInfos = new ArrayList<>();
if (!CollectionUtils.isEmpty(deptInfos)) {
for (DeptInfo deptInfo1:deptInfos) {
if (StringUtils.isBlank(deptInfo1.getPcode())) {
rootDeptInfos.add(deptInfo1);
}
}
for (DeptInfo deptInfo1:rootDeptInfos) {
deptInfo1.setChildDeptList(getChild(deptInfo1.getId().toString(),deptInfos));
}
}
return rootDeptInfos;
}
/**
* @Author ldg
* @param id 顶层部门的id
* @param deptInfos 所有部门
* @return
*/
private List<DeptInfo> getChild(String id,List<DeptInfo> deptInfos){
List<DeptInfo> childList = new ArrayList<>();
for (DeptInfo deptInfo:deptInfos) {
if (StringUtils.isNotBlank(deptInfo.getPcode())) {
if (deptInfo.getPcode().equals(id)) {
childList.add(deptInfo);
}
}
}
for (DeptInfo deptInfo:childList) {
deptInfo.setChildDeptList(getChild(deptInfo.getId().toString(),deptInfos));
}
if (childList.size() == 0){
return null;
}
return childList;
}