獲取組織機構樹
轉載地址:https://blog.csdn.net/weixin_38492276/article/details/100066926
一、資料表設計
在這裡我需要說明一下,在看一些開源專案的時候,先不要直接去一頭栽到程式碼裡去,那樣通常會是霧裡探花,研究一番,就把自己搞成了丈二和尚了,所以我一般是會先去看資料表,從業務入手,下一步就去看POM檔案 。
我在資料庫裡面建立了dept(部門表),為了測試方便,我在這裡只建了五個欄位 。
org_id (部門id) org_name (部門名稱) parent_id (父id)sort(排序) create_date(建立時間)
二、由於此業務簡單,所以我們就不看pom檔案了,也無非就是spring-boot核心包,mysql、mybatis核心包。我們之間看業務。
建立和資料表對應的實體 。
package com.zed.zd.pojo.dept;
import java.util.List;
/**
* @author: shenaiguo
* @Date:
* @Description:
*/
public class Dept {
private int orgId;
private String orgName;
private int parentId;
private int sort;
private List<Dept> children;
public List<Dept> getChildren() {
return children;
}
public void setChildren(List<Dept> children) {
this.children = children;
}
public int getOrgId() {
return orgId;
}
public void setOrgId(int orgId) {
this.orgId = orgId;
}
public String getOrgName() {
return orgName;
}
public void setOrgName(String orgName) {
this.orgName = orgName;
}
public int getParentId() {
return parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
}
public int getSort() {
return sort;
}
public void setSort(int sort) {
this.sort = sort;
}
}
三、控制層
package com.zed.zd.controller.dept;
import com.zed.zd.pojo.dept.Dept;
import com.zed.zd.service.dept.IdeptService;
import com.zed.zd.service.exam.IExamInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/dept")
public class DeptController {
@Autowired
private IdeptService deptService;
@GetMapping("/getTreeDept")
public List<Dept> getTreeDept(){
List<Dept> depts=deptService.getRootDept(0);
return deptService.getTreeDept(depts);
}
}
在這裡需要說明一下,
1、由於直接獲取那棵樹,所以什麼都不需要傳。
2、這裡需要指定一下根節點的 parent_id ,這裡就指定為0。
四、服務層。
一、介面
package com.zed.zd.service.dept;
import com.zed.zd.pojo.dept.Dept;
import java.util.List;
public interface IdeptService {
List<Dept> getTreeDept(List<Dept> depts);//獲取樹狀結構的部門
List<Dept> getRootDept(int parentId );//利用父id進行查詢部門
}
二、實現類
package com.zed.zd.service.dept.impl;
import com.zed.zd.mapper.dept.DeptMapper;
import com.zed.zd.pojo.dept.Dept;
import com.zed.zd.service.dept.IdeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class DeptServiceImpl implements IdeptService {
@Autowired
private DeptMapper deptMapper;
@Override
public List<Dept> getTreeDept(List<Dept> depts) {
for (Dept d:depts){
List<Dept> depts1 =deptMapper.getchildrenDept(d.getOrgId());
d.setChildren(depts1);
getTreeDept(depts1);
}
return depts;
}
@Override
public List<Dept> getRootDept(int id) {
return deptMapper.getRootDept(id);
}
}
其實這裡的核心程式碼getTreeDept就是這塊,通過遞迴實現。
1、遍歷父節點為0的部門,也就是根節點。
2、通過部門id,獲取所有在父節點為0的部門,也就是所有根節點的一級子節點(孩子節點)。
3、把孩子節點放到該部門的孩子節點屬性上。
4、通過遞迴呼叫以此類推實現整個樹的遍歷。
五、mapper
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zed.zd.mapper.dept.DeptMapper">
<select id="getRootDept" resultType="com.zed.zd.pojo.dept.Dept">
select * from dept where parent_id= #{id}
</select>
<select id="getchildrenDept" resultType="com.zed.zd.pojo.dept.Dept">
select * from dept where parent_id= #{orgId}
</select>
</mapper>
相信聰明的你,一定會看懂,在這裡就不在贅述了。
六、好了,萬事俱備只欠東風, 下面我們有請我們今天最後一個主角閃亮登場。postman,沒錯,他此時一定會想,別看你之前說的多玄乎。哼,不過我這關,你一起都是海市蜃樓,呵呵,還拽上成語了。
[
{
"orgId": 3,
"orgName": "董事長",
"parentId": 0,
"sort": 1,
"children": [
{
"orgId": 4,
"orgName": "經理1",
"parentId": 3,
"sort": 1,
"children": [
{
"orgId": 7,
"orgName": "部門1",
"parentId": 4,
"sort": 1,
"children": []
},
{
"orgId": 8,
"orgName": "部門2",
"parentId": 4,
"sort": 2,
"children": []
}
]
},
{
"orgId": 5,
"orgName": "經理2",
"parentId": 3,
"sort": 2,
"children": []
},
{
"orgId": 6,
"orgName": "經理3",
"parentId": 3,
"sort": 3,
"children": [
{
"orgId": 9,
"orgName": "技術部",
"parentId": 6,
"sort": 12,
"children": []
}
]
},
{
"orgId": 10,
"orgName": "技術部A經理",
"parentId": 3,
"sort": 33,
"children": []
}
]
}
]
什麼,你還不行,好吧,我們以事實說話。
相關文章
- 基於Vue的組織架構樹元件Vue架構元件
- 列表外掛中獲取過濾的組織範圍以及是否勾選全部組織
- js 統計樹形組織架構人員數量JS架構
- rust 模組組織結構Rust
- iOS 工程組織結構分享iOS
- 如何在word中製作組織結構圖 用word做組織結構圖
- 梳理公司的組織架構 — 組合模式架構模式
- requests模組獲取cookieCookie
- 組織架構新型資料結構思考架構資料結構
- SaaS公司組織結構圖 - David
- 黑客組織TA2101扮演政府機構和快遞,黑入德國,義大利和美國組織黑客
- Pythonrandom模組(獲取隨機數)常用方法和使用例子Pythonrandom隨機
- Java將List集合組裝成樹(Tree)樹結構組裝Java
- 組織: 階級: 組織+管理+授權+組織結構設計+ 角色 + 分工: individual型別: 體力+普工+文職+型別
- 如何組織軟體模組的程式碼結構?
- NetBox使用教程1-組織架構架構
- EDP .Net開發框架--組織架構框架架構
- Office怎麼做組織架構圖?架構
- Redis 物件內部組織結構 —— 字典Redis物件
- 組織架構圖怎麼畫,這個方法能夠讓你快速繪製組織架構圖架構
- Laravel 分組獲取最新記錄Laravel
- 利用python獲取樹莓派的溫度Python樹莓派
- 座席組織
- linux驅動之獲取裝置樹資訊Linux
- 淺析雲原生應用安全組織架構架構
- SAP SD基礎知識之組織結構
- OA辦公軟體篇(一)—組織架構架構
- 什麼是高彈性組織結構? – Jessitron
- Android 從手機相簿獲取圖片 uri 路徑 從相機獲取照片Android
- 【MSSQL】SSMS快速獲取表結構SQLSSM
- 獲取Linux本機IP命令Linux
- python如何獲取本機ipPython
- android 獲取手機號碼Android
- 獲取手機外網IP
- 【API】隨機獲取圖片API隨機
- Android之獲取手機UDIDAndroid
- 蘋果手機獲取UDID蘋果
- jQuery獲取本機ip地址jQuery