首先很重要的是数据库的建表

CREATE TABLE `dept` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL COMMENT '部门名称',
`parent_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '父级部门id,0为顶级部门',
`state` int(11) unsigned DEFAULT '1' COMMENT '状态:1为启用,0为隐藏',
`is_parent` int(11) DEFAULT '0' COMMENT '是否为父级部门:1为是,0为不是',
`sort_order` int(11) DEFAULT NULL COMMENT '在分类中的排序',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`update_user` int(11) unsigned DEFAULT NULL COMMENT '修改人',
`company_id` int(11) unsigned DEFAULT NULL COMMENT '公司外键id',
PRIMARY KEY (`id`),
UNIQUE KEY `dept_company_id_name` (`company_id`,`name`) USING BTREE,
CONSTRAINT `fk_dept_company_id_on_id` FOREIGN KEY (`company_id`) REFERENCES `company` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COMMENT='部门表';
之后不管你dao层要用什么技术,总之都需要拿到所有部门信息的list吧,这里建议创建如下实体类来接收数据
public class DeptMenu {
private Integer id;
private String name;
private Integer parentId;
private Integer state;
private Integer isParent;
private Integer sortOrder;
private List<DeptMenu> children = new ArrayList<>();
}
最后就是service做的解析了
public List<DeptMenu> getAllDeptMenuByCompanyId(int companyId) {
List<DeptMenu> allDeptByCompanyId = deptMapper.getAllDeptByCompanyId(companyId);
if (allDeptByCompanyId == null)
{
return null;
}
for (DeptMenu deptMenu: allDeptByCompanyId){
Integer parentId = deptMenu.getParentId();
if(parentId != 0){
for (DeptMenu deptMenu1:allDeptByCompanyId){
if(deptMenu1.getId() == parentId){
List<DeptMenu> children = deptMenu1.getChildren();
children.add(deptMenu);
deptMenu1.setChildren(children);
}
}
}
}
Iterator<DeptMenu> it = allDeptByCompanyId.iterator();
while(it.hasNext()){
DeptMenu x = it.next();
Integer parentId = x.getParentId();
if(parentId != 0){
it.remove();
}
}
return allDeptByCompanyId;
}
返回的json样式是这样子的,相信前端完全可以拿去做展示
{
"result_msg": "操作成功",
"result_code": "SUCCESS",
"result_num": 200,
"data": [
{
"id": 1,
"name": "测试1部门",
"parentId": 0,
"state": 1,
"isParent": 1,
"sortOrder": 1,
"children": [
{
"id": 6,
"name": "子测试4部门",
"parentId": 1,
"state": 1,
"isParent": 0,
"sortOrder": 1,
"children": []
},
{
"id": 8,
"name": "子测试5部门",
"parentId": 1,
"state": 1,
"isParent": 1,
"sortOrder": 2,
"children": [
{
"id": 9,
"name": "子测试6部门",
"parentId": 8,
"state": 1,
"isParent": 0,
"sortOrder": 1,
"children": []
}
]
}
]
},
{
"id": 2,
"name": "部门2",
"parentId": 0,
"state": 0,
"isParent": 0,
"sortOrder": 2,
"children": []
},
{
"id": 3,
"name": "部门3",
"parentId": 0,
"state": 1,
"isParent": 0,
"sortOrder": 3,
"children": []
}
]
}
(因为是自己思考然后实现的,在具体细节或者性能上可能需要继续提升,欢迎大家指点~)


被折叠的 条评论
为什么被折叠?



