MySQL下實現樹形組織機構圖的一種方案【實際項目中已應用】

需求說明

前端樹形組織機構圖示意圖

需求說明

前端要求畫一個樹形組織機構圖,具體要求:前端

前端向後端傳遞參數爲【登陸用戶所在組織機構id】,要求後端返回json數據,前端解析數據畫出樹形組織機構圖。java

表設計--核心字段

建表sql

SET FOREIGN_KEY_CHECKS=0;


-- ----------------------------

-- Table structure for sys_organization

-- ----------------------------

DROP TABLE IF EXISTS `sys_organization`;

CREATE TABLE `sys_organization` (

  `org_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '組織機構Id',

  `org_name` varchar(100) COLLATE utf8_unicode_ci NOT NULL COMMENT '組織機構名稱',

  `parent_id` int(11) unsigned NOT NULL COMMENT '父節點爲空的是根機構',

  PRIMARY KEY (`org_id`),

  UNIQUE KEY `idx_oname` (`org_name`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=87 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


-- ----------------------------

-- Records of sys_organization

-- ----------------------------

INSERT INTO `sys_organization` VALUES ('1', '順心工程總公司', '0');

INSERT INTO `sys_organization` VALUES ('3', '北京分公司', '1');

INSERT INTO `sys_organization` VALUES ('12', '北京分公司-車隊', '3');

INSERT INTO `sys_organization` VALUES ('13', '北京分公司-生產運行科', '3');

INSERT INTO `sys_organization` VALUES ('14', '北京分公司-計劃經營科', '3');

INSERT INTO `sys_organization` VALUES ('15', '北京分公司-物資管理部', '3');

INSERT INTO `sys_organization` VALUES ('16', '北京分公司-財務科', '3');

INSERT INTO `sys_organization` VALUES ('17', '北京分公司-綜合研究所', '3');

INSERT INTO `sys_organization` VALUES ('18', '北京分公司-審計紀檢科', '3');

INSERT INTO `sys_organization` VALUES ('19', '北京分公司-綜合辦公室', '3');

INSERT INTO `sys_organization` VALUES ('20', '北京分公司-工程技術科', '3');

INSERT INTO `sys_organization` VALUES ('21', '北京分公司-工程建設科', '3');

INSERT INTO `sys_organization` VALUES ('22', '北京分公司-安全環保科', '3');

INSERT INTO `sys_organization` VALUES ('23', '北京分公司-公共關係科', '3');

INSERT INTO `sys_organization` VALUES ('25', '大連分公司', '1');

INSERT INTO `sys_organization` VALUES ('26', '大連分公司-生產運行部', '25');

INSERT INTO `sys_organization` VALUES ('27', '大連分公司-綜合管理部', '25');

INSERT INTO `sys_organization` VALUES ('28', '大連分公司-安全環保部', '25');

INSERT INTO `sys_organization` VALUES ('29', '大連分公司-計劃財務部', '25');

INSERT INTO `sys_organization` VALUES ('30', '大連分公司-設備物資部', '25');

INSERT INTO `sys_organization` VALUES ('31', '大連分公司-公共關係部', '25');

INSERT INTO `sys_organization` VALUES ('37', '大連分公司-維修隊', '25');

INSERT INTO `sys_organization` VALUES ('38', '大連分公司-運維隊', '25');

INSERT INTO `sys_organization` VALUES ('39', '深圳分公司', '1');

INSERT INTO `sys_organization` VALUES ('40', '深圳分公司-安全環保科', '39');

INSERT INTO `sys_organization` VALUES ('41', '深圳分公司-生產運行科', '39');

INSERT INTO `sys_organization` VALUES ('42', '深圳分公司-綜合辦公室', '39');

INSERT INTO `sys_organization` VALUES ('43', '深圳分公司-黨羣工做科', '39');

INSERT INTO `sys_organization` VALUES ('44', '深圳分公司-審計紀檢科', '39');

INSERT INTO `sys_organization` VALUES ('45', '深圳分公司-計劃財務科', '39');

INSERT INTO `sys_organization` VALUES ('46', '深圳分公司-財務科', '39');

INSERT INTO `sys_organization` VALUES ('47', '深圳分公司-物資管理部', '39');

INSERT INTO `sys_organization` VALUES ('48', '深圳分公司-工程技術科', '39');

INSERT INTO `sys_organization` VALUES ('49', '深圳分公司-工程建設科', '39');

INSERT INTO `sys_organization` VALUES ('50', '深圳分公司-綜合研究所', '39');

INSERT INTO `sys_organization` VALUES ('51', '深圳分公司-排採研究所', '39');

INSERT INTO `sys_organization` VALUES ('52', '深圳分公司-公共關係科', '39');

INSERT INTO `sys_organization` VALUES ('55', '深圳分公司-安全生產科', '39');

INSERT INTO `sys_organization` VALUES ('56', '深圳分公司-車隊', '39');

INSERT INTO `sys_organization` VALUES ('57', '洛陽分公司', '1');

INSERT INTO `sys_organization` VALUES ('58', '洛陽分公司-綜合辦公室', '57');

INSERT INTO `sys_organization` VALUES ('59', '洛陽分公司-計劃經營科', '57');

INSERT INTO `sys_organization` VALUES ('60', '洛陽分公司-財務科', '57');

INSERT INTO `sys_organization` VALUES ('61', '洛陽分公司-生產運行科', '57');

INSERT INTO `sys_organization` VALUES ('62', '洛陽分公司-工程技術科', '57');

INSERT INTO `sys_organization` VALUES ('64', '洛陽分公司-安全環保科', '57');

INSERT INTO `sys_organization` VALUES ('65', '洛陽分公司-工程建設科', '57');

INSERT INTO `sys_organization` VALUES ('66', '洛陽分公司-公共關係科', '57');

INSERT INTO `sys_organization` VALUES ('67', '洛陽分公司-黨羣工做科', '57');

INSERT INTO `sys_organization` VALUES ('68', '洛陽分公司-審計紀檢科', '57');

INSERT INTO `sys_organization` VALUES ('69', '洛陽分公司-地質研究所', '57');

INSERT INTO `sys_organization` VALUES ('70', '洛陽分公司-排採研究所', '57');

INSERT INTO `sys_organization` VALUES ('71', '洛陽分公司-物資管理部', '57');

INSERT INTO `sys_organization` VALUES ('74', '洛陽分公司-HSE監督中心', '57');

INSERT INTO `sys_organization` VALUES ('75', '洛陽分公司-工程監督中心', '57');

INSERT INTO `sys_organization` VALUES ('76', '洛陽分公司-行政事務中心', '57');

INSERT INTO `sys_organization` VALUES ('77', '洛陽分公司-石樓北項目部', '57');

INSERT INTO `sys_organization` VALUES ('78', '拉薩項目經理部', '1');

INSERT INTO `sys_organization` VALUES ('79', '拉薩項目經理部-綜合管理部', '78');

INSERT INTO `sys_organization` VALUES ('80', '拉薩項目經理部-生產運行部', '78');

INSERT INTO `sys_organization` VALUES ('81', '拉薩項目經理部-安全環保部', '78');

INSERT INTO `sys_organization` VALUES ('82', '拉薩項目經理部-公共關係部', '78');

INSERT INTO `sys_organization` VALUES ('83', '拉薩項目經理部-車隊', '78');

表效果以下

跟前端樹形圖對應的對象設計

Json示例

{


  "oid" : 3,


  "oname" : "北京分公司",


  "parentId" : 1,


  "children" : [ {


    "oid" : 12,


    "oname" : "北京分公司-車隊",


    "parentId" : 3,


    "children" : [ ]


  }, {


    "oid" : 13,


    "oname" : "北京分公司-生產運行科",


    "parentId" : 3,


    "children" : [ ]


  }, {


    "oid" : 14,


    "oname" : "北京分公司-計劃經營科",


    "parentId" : 3,


    "children" : [ ]


  }, {


    "oid" : 15,


    "oname" : "北京分公司-物資管理部",


    "parentId" : 3,


    "children" : [ ]


  }, {


    "oid" : 16,


    "oname" : "北京分公司-財務科",


    "parentId" : 3,


    "children" : [ ]


  }, {


    "oid" : 17,


    "oname" : "北京分公司-綜合研究所",


    "parentId" : 3,


    "children" : [ ]


  }, {


    "oid" : 18,


    "oname" : "北京分公司-審計紀檢科",


    "parentId" : 3,


    "children" : [ ]


  }, {


    "oid" : 19,


    "oname" : "北京分公司-綜合辦公室",


    "parentId" : 3,


    "children" : [ ]


  }, {


    "oid" : 20,


    "oname" : "北京分公司-工程技術科",


    "parentId" : 3,


    "children" : [ ]


  }, {


    "oid" : 21,


    "oname" : "北京分公司-工程建設科",


    "parentId" : 3,


    "children" : [ ]


  }, {


    "oid" : 22,


    "oname" : "北京分公司-安全環保科",


    "parentId" : 3,


    "children" : [ ]


  }, {


    "oid" : 23,


    "oname" : "北京分公司-公共關係科",


    "parentId" : 3,


    "children" : [ ]


  } ]


}

樹結構對象設計

import java.util.ArrayList;

import java.util.List;

public class OrgTreeNode {


private Long oid;

private String oname;

private Long parentId;

private List<OrgTreeNode> children = new ArrayList<OrgTreeNode>();

//Getter and Setter

}

實現思路

前端傳遞組織機構id爲rootOrgId,根據rootOrgId從數據庫獲取該組織機構下轄的全部子孫組織機構List,而後將每一個節點的父機構組裝進去

組裝根節點

遞歸調用組裝根節點下面的子孫節點sql

相關文章
相關標籤/搜索