组织表sql
CREATE TABLE `my_org` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`org_name` varchar(50) DEFAULT NULL COMMENT '组织名称',
`org_code` varchar(50) DEFAULT NULL COMMENT '组织code',
`parent_name` varchar(50) DEFAULT NULL COMMENT '父类名称',
`parent_code` varchar(50) DEFAULT NULL COMMENT '父类code',
`route` varchar(100) DEFAULT NULL COMMENT '层级路径',
`org_desc` varchar(500) DEFAULT NULL COMMENT '组织描述',
`status` int(2) DEFAULT NULL COMMENT '是否上线(1:是,0:否)',
`create_user` varchar(50) DEFAULT NULL COMMENT '创建人',
`update_user` varchar(50) DEFAULT NULL COMMENT '更新人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `idx_code` (`org_code`) USING BTREE,
KEY `idx_parent_code` (`parent_code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8mb4 COMMENT='组织表';
表数据
id org_name org_code parent_name parent_code route org_desc status create_time
25 财政部 111 0 0,111 财政部 1 2022/7/26 15:15
26 财政部A 222 财政部 111 0,111,222 财政部A 1 2022/7/26 15:17
27 财政部B 333 财政部 111 0,111,333 财政部B 1 2022/7/26 15:18
28 文艺部 444 0 0,444 文艺部 1 2022/7/26 15:19
29 文艺部X 555 文艺部 444 0,444,555 文艺部X 1 2022/7/26 15:19
30 文艺部U 666 文艺部 444 0,444,666 文艺部U 1 2022/7/26 15:19
35 文艺部U 777 文艺部 444 0,444,777 文艺部U 1 2022/7/26 18:07
36 文艺部K 888 文艺部 444 0,444,888 文艺部K 1 2022/7/27 9:48
组织实体类
/**
* <p>
* 组织表
* </p>
*
* @author 夏威夷8080
* @since 2022-07-26
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="MyOrg对象", description="组织表")
public class MyOrg implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty(value = "组织名称")
private String orgName;
@ApiModelProperty(value = "组织code")
private String orgCode;
@ApiModelProperty(value = "父类名称")
private String parentName;
@ApiModelProperty(value = "父类code")
private String parentCode;
@ApiModelProperty(value = "层级路径")
private String route;
@ApiModelProperty(value = "组织描述")
private String orgDesc;
@ApiModelProperty(value = "是否上线(1:是,0:否)")
private Integer status;
@ApiModelProperty(value = "创建人")
private String createUser;
@ApiModelProperty(value = "更新人")
private String updateUser;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "更新时间")
private Date updateTime;
}
组织树dto
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class MyOrgTreeDTO extends MyOrg implements Serializable {
private static final long serialVersionUID = -2220459684448678777L;
@ApiModelProperty(value = "子组织集合")
private List<MyOrgTreeDTO> childList;
}
递归查询组织树,入参是一个父节点code
@Override
public List<MyOrgTreeDTO> treeList(QueryOrgTreeVO vo) {
String rootCode = vo.getRootCode();
// get all org
List<MyOrg> allOrgList = myOrgManager.list(new QueryWrapper<MyOrg>().lambda()
.eq(MyOrg::getStatus, 1)
.orderByAsc(MyOrg::getId));
return this.recursionOrg(rootCode, allOrgList);
}
/**
* 递归查询所有知识库组织
*
* @param parentOrgCode
* @param allOrgList
* @return
*/
public List<MyOrgTreeDTO> recursionOrg(String parentOrgCode, List<MyOrg> allOrgList) {
List<MyOrg> orgList = allOrgList.parallelStream()
.filter(org -> org.getParentCode().equals(parentOrgCode))
// .sorted(Comparator.comparing(MyOrg::getId, Comparator.nullsLast(Comparator.naturalOrder()))
// .thenComparing(MyOrg::getId))
.collect(Collectors.toList());
List<MyOrgTreeDTO> treeDTOList = Convert.toList(MyOrgTreeDTO.class, orgList);
for (int i = 0; i < treeDTOList.size(); i++) {
MyOrgTreeDTO orgTreeCurrent = treeDTOList.get(i);
// set child
List<MyOrgTreeDTO> childList = this.recursionOrg(orgList.get(i).getOrgCode(), allOrgList);
orgTreeCurrent.setChildList(childList);
}
return treeDTOList;
}
返回数据结构
{
"code": "200",
"msg": "success",
"data": [
{
"id": 25,
"orgName": "财政部",
"orgCode": "111",
"parentName": "",
"parentCode": "0",
"route": "0,111",
"orgDesc": "财政部",
"status": 1,
"createUser": "11",
"updateUser": "11",
"createTime": "2022-07-26 15:15:49",
"updateTime": "2022-07-26 15:15:51",
"childList": [
{
"id": 26,
"orgName": "财政部A",
"orgCode": "222",
"parentName": "财政部",
"parentCode": "111",
"route": "0,111,222",
"orgDesc": "财政部A",
"status": 1,
"createUser": "admin",
"updateUser": "",
"createTime": "2022-07-26 15:17:38",
"childList": []
},
{
"id": 27,
"orgName": "财政部B",
"orgCode": "333",
"parentName": "财政部",
"parentCode": "111",
"route": "0,111,333",
"orgDesc": "财政部B",
"status": 1,
"createUser": "admin",
"updateUser": "",
"createTime": "2022-07-26 15:18:25",
"childList": []
}
]
},
{
"id": 28,
"orgName": "文艺部",
"orgCode": "444",
"parentName": "",
"parentCode": "0",
"route": "0,444",
"orgDesc": "文艺部",
"status": 1,
"createUser": "admin",
"updateUser": "",
"createTime": "2022-07-26 15:19:08",
"childList": [
{
"id": 29,
"orgName": "文艺部X",
"orgCode": "555",
"parentName": "文艺部",
"parentCode": "444",
"route": "0,444,555",
"orgDesc": "文艺部X",
"status": 1,
"createUser": "admin",
"updateUser": "",
"createTime": "2022-07-26 15:19:42",
"childList": []
},
{
"id": 30,
"orgName": "文艺部U",
"orgCode": "666",
"parentName": "文艺部",
"parentCode": "444",
"route": "0,444,666",
"orgDesc": "文艺部U",
"status": 1,
"createUser": "admin",
"updateUser": "",
"createTime": "2022-07-26 15:19:54",
"childList": []
},
{
"id": 35,
"orgName": "文艺部U",
"orgCode": "777",
"parentName": "文艺部",
"parentCode": "444",
"route": "0,444,777",
"orgDesc": "文艺部U",
"status": 1,
"createUser": "admin",
"createTime": "2022-07-26 18:07:26",
"childList": []
}
]
}
]
}
递归查询某一组织的所有层级路径
就是表数据里的route列
@Override
public List<String> getRoute(String currentCode) {
// get all org
List<MyOrg> allOrgList = myOrgManager.list(new QueryWrapper<MyOrg>().lambda()
.eq(MyOrg::getStatus, 1)
.orderByAsc(MyOrg::getId));
List<String> orgCodeSet = new ArrayList<>();
recursionRoute(currentCode, allOrgList, orgCodeSet);
Collections.reverse(orgCodeSet);
return orgCodeSet;
}
public void recursionRoute(String currentCode, List<MyOrg> allOrgList, List<String> orgCodeSet) {
// 拿到当前组织的code和父code
// 将当前code置入集合
orgCodeSet.add(currentCode);
List<MyOrg> orgList = allOrgList.parallelStream()
.filter(org -> org.getOrgCode().equals(currentCode))
.collect(Collectors.toList());
if (!CollectionUtils.isEmpty(orgList)) {
String parentCode = orgList.get(0).getParentCode();
// 把父code作为新的currentCode调递归方法
recursionRoute(parentCode, allOrgList, orgCodeSet);
}
}
本文由《MySql教程网》原创,转载请注明出处!https://mysql360.com