递归解决员工所属部门遍历

1.部门表结构

CREATE TABLE `dept_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dept_code` varchar(32) DEFAULT NULL COMMENT '部门编号',
  `dept_name` varchar(64) DEFAULT NULL COMMENT '部门名称',
  `pcode` varchar(32) DEFAULT NULL COMMENT '父部门code',
  `creator_id` int(11) DEFAULT NULL,
  `gmt_create` timestamp NULL DEFAULT NULL,
  `update_id` int(11) DEFAULT NULL,
  `gmt_update` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

2.递归实现列表层级集合

  public List<DeptInfo> getLevelDeptInfoList() {

        DeptInfo deptInfo = new DeptInfo();
        deptInfo.setPageNum(null);
        deptInfo.setPageSize(null);
        List<DeptInfo> deptInfos = deptInfoMapper.getDeptInfoList(deptInfo);

        //层级集合
        List<DeptInfo> rootDeptInfos = new ArrayList<>();

        if (!CollectionUtils.isEmpty(deptInfos)) {
            for (DeptInfo deptInfo1:deptInfos) {
                if (StringUtils.isBlank(deptInfo1.getPcode())) {
                    rootDeptInfos.add(deptInfo1);
                }
            }

            for (DeptInfo deptInfo1:rootDeptInfos) {
                deptInfo1.setChildDeptList(getChild(deptInfo1.getId().toString(),deptInfos));
            }

        }

        return rootDeptInfos;
    }

    /**
     * @Author ldg
     * @param id 顶层部门的id
     * @param deptInfos 所有部门
     * @return
     */
    private List<DeptInfo> getChild(String id,List<DeptInfo> deptInfos){

        List<DeptInfo> childList = new ArrayList<>();

        for (DeptInfo deptInfo:deptInfos) {
            if (StringUtils.isNotBlank(deptInfo.getPcode())) {
                if (deptInfo.getPcode().equals(id)) {

                    childList.add(deptInfo);
                }
            }
        }

        for (DeptInfo deptInfo:childList) {
            deptInfo.setChildDeptList(getChild(deptInfo.getId().toString(),deptInfos));
        }

        if (childList.size() == 0){
            return null;
        }

        return childList;
    }

 

posted @ 2020-10-15 13:53  理葵  阅读(261)  评论(0编辑  收藏  举报
希望写博是我人生坚持在做的事情之一。