java递归函数生成部门层级树

一、数据库表结构

1、mysql数据库建表语句

-- ----------------------------
-- Table structure for t_sap_dept
-- ----------------------------
DROP TABLE IF EXISTS `t_sap_dept`;
CREATE TABLE `t_sap_dept` (
  `add_user` varchar(32) NOT NULL COMMENT '创建人',
  `add_time` datetime NOT NULL COMMENT '创建时间',
  `update_user` varchar(32) DEFAULT NULL COMMENT '修改人',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `valid_status` varchar(3) DEFAULT NULL COMMENT '是否有效 0 无效 1 有效',
  `delete_status` varchar(3) DEFAULT NULL COMMENT '是否删除 0 未删除 1 已删除',
  `org_id` varchar(32) NOT NULL COMMENT '部门id',
  `org_name` varchar(150) NOT NULL COMMENT '部门名称',
  `org_level` varchar(2) DEFAULT NULL COMMENT '部门层级',
  `status` varchar(3) DEFAULT NULL COMMENT '是否启用 0 未启用 1 启用',
  `sup_org_id` varchar(32) DEFAULT NULL COMMENT '上级组织id',
  `flag1` varchar(255) DEFAULT NULL,
  `flag2` varchar(255) DEFAULT NULL,
  `flag3` varchar(255) DEFAULT NULL,
  `flag4` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`org_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、mysql数据库插入语句

INSERT INTO t_sap_dept VALUES ('system', '2021-2-24 17:12:53', NULL, NULL, '1', '0', '00030437', '天猫信息服务有限 ', NULL, '1', '00037534', 'D', '', '', 'U');
INSERT INTO t_sap_dept VALUES ('system', '2021-2-24 17:12:53', NULL, NULL, '1', '0', '00032794', '技术管理科', NULL, '1', '00030437', 'E', '', '0086040002', 'U');
INSERT INTO t_sap_dept VALUES ('system', '2021-2-24 17:12:53', NULL, NULL, '1', '0', '00032797', '用户运营模块', NULL, '1', '00030437', 'F', '', '0086090002', 'U');
INSERT INTO t_sap_dept VALUES ('system', '2021-2-24 17:12:53', NULL, NULL, '1', '0', '00034537', '产品管理模块', NULL, '1', '00030437', 'F', '', '0086040001', 'U');
INSERT INTO t_sap_dept VALUES ('system', '2021-2-24 17:12:53', NULL, NULL, '1', '0', '00037364', '风控平台模块', NULL, '1', '10000551', 'F', '', '', 'U');
INSERT INTO t_sap_dept VALUES ('system', '2021-2-24 17:12:53', NULL, NULL, '1', '0', '10000548', '技术二模块', NULL, '1', '00032794', 'F', '', '0086040002', 'U');
INSERT INTO t_sap_dept VALUES ('system', '2021-2-24 17:12:53', NULL, NULL, '1', '0', '10000549', '技术三模块', NULL, '1', '00032794', 'F', '', '0086040002', 'U');
INSERT INTO t_sap_dept VALUES ('system', '2021-2-24 17:12:53', NULL, NULL, '1', '0', '10000550', '运维模块', NULL, '1', '00032794', 'F', '', '0086040002', 'U');
INSERT INTO t_sap_dept VALUES ('system', '2021-2-24 17:12:53', NULL, NULL, '1', '0', '10000551', '业务发展一科', NULL, '1', '00030437', 'E', '', '', 'U');
INSERT INTO t_sap_dept VALUES ('system', '2021-2-24 17:12:53', NULL, NULL, '1', '0', '10000552', '业务发展二科', NULL, '1', '00030437', 'E', '', '', 'U');
INSERT INTO t_sap_dept VALUES ('system', '2021-2-24 17:12:53', NULL, NULL, '1', '0', '10000553', '技术一模块', NULL, '1', '00032794', 'F', '', '0086040002', 'U');
INSERT INTO t_sap_dept VALUES ('system', '2021-2-24 17:12:53', NULL, NULL, '1', '0', '10000554', '金融业务模块', NULL, '1', '10000551', 'F', '', '', 'U');

3、mysql数据库插入截图

在这里插入图片描述

二、创建数据库实体类

1、创建实体类SapDept

package com.tianmao.demand.synchrous.entity;

import com.tianmao.db.boot.entity.BaseEntity;

import java.util.Date;

/**
* 部门表
* 
*/
public class SapDept extends BaseEntity {

	private static final long serialVersionUID = 5275435492439961860L;
	/**
	 * 状态-无效
	 */
	public static String STATUS_FALSE = "0";
	/**
	 * 状态-有效
	 */
	public static String STATUS_TRUE = "1";

	/**删除状态 0-未删除  1-删除*/
	private String deleteStatus;

	/**有效状态 0-无效  1-有效*/
	private String validStatus;

	/**新增人userId*/
	private String addUser;

	/**新增时间*/
	private Date addTime;

	/**更新人userId*/
	private String updateUser;

	/**更新时间*/
	private Date updateTime;

	/**部门ID*/
	private String orgId;

	/**部门名称*/
	private String orgName;

	/**上级部门ID*/
	private String supOrgId;

	/**部门层级*/
	private String orgLevel;

	/**部门状态*/
	private String status;

	/**标记1*/
	private String flag1;

	/**标记2*/
	private String flag2;

	/**标记3*/
	private String flag3;

	/**标记4*/
	private String flag4;

	public String getDeleteStatus() {
		return deleteStatus;
	}

	public void setDeleteStatus(String deleteStatus) {
		this.deleteStatus = deleteStatus;
	}

	public String getValidStatus() {
		return validStatus;
	}

	public void setValidStatus(String validStatus) {
		this.validStatus = validStatus;
	}

	public String getAddUser() {
		return addUser;
	}

	public void setAddUser(String addUser) {
		this.addUser = addUser;
	}

	public Date getAddTime() {
		return addTime;
	}

	public void setAddTime(Date addTime) {
		this.addTime = addTime;
	}

	public String getUpdateUser() {
		return updateUser;
	}

	public void setUpdateUser(String updateUser) {
		this.updateUser = updateUser;
	}

	public Date getUpdateTime() {
		return updateTime;
	}

	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}

	public String getOrgId() {
		return orgId;
	}

	public void setOrgId(String orgId) {
		this.orgId = orgId;
	}

	public String getOrgName() {
		return orgName;
	}

	public void setOrgName(String orgName) {
		this.orgName = orgName;
	}

	public String getSupOrgId() {
		return supOrgId;
	}

	public void setSupOrgId(String supOrgId) {
		this.supOrgId = supOrgId;
	}

	public String getOrgLevel() {
		return orgLevel;
	}

	public void setOrgLevel(String orgLevel) {
		this.orgLevel = orgLevel;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getFlag1() {
		return flag1;
	}

	public void setFlag1(String flag1) {
		this.flag1 = flag1;
	}

	public String getFlag2() {
		return flag2;
	}

	public void setFlag2(String flag2) {
		this.flag2 = flag2;
	}

	public String getFlag3() {
		return flag3;
	}

	public void setFlag3(String flag3) {
		this.flag3 = flag3;
	}

	public String getFlag4() {
		return flag4;
	}

	public void setFlag4(String flag4) {
		this.flag4 = flag4;
	}
}

2、数据库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.yutong.demand.synchrous.mapper.SapDeptMapper">
    <resultMap id="BaseResultMap" type="com.yutong.demand.synchrous.entity.SapDept" >
        <id column="org_id" property="orgId" jdbcType="VARCHAR" />
        <result column="add_user" property="addUser" jdbcType="VARCHAR" />
        <result column="add_time" property="addTime" jdbcType="TIMESTAMP" />
        <result column="update_user" property="updateUser" jdbcType="VARCHAR" />
        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
        <result column="valid_status" property="validStatus" jdbcType="VARCHAR" />
        <result column="delete_status" property="deleteStatus" jdbcType="VARCHAR" />
        <result column="org_name" property="orgName" jdbcType="VARCHAR" />
        <result column="org_level" property="orgLevel" jdbcType="VARCHAR" />
        <result column="status" property="status" jdbcType="VARCHAR" />
        <result column="sup_org_id" property="supOrgId" jdbcType="VARCHAR" />
        <result column="flag1" property="flag1" jdbcType="VARCHAR" />
        <result column="flag2" property="flag2" jdbcType="VARCHAR" />
        <result column="flag3" property="flag3" jdbcType="VARCHAR" />
        <result column="flag4" property="flag4" jdbcType="VARCHAR" />
    </resultMap>
    <sql id="Base_Column_List" >
        org_id, add_user, add_time, update_user, update_time, valid_status, delete_status, 
        org_name, org_level, status, sup_org_id, flag1, flag2, flag3, flag4
    </sql>

    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
        SELECT 
        <include refid="Base_Column_List" /> 
        FROM t_sap_dept
        WHERE org_id = #{orgId,jdbcType=VARCHAR}
    </select>

    <select id="selectByEntity" resultMap="BaseResultMap" parameterType="com.yutong.demand.synchrous.entity.SapDept" >
        SELECT 
        <include refid="Base_Column_List" /> 
        FROM t_sap_dept
        <where>
            <if test="orgId != null" >
                AND org_id = #{orgId,jdbcType=VARCHAR}
            </if>
            <if test="addUser != null" >
                AND add_user = #{addUser,jdbcType=VARCHAR}
            </if>
            <if test="addTime != null" >
                AND add_time = #{addTime,jdbcType=TIMESTAMP}
            </if>
            <if test="updateUser != null" >
                AND update_user = #{updateUser,jdbcType=VARCHAR}
            </if>
            <if test="updateTime != null" >
                AND update_time = #{updateTime,jdbcType=TIMESTAMP}
            </if>
            <if test="validStatus != null" >
                AND valid_status = #{validStatus,jdbcType=VARCHAR}
            </if>
            <if test="deleteStatus != null" >
                AND delete_status = #{deleteStatus,jdbcType=VARCHAR}
            </if>
            <if test="orgName != null" >
                AND org_name = #{orgName,jdbcType=VARCHAR}
            </if>
            <if test="orgLevel != null" >
                AND org_level = #{orgLevel,jdbcType=VARCHAR}
            </if>
            <if test="status != null" >
                AND status = #{status,jdbcType=VARCHAR}
            </if>
            <if test="supOrgId != null" >
                AND sup_org_id = #{supOrgId,jdbcType=VARCHAR}
            </if>
            <if test="flag1 != null" >
                AND flag1 = #{flag1,jdbcType=VARCHAR}
            </if>
            <if test="flag2 != null" >
                AND flag2 = #{flag2,jdbcType=VARCHAR}
            </if>
            <if test="flag3 != null" >
                AND flag3 = #{flag3,jdbcType=VARCHAR}
            </if>
            <if test="flag4 != null" >
                AND flag4 = #{flag4,jdbcType=VARCHAR}
            </if>
        </where>
    </select>

    <select id="selectByMap" resultMap="BaseResultMap" parameterType="java.util.Map" >
        SELECT 
        <include refid="Base_Column_List" /> 
        FROM t_sap_dept
        <where>
            <if test="orgId != null" >
                AND org_id = #{orgId,jdbcType=VARCHAR}
            </if>
            <if test="addUser != null" >
                AND add_user = #{addUser,jdbcType=VARCHAR}
            </if>
            <if test="addTime != null" >
                AND add_time = #{addTime,jdbcType=TIMESTAMP}
            </if>
            <if test="updateUser != null" >
                AND update_user = #{updateUser,jdbcType=VARCHAR}
            </if>
            <if test="updateTime != null" >
                AND update_time = #{updateTime,jdbcType=TIMESTAMP}
            </if>
            <if test="validStatus != null" >
                AND valid_status = #{validStatus,jdbcType=VARCHAR}
            </if>
            <if test="deleteStatus != null" >
                AND delete_status = #{deleteStatus,jdbcType=VARCHAR}
            </if>
            <if test="orgName != null" >
                AND org_name = #{orgName,jdbcType=VARCHAR}
            </if>
            <if test="orgLevel != null" >
                AND org_level = #{orgLevel,jdbcType=VARCHAR}
            </if>
            <if test="status != null" >
                AND status = #{status,jdbcType=VARCHAR}
            </if>
            <if test="supOrgId != null" >
                AND sup_org_id = #{supOrgId,jdbcType=VARCHAR}
            </if>
            <if test="flag1 != null" >
                AND flag1 = #{flag1,jdbcType=VARCHAR}
            </if>
            <if test="flag2 != null" >
                AND flag2 = #{flag2,jdbcType=VARCHAR}
            </if>
            <if test="flag3 != null" >
                AND flag3 = #{flag3,jdbcType=VARCHAR}
            </if>
            <if test="flag4 != null" >
                AND flag4 = #{flag4,jdbcType=VARCHAR}
            </if>
        </where>
    </select>

    <delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
        DELETE FROM t_sap_dept
        WHERE org_id = #{orgId,jdbcType=VARCHAR}
    </delete>

    <insert id="insert" parameterType="com.yutong.demand.synchrous.entity.SapDept">
        INSERT INTO t_sap_dept (
            org_id, add_user, add_time, update_user, update_time, valid_status, delete_status, 
            org_name, org_level, status, sup_org_id, flag1, flag2, flag3, flag4
        )
        VALUES (
            #{orgId,jdbcType=VARCHAR},#{addUser,jdbcType=VARCHAR},#{addTime,jdbcType=TIMESTAMP},
            #{updateUser,jdbcType=VARCHAR},#{updateTime,jdbcType=TIMESTAMP},#{validStatus,jdbcType=VARCHAR},
            #{deleteStatus,jdbcType=VARCHAR},#{orgName,jdbcType=VARCHAR},#{orgLevel,jdbcType=VARCHAR},
            #{status,jdbcType=VARCHAR},#{supOrgId,jdbcType=VARCHAR},#{flag1,jdbcType=VARCHAR},#{flag2,jdbcType=VARCHAR},
            #{flag3,jdbcType=VARCHAR},#{flag4,jdbcType=VARCHAR}
        )
    </insert>
    <insert id="insertSelective" parameterType="com.yutong.demand.synchrous.entity.SapDept">
        INSERT INTO t_sap_dept
        <trim prefix="(" suffix=")" suffixOverrides="," >
            <if test="orgId != null" >
                org_id,
            </if>
            <if test="addUser != null" >
                add_user,
            </if>
            <if test="addTime != null" >
                add_time,
            </if>
            <if test="updateUser != null" >
                update_user,
            </if>
            <if test="updateTime != null" >
                update_time,
            </if>
            <if test="validStatus != null" >
                valid_status,
            </if>
            <if test="deleteStatus != null" >
                delete_status,
            </if>
            <if test="orgName != null" >
                org_name,
            </if>
            <if test="orgLevel != null" >
                org_level,
            </if>
            <if test="status != null" >
                status,
            </if>
            <if test="supOrgId != null" >
                sup_org_id,
            </if>
            <if test="flag1 != null" >
                flag1,
            </if>
            <if test="flag2 != null" >
                flag2,
            </if>
            <if test="flag3 != null" >
                flag3,
            </if>
            <if test="flag4 != null" >
                flag4,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides="," >
            <if test="orgId != null" >
                #{orgId,jdbcType=VARCHAR},
            </if>
            <if test="addUser != null" >
                #{addUser,jdbcType=VARCHAR},
            </if>
            <if test="addTime != null" >
                #{addTime,jdbcType=TIMESTAMP},
            </if>
            <if test="updateUser != null" >
                #{updateUser,jdbcType=VARCHAR},
            </if>
            <if test="updateTime != null" >
                #{updateTime,jdbcType=TIMESTAMP},
            </if>
            <if test="validStatus != null" >
                #{validStatus,jdbcType=VARCHAR},
            </if>
            <if test="deleteStatus != null" >
                #{deleteStatus,jdbcType=VARCHAR},
            </if>
            <if test="orgName != null" >
                #{orgName,jdbcType=VARCHAR},
            </if>
            <if test="orgLevel != null" >
                #{orgLevel,jdbcType=VARCHAR},
            </if>
            <if test="status != null" >
                #{status,jdbcType=VARCHAR},
            </if>
            <if test="supOrgId != null" >
                #{supOrgId,jdbcType=VARCHAR},
            </if>
            <if test="flag1 != null" >
                #{flag1,jdbcType=VARCHAR},
            </if>
            <if test="flag2 != null" >
                #{flag2,jdbcType=VARCHAR},
            </if>
            <if test="flag3 != null" >
                #{flag3,jdbcType=VARCHAR},
            </if>
            <if test="flag4 != null" >
                #{flag4,jdbcType=VARCHAR},
            </if>
        </trim>
    </insert>
    <update id="updateByPrimaryKeySelective" parameterType="com.yutong.demand.synchrous.entity.SapDept">
        UPDATE t_sap_dept
        <set>
            <if test="addUser != null" >
                add_user = #{addUser,jdbcType=VARCHAR},
            </if>
            <if test="addTime != null" >
                add_time = #{addTime,jdbcType=TIMESTAMP},
            </if>
            <if test="updateUser != null" >
                update_user = #{updateUser,jdbcType=VARCHAR},
            </if>
            <if test="updateTime != null" >
                update_time = #{updateTime,jdbcType=TIMESTAMP},
            </if>
            <if test="validStatus != null" >
                valid_status = #{validStatus,jdbcType=VARCHAR},
            </if>
            <if test="deleteStatus != null" >
                delete_status = #{deleteStatus,jdbcType=VARCHAR},
            </if>
            <if test="orgName != null" >
                org_name = #{orgName,jdbcType=VARCHAR},
            </if>
            <if test="orgLevel != null" >
                org_level = #{orgLevel,jdbcType=VARCHAR},
            </if>
            <if test="status != null" >
                status = #{status,jdbcType=VARCHAR},
            </if>
            <if test="supOrgId != null" >
                sup_org_id = #{supOrgId,jdbcType=VARCHAR},
            </if>
            <if test="flag1 != null" >
                flag1 = #{flag1,jdbcType=VARCHAR},
            </if>
            <if test="flag2 != null" >
                flag2 = #{flag2,jdbcType=VARCHAR},
            </if>
            <if test="flag3 != null" >
                flag3 = #{flag3,jdbcType=VARCHAR},
            </if>
            <if test="flag4 != null" >
                flag4 = #{flag4,jdbcType=VARCHAR},
            </if>
        </set>
        WHERE org_id = #{orgId,jdbcType=VARCHAR}
    </update>
    <update id="updateByPrimaryKey" parameterType="com.yutong.demand.synchrous.entity.SapDept">
        UPDATE t_sap_dept
           SET add_user = #{addUser,jdbcType=VARCHAR},
               add_time = #{addTime,jdbcType=TIMESTAMP},
               update_user = #{updateUser,jdbcType=VARCHAR},
               update_time = #{updateTime,jdbcType=TIMESTAMP},
               valid_status = #{validStatus,jdbcType=VARCHAR},
               delete_status = #{deleteStatus,jdbcType=VARCHAR},
               org_name = #{orgName,jdbcType=VARCHAR},
               org_level = #{orgLevel,jdbcType=VARCHAR},
               status = #{status,jdbcType=VARCHAR},
               sup_org_id = #{supOrgId,jdbcType=VARCHAR},
               flag1 = #{flag1,jdbcType=VARCHAR},
               flag2 = #{flag2,jdbcType=VARCHAR},
               flag3 = #{flag3,jdbcType=VARCHAR},
               flag4 = #{flag4,jdbcType=VARCHAR}
         WHERE org_id = #{orgId,jdbcType=VARCHAR}
    </update>

    <insert id="batchInsert" parameterType="java.util.List">
        INSERT INTO t_sap_dept (
            org_id, add_user, add_time, update_user, update_time, valid_status, delete_status,
            org_name, org_level, status, sup_org_id, flag1, flag2, flag3, flag4
        )
        VALUES
        <foreach collection="list" item="item" separator="," index="index">
            (
            #{item.orgId,jdbcType=VARCHAR},#{item.addUser,jdbcType=VARCHAR},#{item.addTime,jdbcType=TIMESTAMP},
            #{item.updateUser,jdbcType=VARCHAR},#{item.updateTime,jdbcType=TIMESTAMP},#{item.validStatus,jdbcType=VARCHAR},
            #{item.deleteStatus,jdbcType=VARCHAR},#{item.orgName,jdbcType=VARCHAR},#{item.orgLevel,jdbcType=VARCHAR},
            #{item.status,jdbcType=VARCHAR},#{item.supOrgId,jdbcType=VARCHAR},#{item.flag1,jdbcType=VARCHAR},#{item.flag2,jdbcType=VARCHAR},
            #{item.flag3,jdbcType=VARCHAR},#{item.flag4,jdbcType=VARCHAR}
            )
        </foreach>
    </insert>


    <!-- 查询部门数量 -->
    <select id="getDeptCount" parameterType="com.yutong.demand.synchrous.entity.SapDept" resultType="java.util.Map">
        SELECT count(1) as "totalCount" FROM t_sap_dept
        <where>
            <if test="supOrgId != null and supOrgId != ''" >
                AND sup_org_id = #{supOrgId, jdbcType=VARCHAR}
            </if>
            <if test="validStatus != null and validStatus != '' " >
                AND valid_status = #{validStatus, jdbcType=VARCHAR}
            </if>
            <if test="deleteStatus != null and deleteStatus != ''" >
                AND delete_status = #{deleteStatus, jdbcType=VARCHAR}
            </if>
        </where>
    </select>

    <!-- 清除部门数量 -->
    <delete id="clearData" parameterType="java.lang.Object" >
        truncate table t_sap_dept
    </delete>

    <select id="getByOrgIds" parameterType="java.util.List" resultMap="BaseResultMap" >
        SELECT
        <include refid="Base_Column_List" />
        FROM t_sap_dept
        WHERE valid_status = '1' and delete_status = '0'
        <if test="list != null and list.size() > 0 ">
            <foreach collection="list" item="item" open=" and org_id in (" separator="," close=")" >
                #{item, jdbcType=VARCHAR}
            </foreach>
        </if>
    </select>

</mapper>

3、申明SapDeptService类

package com.tianmao.demand.synchrous.service;
import com.tianmao.demand.synchrous.entity.SapDept;
import com.tianmao.demand.synchrous.entity.vo.DeptDataVO;

import java.util.List;

/**
 * 同步集团部门服务接口
 *
 */
public interface SapDeptService {

    /**
     * 组织列表[天猫网络及其子部门]
     *
     *
     * @return
     */
    DeptDataVO.OrgALLTreeVO<DeptDataVO.OrgALLTreeVO> findOrgAllTree();

    /**
     * 组织ID列表[天猫网络及其子部门]
     *
     *
     * @return
     */
    List<String> findAllOrgIdList();


}

4、SapDeptService类实现

package com.tianmao.demand.synchrous.service.impl;

import com.alibaba.fastjson.JSON;
import com.tianmao.utils.CollectionUtils;
import com.tianmao.utils.StringUtils;
import com.tianmao.demand.synchrous.component.SapRootDeptConfig;
import com.tianmao.demand.synchrous.dao.SapDeptDao;
import com.tianmao.demand.synchrous.entity.SapDept;
import com.tianmao.demand.synchrous.entity.vo.DeptDataVO;
import com.tianmao.demand.synchrous.service.SapDeptService;
import com.tianmao.demand.synchrous.utils.SpSapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Collectors;

/**
 * 同步集团员工信息到本地
 */
@Service
public class SapDeptServiceImpl implements SapDeptService {
    private static Logger logger = LoggerFactory.getLogger(SapDeptServiceImpl.class);

    @Autowired
    private SapRootDeptConfig sapRootDeptConfig;

    @Autowired
    private SapDeptDao sapDeptDao;

    @Override
    public DeptDataVO.OrgALLTreeVO<DeptDataVO.OrgALLTreeVO> findOrgAllTree() {
        DeptDataVO.OrgALLTreeVO<DeptDataVO.OrgALLTreeVO> treeOrgVO = new DeptDataVO.OrgALLTreeVO();
        //1、获取全部相关组织
        SapDept sapDept = new SapDept();
        sapDept.setStatus(SapDept.VALID_STATUS_TRUE);
        sapDept.setValidStatus(SapDept.VALID_STATUS_TRUE);
        sapDept.setDeleteStatus(SapDept.DELETE_STATUS_FALSE);
        List<SapDept> sapDeptList = sapDeptDao.select(sapDept);
        // 根部门ID
        String rootOrgId = sapRootDeptConfig.getOrgId();
        //2.获取根节点
        List<SapDept> rootOrgList = sapDeptList.stream().filter(m -> {
            if (StringUtils.equals(rootOrgId, m.getOrgId())) {
                return true;
            } else {
                return false;
            }
        }).collect(Collectors.toList());

        if (CollectionUtils.isNotEmpty(rootOrgList)) {
            SapDept rootOrg = rootOrgList.get(0);
            treeOrg(treeOrgVO, sapDeptList, rootOrg);
        }

        return treeOrgVO;
    }

    /**
     * 获取组织人员树状结构
     *
     * @param orgTreeVO       返回类
     * @param sapDeptList     组织列表
     * @param supSapDept      上级组织节点
     */
    private void treeOrg(DeptDataVO.OrgALLTreeVO<DeptDataVO.OrgALLTreeVO> orgTreeVO, List<SapDept> sapDeptList, SapDept supSapDept) {
        BeanUtils.copyProperties(supSapDept, orgTreeVO);
        List<DeptDataVO.OrgALLTreeVO> orgNameVOList = sapDeptList.stream().filter(m -> StringUtils.equals(supSapDept.getOrgId(), m.getSupOrgId())).map(m -> {
            DeptDataVO.OrgALLTreeVO<DeptDataVO.OrgALLTreeVO> nodeOrgTreeVO = new DeptDataVO.OrgALLTreeVO();
            BeanUtils.copyProperties(m, nodeOrgTreeVO);
            treeOrg(nodeOrgTreeVO, sapDeptList, m);
            return nodeOrgTreeVO;
        }).collect(Collectors.toList());
        orgTreeVO.setOrgNodes(orgNameVOList);
    }


    @Override
    public List<String> findAllOrgIdList() {
        List<String> orgIdList = new ArrayList<>();
        DeptDataVO.OrgALLTreeVO<DeptDataVO.OrgALLTreeVO> orgAllTree = findOrgAllTree();
        if(orgAllTree != null){
            orgIdList.add(orgAllTree.getOrgId());
            getChildNodeOrgId(orgIdList, orgAllTree.getOrgNodes());
        }
        return orgIdList;
    }

    private void getChildNodeOrgId(List<String> orgIdList, List<DeptDataVO.OrgALLTreeVO> orgNodes){
        if(CollectionUtils.isNotEmpty(orgNodes)){
            orgNodes.stream().forEach(new Consumer<DeptDataVO.OrgALLTreeVO>() {
                @Override
                public void accept(DeptDataVO.OrgALLTreeVO orgALLTreeVO) {
                    orgIdList.add(orgALLTreeVO.getOrgId());
                    getChildNodeOrgId(orgIdList, orgALLTreeVO.getOrgNodes());
                }
            });
        }

    }


}

链接: 配置类链接地址.


版权声明:本文为xiaomoyao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。