1:数据表的设计
CREATE TABLE `fault_category` (
`id` varchar(64) NOT NULL COMMENT '主键id ',
`parent_id` varchar(32) NOT NULL DEFAULT '' COMMENT '父类型id',
`fault_type` varchar(100) NOT NULL COMMENT '故障类型',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`del_flag` char(1) DEFAULT '0' COMMENT '0:正常 1: 删除',
`tenant_id` varchar(64) NOT NULL DEFAULT '00000000' COMMENT '租户id',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`organization_id` varchar(64) DEFAULT NULL COMMENT '组织id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='故障类型';
2:代码逻辑实现 实体类:
/**
* id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
/**
* 故障类型
*/
@TableField(value = "fault_type")
private String faultType;
/**
* 父级Id
*/
@TableField(value = "parent_id")
private String parentId;
/**
* 下级分类
*/
@TableField(exist = false)
private List<HitchTypeManagement> childMenu=new ArrayList<>();
dao层:
List<HitchTypeManagement> getTree();
service层:
@Override
public List<HitchTypeManagement> getTree() {
//先查询所有
List<HitchTypeManagement> hitchTypeManagementList = hitchTypeMapper.getTree();
System.out.println(hitchTypeManagementList.size());
//声明一个集合,用来保存结果
List<HitchTypeManagement> deptTrees = new ArrayList<>();
//遍历查询出来的结果,确定顶级
for (HitchTypeManagement hitchTypeManagement : hitchTypeManagementList) {
//如果相等为第一级,这里“0”表示顶级父id
if ("0".equals(hitchTypeManagement.getParentId())) {
//打印顶级信息
System.out.println(hitchTypeManagement.getId() + "," + hitchTypeManagement.getFaultType() + "," + hitchTypeManagement.getParentId());
//创建树结构对象
HitchTypeManagement typeTree = new HitchTypeManagement();
//实例树对象
typeTree.setId(hitchTypeManagement.getId());
// 第一级名字(根)
typeTree.setFaultType(hitchTypeManagement.getFaultType());
typeTree.setChildMenu(getDepartmentList(hitchTypeManagement.getId(), hitchTypeManagementList));
//将最终结构封装到集合
deptTrees.add(typeTree);
}
}
return deptTrees;
}
/**
* @param pid 所传为最大父级的id,默认值为 0
* @param hitchTypeManagements
* @return
*/
public List<HitchTypeManagement> getDepartmentList(String pid, List<HitchTypeManagement> hitchTypeManagements) {
List<HitchTypeManagement> typeTrees = new ArrayList<>();
for (HitchTypeManagement hitchTypeManagement : hitchTypeManagements) {
//如果所有pid等于父级id
if (pid.equals(hitchTypeManagement.getParentId())) {
System.out.println(hitchTypeManagement.getId() + "," + hitchTypeManagement.getFaultType() + "," + hitchTypeManagement.getParentId());
HitchTypeManagement typeTree = new HitchTypeManagement();
typeTree.setId(hitchTypeManagement.getId());
// 第一级名字
typeTree.setFaultType(hitchTypeManagement.getFaultType());
//递归
typeTree.setChildMenu(getDepartmentList(hitchTypeManagement.getId(), hitchTypeManagements));
typeTrees.add(typeTree);
}
}
return typeTrees;
}
controller层:
@GetMapping(value = "treeList")
// @RequiresPermissions("hitch:type:treeList")
public String treeList() {
List<HitchTypeManagement> treeList = hitchTypeService.getTree();
return Response.successJson(treeList);
}
测试: