MySQL下实现树形组织机构图的一种方案【实际项目中已应用】

需求说明

前端树形组织机构图示意图

279c99c3d69086c3f89e84257ba8c87c525.jpg

需求说明

前端要求画一个树形组织机构图,具体要求:

前端向后端传递参数为【登录用户所在组织机构id】,要求后端返回json数据,前端解析数据画出树形组织机构图。

表设计--核心字段

建表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');

表效果如下

d0c4d3f62e20431b9156ff14527eff9d80f.jpg

跟前端树形图对应的对象设计

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,然后将每个节点的父机构组装进去

组装根节点

递归调用组装根节点下面的子孙节点

转载于:https://my.oschina.net/u/3866531/blog/2251648

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值