From 396bf585bc43c16c944fdc03e9e5efc5a8432aad Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Sun, 23 Apr 2023 11:46:27 +0800
Subject: [PATCH] 新增组织机构人员树查询接口
---
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java | 8 ++
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/node/DeptUserTreeNode.java | 17 ++++
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java | 27 ++++++
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/NodeTreeUtil.java | 41 ++++++++++
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java | 15 +++
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java | 17 ++++
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml | 75 ++++++++++++++++++
7 files changed, 200 insertions(+), 0 deletions(-)
diff --git a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/node/DeptUserTreeNode.java b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/node/DeptUserTreeNode.java
new file mode 100644
index 0000000..b5bea1e
--- /dev/null
+++ b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/node/DeptUserTreeNode.java
@@ -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;
+}
diff --git a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/NodeTreeUtil.java b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/NodeTreeUtil.java
index 082799b..ca9864a 100644
--- a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/utils/NodeTreeUtil.java
+++ b/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
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java
index fd8aab6..50a79de 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/DeptController.java
+++ b/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));
+ }
+
+
}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java
index 739575b..00d489d 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.java
+++ b/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);
}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml
index 654eb1d..2d88964 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/DeptMapper.xml
+++ b/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>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java
index c2c1312..8a04daf 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IDeptService.java
+++ b/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);
}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java
index e1b62e9..9817c4f 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/DeptServiceImpl.java
+++ b/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);
+ }
}
--
Gitblit v1.9.3