From 7f85ff7e882ed4d3d39c3261bc996af9cf656aa1 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Wed, 28 Feb 2024 14:26:19 +0800
Subject: [PATCH] 消息管理

---
 src/main/java/org/springblade/common/utils/NodeTreeUtil.java                       |   21 ++++-
 src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.xml |   11 ++
 src/main/java/org/springblade/modules/system/mapper/DeptMapper.java                |   13 +++
 src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml                 |   90 ++++++++++++++++++++++
 src/main/java/org/springblade/modules/system/controller/DeptController.java        |   11 ++
 src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java     |   29 ++++++
 src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java        |    2 
 src/main/java/org/springblade/modules/system/service/IDeptService.java             |    2 
 src/main/java/org/springblade/modules/system/node/DeptUserTreeNode.java            |    2 
 9 files changed, 171 insertions(+), 10 deletions(-)

diff --git a/src/main/java/org/springblade/common/utils/NodeTreeUtil.java b/src/main/java/org/springblade/common/utils/NodeTreeUtil.java
index efc38be..3a58bbc 100644
--- a/src/main/java/org/springblade/common/utils/NodeTreeUtil.java
+++ b/src/main/java/org/springblade/common/utils/NodeTreeUtil.java
@@ -8,10 +8,8 @@
 import org.springblade.modules.house.vo.HouseTree;
 import org.springblade.modules.system.node.DeptUserTreeNode;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * node tree 工具类
@@ -149,6 +147,10 @@
 
 	/**
 	 * map 转 tree 组织机构(父子id不会重复的情况,数据查询来自同一个表)
+	 *
+	 * 把部门用户树遍历一遍,每个值,查询他的parentId在不在用户部门树中。如果存在,就把这个加在下级
+	 * 最后最上级的parentId肯定不在用户部门树中,把最上级的加到新树里。返回新树
+	 *
 	 * @param treeMap
 	 * @return
 	 */
@@ -156,18 +158,25 @@
 		List<DeptUserTreeNode> 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())) {
 							DeptUserTreeNode deptUserTreeNode =treeMap.get(treeNode.getParentId());
 							deptUserTreeNode.getChildren().add(treeNode);
@@ -176,6 +185,7 @@
 						}
 					}
 				}else {
+					//有下级
 					if (treeMap.containsKey(treeNode.getParentId())) {
 						treeMap.get(treeNode.getParentId()).getChildren().add(treeNode);
 					} else {
@@ -184,6 +194,7 @@
 				}
 			});
 		}
+
 		return tree;
 	}
 }
diff --git a/src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.xml b/src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.xml
index 7d3242d..f508b36 100644
--- a/src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.xml
+++ b/src/main/java/org/springblade/modules/messageRecord/mapper/MessageRecordMapper.xml
@@ -4,7 +4,9 @@
 
 
     <select id="selectMessageRecordPage" resultType="org.springblade.modules.messageRecord.vo.MessageRecordVO">
-        select bmr.* from blade_message_record bmr
+        select bmr.*,GROUP_CONCAT(bu.real_name) userName
+        from blade_message_record bmr
+        LEFT JOIN blade_user bu on bmr.receiver like CONCAT('%',bu.id,'%')
         where bmr.is_deleted = 0
         <if test="vo.type != null and vo.type !=''">
             and bmr.type  LIKE CONCAT('%',#{vo.type},'%')
@@ -18,6 +20,13 @@
         <if test="vo.title != null and vo.title != ''">
             and bmr.title LIKE CONCAT('%',#{vo.title},'%')
         </if>
+        <if test="vo.createUser != null and vo.createUser != ''">
+            and bmr.create_user = #{vo.createUser}
+        </if>
+        <if test="vo.messageResource != null and vo.messageResource !=''">
+            and bmr.message_resource = #{vo.messageResource}
+        </if>
+        GROUP BY bmr.id
     </select>
 
 
diff --git a/src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java b/src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java
index b0d7821..d8326a8 100644
--- a/src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java
+++ b/src/main/java/org/springblade/modules/messageRecord/vo/MessageRecordVO.java
@@ -33,4 +33,6 @@
 
 	private String startTime;
 	private String endTime;
+
+	private String userName;
 }
diff --git a/src/main/java/org/springblade/modules/system/controller/DeptController.java b/src/main/java/org/springblade/modules/system/controller/DeptController.java
index a23c600..8e786a4 100644
--- a/src/main/java/org/springblade/modules/system/controller/DeptController.java
+++ b/src/main/java/org/springblade/modules/system/controller/DeptController.java
@@ -236,6 +236,15 @@
 		return R.data(deptService.dataHandleCommunityByPolice());
 	}
 
-
+	/**
+	 * 查询组织机构树数据(下级包含人员信息)(懒加载)
+	 * @param treeNode
+	 * @return
+	 */
+	@GetMapping("/getDeptAndUserTreeLazyTree")
+	@ApiOperation(value = "查询组织机构树数据(下级包含人员信息)")
+	public R getDeptAndUserTreeLazyTree(DeptUserTreeNode treeNode) {
+		return R.data(deptService.getDeptAndUserTreeLazyTree(treeNode));
+	}
 
 }
diff --git a/src/main/java/org/springblade/modules/system/mapper/DeptMapper.java b/src/main/java/org/springblade/modules/system/mapper/DeptMapper.java
index c52324e..56a16d3 100644
--- a/src/main/java/org/springblade/modules/system/mapper/DeptMapper.java
+++ b/src/main/java/org/springblade/modules/system/mapper/DeptMapper.java
@@ -84,6 +84,15 @@
 	@MapKey(value = "id")
 	Map<String, DeptUserTreeNode> getDeptMap(@Param("treeNode") DeptUserTreeNode treeNode);
 
+
+	/**
+	 * 查询组织机构树,并且获取下级
+	 * @param treeNode
+	 * @return
+	 */
+	@MapKey(value = "id")
+	Map<String, DeptUserTreeNode> getDeptMapAndChildren(@Param("treeNode")DeptUserTreeNode treeNode);
+
 	/**
 	 * 查询用户树
 	 * @param treeNode
@@ -105,4 +114,8 @@
 	 * @return
 	 */
     Dept getDeptByDeptIds(@Param("deptId") String deptId);
+	@MapKey(value = "id")
+	Map<String, DeptUserTreeNode> getDeptMapAndChild(@Param("treeNode")DeptUserTreeNode treeNode);
+	@MapKey(value = "id")
+	Map<String, DeptUserTreeNode> getUserMapByDeptIds(@Param("deptIds") String deptIds);
 }
diff --git a/src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml b/src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml
index c22b69a..5211eec 100644
--- a/src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/DeptMapper.xml
@@ -170,6 +170,73 @@
         </if>
     </select>
 
+    <select id="getDeptMapAndChildren" resultType="org.springblade.modules.system.node.DeptUserTreeNode">
+
+        SELECT
+        cast(dept.id as char) as id,
+        dept.parent_id parentId,
+        dept.dept_name AS name,
+        1 as isMan,
+        0 AS phone,
+        0 as email,
+        (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,
+        IFNULL(bu.num,0) AS userCount
+        FROM
+        blade_dept dept
+        LEFT JOIN
+        (
+        SELECT COUNT(*) num,dept_id FROM blade_user where is_deleted = 0 GROUP BY dept_id
+        ) bu on dept.id = bu.dept_id
+        WHERE dept.is_deleted = 0
+        <if test="treeNode.id!=null and treeNode.id!=''">
+            and dept.id = #{treeNode.id}
+        </if>
+
+        union
+
+        SELECT
+        cast(dept.id as char) as id,
+        dept.parent_id parentId,
+        dept.dept_name AS name,
+        1 as isMan,
+        0 AS phone,
+        0 as email,
+        (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,
+        IFNULL(bu.num,0) AS userCount
+        FROM
+        blade_dept dept
+        LEFT JOIN
+        (
+        SELECT COUNT(*) num,dept_id FROM blade_user where is_deleted = 0 GROUP BY dept_id
+        ) bu on dept.id = bu.dept_id
+        WHERE dept.is_deleted = 0
+        <if test="treeNode.id!=null and treeNode.id!=''">
+            AND ancestors LIKE CONCAT( '%',  #{treeNode.id}, '%')
+        </if>
+
+
+
+
+    </select>
+
+    <select id="getDeptMapAndChild" resultType="org.springblade.modules.system.node.DeptUserTreeNode">
+
+        SELECT
+            cast( dept.id AS CHAR ) AS id,
+            dept.parent_id parentId,
+            dept.dept_name AS NAME,
+            1 AS isMan,
+            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
+          AND dept.parent_id = #{treeNode.id}
+
+    </select>
+
+
     <!--查询组织机构树数据(下级包含人员信息)(排除组织机构对应不上的人员)-->
     <select id="getUserMap" resultType="org.springblade.modules.system.node.DeptUserTreeNode">
         select
@@ -183,10 +250,31 @@
         from blade_user bu join blade_dept bd on find_in_set(bu.dept_id,bd.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}),'%')
+            and (bu.dept_id = #{treeNode.id} or bd.ancestors LIKE CONCAT( '%',  #{treeNode.id}, '%'))
         </if>
     </select>
 
+    <select id="getUserMapByDeptIds" resultType="org.springblade.modules.system.node.DeptUserTreeNode">
+        select
+        bu.id,
+        bu.dept_id parentId,
+        bu.real_name AS name,
+        bu.phone,
+        bu.email,
+        2 as isMan,
+        0 as hasChildren
+        from blade_user bu join blade_dept bd on find_in_set(bu.dept_id,bd.id)
+        where 1=1 and bu.is_deleted = 0 and bu.status = 1
+        <if test="deptIds !=null and deptIds!=''">
+            and bu.dept_id in
+            <foreach collection="deptIds.split(',')" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+    </select>
+
+
+
     <!--查询网格对应的机构信息(包含父级机构名称)-->
     <select id="getGridDeptAndParentList" resultType="org.springblade.modules.system.vo.DeptVO">
         select bd.*,bd1.dept_name as parentName from blade_dept bd
diff --git a/src/main/java/org/springblade/modules/system/node/DeptUserTreeNode.java b/src/main/java/org/springblade/modules/system/node/DeptUserTreeNode.java
index 95e4d44..4cb7d83 100644
--- a/src/main/java/org/springblade/modules/system/node/DeptUserTreeNode.java
+++ b/src/main/java/org/springblade/modules/system/node/DeptUserTreeNode.java
@@ -21,4 +21,6 @@
 	 * 是人还是部门  1:部门  2:人
 	 */
 	private String isMan;
+
+	private Boolean disabled;
 }
diff --git a/src/main/java/org/springblade/modules/system/service/IDeptService.java b/src/main/java/org/springblade/modules/system/service/IDeptService.java
index 8a8aab9..ed6347d 100644
--- a/src/main/java/org/springblade/modules/system/service/IDeptService.java
+++ b/src/main/java/org/springblade/modules/system/service/IDeptService.java
@@ -153,4 +153,6 @@
 	 * @return
 	 */
 	Dept getDeptByDeptIds(String deptId);
+
+	Object getDeptAndUserTreeLazyTree(DeptUserTreeNode treeNode);
 }
diff --git a/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java
index 027413b..3127d74 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java
@@ -54,6 +54,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -408,11 +409,34 @@
 	@Override
 	public List<DeptUserTreeNode> getDeptAndUserTree(DeptUserTreeNode treeNode) {
 		// 查询数据
-		Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMap(treeNode);
+//		Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMap(treeNode);
+
+		Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMapAndChildren(treeNode);
 		Map<String, DeptUserTreeNode> userMap = baseMapper.getUserMap(treeNode);
 		deptMap.putAll(userMap);
 		List<DeptUserTreeNode> deptAndUserNodeTree = NodeTreeUtil.getDeptAndUserNodeTree(deptMap);
-		// 处理并返回
+		return deptAndUserNodeTree;
+	}
+
+	@Override
+	public Object getDeptAndUserTreeLazyTree(DeptUserTreeNode treeNode) {
+
+		//传一个部门id,查询出该部门的下一级部门
+		Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMapAndChild(treeNode);
+
+		String deptIds = "";
+		int count = 0;
+		for (String key:deptMap.keySet()){
+			count++;
+			deptIds += key;
+			if (count<deptMap.size()){
+				deptIds +=",";
+			}
+		}
+
+		Map<String, DeptUserTreeNode> userMap = baseMapper.getUserMapByDeptIds(deptIds);
+		deptMap.putAll(userMap);
+		List<DeptUserTreeNode> deptAndUserNodeTree = NodeTreeUtil.getDeptAndUserNodeTree(deptMap);
 		return deptAndUserNodeTree;
 	}
 
@@ -460,4 +484,5 @@
 	public Dept getDeptByDeptIds(String deptId) {
 		return baseMapper.getDeptByDeptIds(deptId);
 	}
+
 }

--
Gitblit v1.9.3