zhongrj
2023-04-23 396bf585bc43c16c944fdc03e9e5efc5a8432aad
新增组织机构人员树查询接口
6 files modified
1 files added
200 ■■■■■ changed files
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/node/DeptUserTreeNode.java 17 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/NodeTreeUtil.java 41 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java 15 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java 27 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml 75 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java 17 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/node/DeptUserTreeNode.java
New file
@@ -0,0 +1,17 @@
package cn.gistack.common.node;
import lombok.Data;
/**
 * 部门用户树node
 * @author zhongrj
 * @date 2023-04-23
 */
@Data
public class DeptUserTreeNode extends TreeNode{
    /**
     * 手机号
     */
    private String phone;
}
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/NodeTreeUtil.java
@@ -1,7 +1,9 @@
package cn.gistack.common.utils;
import cn.gistack.common.node.DeptUserTreeNode;
import cn.gistack.common.node.TreeNode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -32,6 +34,45 @@
    }
    /**
     * map 转 tree 组织机构(父子id不会重复的情况,数据查询来自同一个表)
     * @param treeMap
     * @return
     */
    public  static List<TreeNode> getDeptAndUserNodeTree(Map<String, DeptUserTreeNode> treeMap){
        List<TreeNode> tree = new ArrayList<>();
        if (treeMap.size() > 1) {
            treeMap.forEach((id, treeNode) -> {
                if (!treeNode.getHasChildren()){
                    // 判断是否有绑定多个部门
                    List<String> asList = Arrays.asList(treeNode.getParentId().split(","));
                    if (asList.size()>1){
                        for (String parentId : asList) {
                            if (treeMap.containsKey(parentId)) {
                                treeMap.get(parentId).getChildren().add(treeNode);
                            } else {
                                tree.add(treeNode);
                            }
                        }
                    }else {
                        if (treeMap.containsKey(treeNode.getParentId())) {
                            treeMap.get(treeNode.getParentId()).getChildren().add(treeNode);
                        } else {
                            tree.add(treeNode);
                        }
                    }
                }else {
                    if (treeMap.containsKey(treeNode.getParentId())) {
                        treeMap.get(treeNode.getParentId()).getChildren().add(treeNode);
                    } else {
                        tree.add(treeNode);
                    }
                }
            });
        }
        return tree;
    }
    /**
     * list 转 tree 组织机构
     * @param parentList
     * @param childrenList
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java
@@ -16,6 +16,9 @@
 */
package cn.gistack.system.controller;
import cn.gistack.common.node.DeptUserTreeNode;
import cn.gistack.common.node.TreeNode;
import cn.gistack.common.utils.NodeTreeUtil;
import cn.gistack.system.vo.DeptVO;
import cn.gistack.system.wrapper.DeptWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -176,4 +179,16 @@
    }
    /**
     * 查询组织机构树数据(下级包含人员信息)
     * @param treeNode
     * @return
     */
    @GetMapping("/getDeptAndUserTree")
    @ApiOperation(value = "查询组织机构树数据(下级包含人员信息)")
    public R getDeptAndUserTree(DeptUserTreeNode treeNode) {
        return R.data(deptService.getDeptAndUserTree(treeNode));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java
@@ -16,9 +16,13 @@
 */
package cn.gistack.system.mapper;
import cn.gistack.common.node.DeptUserTreeNode;
import cn.gistack.common.node.TreeNode;
import cn.gistack.system.entity.Dept;
import cn.gistack.system.vo.DeptVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@@ -65,4 +69,27 @@
     */
    List<String> getDeptNames(Long[] ids);
    /**
     * 查询组织机构树数据(下级包含人员信息)
     * @param treeNode
     * @return
     */
    @MapKey(value = "id")
    Map<String, DeptUserTreeNode> getDeptAndUserTree(@Param("treeNode") DeptUserTreeNode treeNode);
    /**
     * 查询组织机构树
     * @param treeNode
     * @return
     */
    @MapKey(value = "id")
    Map<String, DeptUserTreeNode> getDeptMap(@Param("treeNode") DeptUserTreeNode treeNode);
    /**
     * 查询用户树
     * @param treeNode
     * @return
     */
    @MapKey(value = "id")
    Map<String, DeptUserTreeNode> getUserMap(@Param("treeNode") DeptUserTreeNode treeNode);
}
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml
@@ -112,4 +112,79 @@
        and is_deleted = 0
    </select>
    <!--查询组织机构树数据(下级包含人员信息)-->
    <select id="getDeptAndUserTree" resultType="cn.gistack.common.node.DeptUserTreeNode">
        (
            SELECT
            dept.id,
            dept.parent_id parentId,
            dept.dept_name AS name,
            0 AS phone,
            (
                SELECT
                CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
                FROM
                blade_dept
                WHERE
                parent_id = dept.id and is_deleted = 0
            ) AS hasChildren
            FROM
            blade_dept dept WHERE dept.is_deleted = 0
            <if test="treeNode.id!=null and treeNode.id!=''">
                and dept.id = #{treeNode.id}
            </if>
        )
        union
        (
            select
            bu.id,
            bu.dept_id parentId,
            bu.account AS name,
            bu.phone,
            0 as hasChildren
            from blade_user bu left join blade_dept bd on bd.id = bu.dept_id
            where 1=1 and bu.is_deleted = 0 and bu.status = 1
            <if test="treeNode.id!=null and treeNode.id!=''">
                and bu.dept_id like concat(concat('%',#{treeNode.id}),'%')
            </if>
        )
    </select>
    <!--查询组织机构树-->
    <select id="getDeptMap" resultType="cn.gistack.common.node.DeptUserTreeNode">
        SELECT
        dept.id,
        dept.parent_id parentId,
        dept.dept_name AS name,
        0 AS phone,
        (
            SELECT
            CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
            FROM
            blade_dept
            WHERE
            parent_id = dept.id and is_deleted = 0
        ) AS hasChildren
        FROM
        blade_dept dept WHERE dept.is_deleted = 0
        <if test="treeNode.id!=null and treeNode.id!=''">
            and dept.id = #{treeNode.id}
        </if>
    </select>
    <!--查询组织机构树数据(下级包含人员信息)-->
    <select id="getUserMap" resultType="cn.gistack.common.node.DeptUserTreeNode">
        select
        bu.id,
        bu.dept_id parentId,
        bu.account AS name,
        bu.phone,
        0 as hasChildren
        from blade_user bu left join blade_dept bd on bd.id = bu.dept_id
        where 1=1 and bu.is_deleted = 0 and bu.status = 1
        <if test="treeNode.id!=null and treeNode.id!=''">
            and bu.dept_id like concat(concat('%',#{treeNode.id}),'%')
        </if>
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java
@@ -16,6 +16,8 @@
 */
package cn.gistack.system.service;
import cn.gistack.common.node.DeptUserTreeNode;
import cn.gistack.common.node.TreeNode;
import cn.gistack.system.entity.Dept;
import cn.gistack.system.vo.DeptVO;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -116,4 +118,10 @@
     */
    List<DeptVO> search(String deptName, Long parentId);
    /**
     * 查询组织机构树数据(下级包含人员信息)
     * @param treeNode
     * @return
     */
    List<TreeNode> getDeptAndUserTree(DeptUserTreeNode treeNode);
}
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java
@@ -16,6 +16,9 @@
 */
package cn.gistack.system.service.impl;
import cn.gistack.common.node.DeptUserTreeNode;
import cn.gistack.common.node.TreeNode;
import cn.gistack.common.utils.NodeTreeUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -170,4 +173,18 @@
        return DeptWrapper.build().listNodeVO(deptList);
    }
    /**
     * 查询组织机构树数据(下级包含人员信息)
     * @param treeNode
     * @return
     */
    @Override
    public List<TreeNode> getDeptAndUserTree(DeptUserTreeNode treeNode) {
        // 查询数据
        Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMap(treeNode);
        Map<String, DeptUserTreeNode> userMap = baseMapper.getUserMap(treeNode);
        deptMap.putAll(userMap);
        // 处理并返回
        return NodeTreeUtil.getDeptAndUserNodeTree(deptMap);
    }
}