根据level_code列封装树形数据结构
每四位为一个节点
0001、0002…为根节点,诸如此类四位为第一层根节点
00010001、00010002为0001子节点
数据库表(无parent_id列)
实体类(只列部分代码)
/**
* 由于数据库表中未定义父级id,实体类中使用@TableField(exist = false)标记
* 父级id
*/
@TableField(exist = false)
@ApiModelProperty(value = "父级id")
private Integer parentId;
新建实体类用来封装树形数据
/**
* 物料类型树对象
* 这里具体TreeNode可以自己查一下
*/
@Data
@ApiModel(value = "物料类型树")
@EqualsAndHashCode(callSuper = true)
public class MaterialTypeTree extends TreeNode {
@ApiModelProperty(value = "物料类型名称")
private String name;
}
Service层(返回树形菜单集合)
/**
* 查询全部物料类型树
* @return 树
*/
@Override
public List<MaterialTypeTree> selectTree() {
// 查询全部物料类型树
List<MaterialType> materialTypeAllList = materialTypeMapper.selectList(Wrappers.emptyWrapper());
// 物料类型
List<MaterialTypeTree> collect = materialTypeAllList.stream().map(materialType -> {
MaterialTypeTree node = new MaterialTypeTree();
node.setId(materialType.getId());
//如果是根节点 父id为0
if (materialType.getLevelCode().length() == 4) {
materialType.setParentId(0);
} else {
//不是根节点 截掉最后四位 剩余为父节点的levelCode 根据levelCode查找对应的id 为父id
String temp = materialType.getLevelCode();
temp = temp.substring(0 , temp.length()-4);
Integer id = baseMapper.QueryIdByLevelCode(temp);
materialType.setParentId(id);
}
node.setParentId(materialType.getParentId());
node.setName(materialType.getTypeName());
return node;
}).collect(Collectors.toList());
return TreeUtil.build(collect, 0);
}