表结构如下:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for my_dept
-- ----------------------------
DROP TABLE IF EXISTS `my_dept`;
CREATE TABLE `my_dept` (
`dept_id` int NOT NULL AUTO_INCREMENT COMMENT 'id值',
`parent_id` int NULL DEFAULT NULL COMMENT '上级部门',
`dept_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
`sort` int NULL DEFAULT NULL COMMENT '排序',
`status` bit(1) NOT NULL COMMENT '状态',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`dept_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of my_dept
-- ----------------------------
INSERT INTO `my_dept` VALUES (1, 0, '成都总公司', 1, b'1', '2022-01-30 11:01:09', '2022-01-30 18:21:26');
INSERT INTO `my_dept` VALUES (2, 1, '研发部门', 1, b'1', '2022-01-30 11:01:28', '2022-01-30 11:01:30');
INSERT INTO `my_dept` VALUES (3, 1, '市场部门', 2, b'1', '2022-01-30 11:01:47', '2022-01-30 11:01:48');
INSERT INTO `my_dept` VALUES (4, 1, '运维部门', 3, b'1', '2022-01-30 11:02:01', '2022-01-30 11:02:04');
INSERT INTO `my_dept` VALUES (5, 0, '宜宾分公司', 2, b'1', '2022-01-30 11:07:36', '2022-01-30 14:18:48');
INSERT INTO `my_dept` VALUES (6, 5, '营销部门', 1, b'1', '2022-01-30 11:08:40', '2022-01-30 20:32:40');
INSERT INTO `my_dept` VALUES (7, 5, '运维部门', 2, b'1', '2022-01-30 11:08:56', '2022-01-30 18:03:56');
INSERT INTO `my_dept` VALUES (8, 5, '公关部门', 3, b'1', '2022-01-30 20:47:32', '2022-01-30 20:47:29');
SET FOREIGN_KEY_CHECKS = 1;
对应的实体类:
package com.chunwai.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.ArrayList;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
/**
* <p>
*
* </p>
*
* @author leungchunwai
* @since 2022-01-30
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MyDept implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id值
*/
@TableId(value = "dept_id", type = IdType.AUTO)
private Integer deptId;
/**
* 上级部门
*/
private Integer parentId;
/**
* 名称
*/
private String deptName;
/**
* 排序
*/
private Integer sort;
/**
* 状态
*/
private Boolean status;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**
* 子级部门
*/
@TableField(exist = false)
private List<MyDept> children = new ArrayList<>();
}
业务层逻辑:
package com.chunwai.service.impl;
import com.chunwai.entity.MyDept;
import com.chunwai.mapper.MyDeptMapper;
import com.chunwai.service.IMyDeptService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.velocity.runtime.directive.Break;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
* 服务实现类
* </p>
*
* @author leungchunwai
* @since 2022-01-30
*/
@Service
public class MyDeptServiceImpl extends ServiceImpl<MyDeptMapper, MyDept> implements IMyDeptService {
@Override
public List<MyDept> treeData() {
List<MyDept> myDeptList = list();
Map<Integer, MyDept> myDeptMap = myDeptList.stream()
.collect(Collectors.toMap(MyDept::getDeptId, MyDept -> MyDept));
List<MyDept> arrayList = new ArrayList<>();
myDeptList.forEach(myDept -> {
if (myDept.getParentId() == 0 ){
arrayList.add(myDept);
}else {
MyDept dept = myDeptMap.get(myDept.getParentId());
dept.getChildren().add(myDept);
}
});
return arrayList;
}
}
控制层调用返回给前端:
package com.chunwai.controller;
import com.chunwai.entity.CourseType;
import com.chunwai.entity.MyDept;
import com.chunwai.service.ICourseTypeService;
import com.chunwai.service.IMyDeptService;
import com.chunwai.utils.AjaxResult;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author leungchunwai
* @since 2022-01-30
*/
@RestController
@RequestMapping("/myDept")
@Api(tags = "部门树")
public class MyDeptController {
@Autowired
private IMyDeptService myDeptService;
@GetMapping
public AjaxResult treeData(){
List<MyDept> treeData = myDeptService.treeData();
return AjaxResult.me().setResultObj(treeData);
}
}
返回结果如下: