From a7a6a0c332f268010b4da0161cdee80acf9bc4ce Mon Sep 17 00:00:00 2001
From: Crunchy <3114200645@qq.com>
Date: 星期一, 22 四月 2024 15:59:57 +0800
Subject: [PATCH] 2024-4-22 资源要求-人员明细-bug修改

---
 cnas-server/src/main/java/com/yuanchu/mom/dto/DepartmentDto.java                  |    2 +
 cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentServiceImpl.java |   42 +++++++++-----------
 cnas-server/src/main/resources/mapper/DepartmentMapper.xml                        |   37 ++++++------------
 cnas-server/src/main/java/com/yuanchu/mom/mapper/DepartmentMapper.java            |    3 +
 4 files changed, 36 insertions(+), 48 deletions(-)

diff --git a/cnas-server/src/main/java/com/yuanchu/mom/dto/DepartmentDto.java b/cnas-server/src/main/java/com/yuanchu/mom/dto/DepartmentDto.java
index b8dc71c..d1d94d0 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/dto/DepartmentDto.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/dto/DepartmentDto.java
@@ -2,12 +2,14 @@
 
 import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.util.ArrayList;
 import java.util.List;
 
 @Data
 @AllArgsConstructor
+@NoArgsConstructor
 public class DepartmentDto {
 
     private Integer id;
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/mapper/DepartmentMapper.java b/cnas-server/src/main/java/com/yuanchu/mom/mapper/DepartmentMapper.java
index 8a26404..833fb7f 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/mapper/DepartmentMapper.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/mapper/DepartmentMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.DepartmentDto;
 import com.yuanchu.mom.dto.UserDto;
 import com.yuanchu.mom.pojo.Department;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -23,7 +24,7 @@
 
 
     //鑾峰彇閮ㄩ棬鏍�
-    List<Department> selectDepartment();
+    List<DepartmentDto> selectDepartment();
 
     //鏍规嵁閫夋嫨鐨勬爲灞曠ず鐩稿叧鐨勪汉鍛�
     IPage<UserDto> showUserById(@Param("page") IPage<UserDto> page, @Param("ids") List<String> ids, @Param("ew") QueryWrapper<UserDto> ew);
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentServiceImpl.java b/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentServiceImpl.java
index 1d9cd61..fa99cdf 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentServiceImpl.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentServiceImpl.java
@@ -17,6 +17,7 @@
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.var;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -24,10 +25,7 @@
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.Wrapper;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -57,26 +55,24 @@
     //鑾峰彇閮ㄩ棬鏍�
     @Override
     public List<DepartmentDto> selectDepartment() {
-        List<Department> departments = departmentMapper.selectDepartment();
-        // 鍋囪 resultSet 鏄粠鏁版嵁搴撴煡璇㈣繑鍥炵殑缁撴灉闆�
-        List<DepartmentDto> departmentDtos = new ArrayList<>();
-        Map<Integer, DepartmentDto> departmentMap = new HashMap<>();
+        List<DepartmentDto> departments = departmentMapper.selectDepartment();
+        //鑾峰彇鐖惰妭鐐�
+        List<DepartmentDto> collect = departments.stream().filter(m -> m.getFatherId() == null).peek(
+                (m) -> m.setChildren(getChildren(m, departments))
+        ).collect(Collectors.toList());
+        return collect;
+    }
 
-        for (Department department : departments) {
-            DepartmentDto departmentDto = new DepartmentDto(department.getId(), department.getName(), department.getFatherId(), new ArrayList<DepartmentDto>());
-            departmentMap.put(department.getId(), departmentDto);
-            if (department.getFatherId() == null) {
-                // 鏍归儴闂�
-                departmentDtos.add(departmentDto);
-            } else {
-                // 灏嗗綋鍓嶉儴闂ㄦ坊鍔犲埌鐖堕儴闂ㄧ殑 children 鍒楄〃涓�
-                DepartmentDto parent = departmentMap.get(department.getFatherId());
-                if (parent != null) {
-                    parent.getChildren().add(departmentDto);
-                }
-            }
-        }
-        return departmentDtos;
+    /**
+     * 閫掑綊鏌ヨ瀛愯妭鐐�
+     * @param root  鏍硅妭鐐�
+     * @param all   鎵�鏈夎妭鐐�
+     * @return 鏍硅妭鐐逛俊鎭�
+     */
+    private List<DepartmentDto> getChildren(DepartmentDto root, List<DepartmentDto> all) {
+        return all.stream().filter(m -> Objects.equals(m.getFatherId(), root.getId())).peek(
+                (m) -> m.setChildren(getChildren(m, all))
+        ).collect(Collectors.toList());
     }
 
     //鍒犻櫎閮ㄩ棬
diff --git a/cnas-server/src/main/resources/mapper/DepartmentMapper.xml b/cnas-server/src/main/resources/mapper/DepartmentMapper.xml
index d29cd93..f0a3326 100644
--- a/cnas-server/src/main/resources/mapper/DepartmentMapper.xml
+++ b/cnas-server/src/main/resources/mapper/DepartmentMapper.xml
@@ -1,21 +1,11 @@
 <?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.yuanchu.mom.mapper.DepartmentMapper">
-    <select id="selectDepartment" resultType="com.yuanchu.mom.pojo.Department">
-        WITH RECURSIVE DepartmentHierarchy AS (
-            SELECT id, name, father_id
-            FROM department
-            WHERE father_id IS NULL
-
-            UNION ALL
-
-            SELECT d.id, d.name, d.father_id
-            FROM department d
-                     JOIN DepartmentHierarchy dh ON d.father_id = dh.id
-        )
+    <select id="selectDepartment" resultType="com.yuanchu.mom.dto.DepartmentDto">
         SELECT id, name, father_id
-        FROM DepartmentHierarchy;
+        FROM department
     </select>
+
     <select id="showUserById" resultType="com.yuanchu.mom.dto.UserDto">
         select * from (select id, name, age, email, phone,depart_id
         from user where state=1 and SUBSTRING_INDEX(depart_id, ',', -1) in
@@ -26,18 +16,17 @@
             ${ew.customSqlSegment}
         </if>
     </select>
+
     <select id="selectSonById" resultType="java.lang.Integer">
-        WITH RECURSIVE DepartmentHierarchy AS (
-            SELECT id, name, father_id
-            FROM department
-            WHERE id = #{id}
-            UNION ALL
-            SELECT d.id, d.name, d.father_id
-            FROM department d
-                     JOIN DepartmentHierarchy dh ON d.father_id = dh.id
-        )
+        SELECT au.id
+        FROM (SELECT * FROM department WHERE father_id IS NOT NULL) au,
+             (SELECT @father_id := #{id}) pd
+        WHERE FIND_IN_SET(father_id, @father_id) > 0
+                  AND @father_id := concat(@father_id, ',', id)
+        UNION
         SELECT id
-        FROM DepartmentHierarchy
-        order by id desc;
+        FROM department
+        WHERE id = #{id}
+        ORDER BY id
     </select>
 </mapper>

--
Gitblit v1.9.3