From 5912494a3298c006e47c0d81c8feb59ea978d43c Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期日, 07 七月 2024 22:14:15 +0800
Subject: [PATCH] 部门管理树状:分页

---
 src/main/resources/mapper/DepartmentMapper.xml                                      |    8 +-
 src/main/java/com/mindskip/xzs/domain/vo/CascaderDataVO.java                        |   36 ++++++++++++
 src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java           |   13 ++-
 src/main/java/com/mindskip/xzs/service/DepartmentService.java                       |   10 +++
 src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java              |   67 ++++++++++++++++++++--
 src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java                     |    8 ++
 src/main/java/com/mindskip/xzs/viewmodel/admin/department/DepartmentResponseVM.java |   10 +++
 7 files changed, 137 insertions(+), 15 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
index 6e85feb..d924abd 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
@@ -8,6 +8,7 @@
 import com.mindskip.xzs.domain.User;
 import com.mindskip.xzs.domain.UserDepartment;
 import com.mindskip.xzs.domain.vo.BaseSelect;
+import com.mindskip.xzs.domain.vo.CascaderDataVO;
 import com.mindskip.xzs.domain.vo.DepartmentVO;
 import com.mindskip.xzs.domain.vo.UpdateDeptAdminVO;
 import com.mindskip.xzs.repository.DepartmentMapper;
@@ -30,13 +31,10 @@
 @RequiredArgsConstructor
 public class DepartmentController extends BaseApiController {
 
-
     private final DepartmentService departmentService;
     private final UserService userService;
     private final UserDepartmentMapper userDepartmentMapper;
     private final DepartmentMapper departmentMapper;
-
-
 
     /**
      * 鑾峰彇閮ㄩ棬涓嬬敤鎴峰垪琛�(涓嬫媺)
@@ -64,8 +62,8 @@
 
 
     @RequestMapping(value = "/page/list", method = RequestMethod.POST)
-    public RestResponse<PageInfo<DepartmentResponseVM>> pageList(@RequestBody DepartmentResponseVM model) {
-        PageInfo<DepartmentResponseVM> pageInfo = departmentService.gets(model);
+    public RestResponse<List<DepartmentResponseVM>> pageList(@RequestBody DepartmentResponseVM model) {
+        List<DepartmentResponseVM> pageInfo = departmentService.gets(model);
         return RestResponse.ok(pageInfo);
     }
 
@@ -152,4 +150,9 @@
         return RestResponse.ok(userService.getDeptAdmins(isDeptAdmin() ? getCurrentUser().getId() : null));
     }
 
+    @GetMapping("/cascader")
+    public RestResponse<List<CascaderDataVO>> cascader(){
+        return RestResponse.ok(departmentService.cascader());
+    }
+
 }
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/CascaderDataVO.java b/src/main/java/com/mindskip/xzs/domain/vo/CascaderDataVO.java
new file mode 100644
index 0000000..e707398
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/vo/CascaderDataVO.java
@@ -0,0 +1,36 @@
+package com.mindskip.xzs.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 绾ц仈閫夋嫨鍣ㄦ暟鎹�
+ *
+ * @author锛歺p
+ * @date锛�2024/7/7 20:50
+ */
+@Data
+public class CascaderDataVO {
+
+    /**
+     * 閫変腑鐨勫�硷紝id
+     */
+    private Integer value;
+
+    /**
+     * 灞曠ず鐨勫唴瀹�
+     */
+    private String label;
+
+    /**
+     * 鐖剁骇
+     */
+    private Integer parentId;
+
+    /**
+     * 瀛愮骇鏁版嵁
+     */
+    private List<CascaderDataVO> children;
+
+}
diff --git a/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java b/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
index c530c64..b995bb3 100644
--- a/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
@@ -1,6 +1,7 @@
 package com.mindskip.xzs.repository;
 
 import com.mindskip.xzs.domain.Department;
+import com.mindskip.xzs.domain.vo.CascaderDataVO;
 import com.mindskip.xzs.viewmodel.admin.department.DepartmentResponseVM;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -31,4 +32,11 @@
      * @return
      */
     Integer countByAdminId(@Param("userId") Integer userId, @Param("id") Integer id);
+
+    /**
+     * 鎵�鏈夐儴闂�
+     *
+     * @return
+     */
+    List<CascaderDataVO> list();
 }
diff --git a/src/main/java/com/mindskip/xzs/service/DepartmentService.java b/src/main/java/com/mindskip/xzs/service/DepartmentService.java
index 13a8ea4..b22ba52 100644
--- a/src/main/java/com/mindskip/xzs/service/DepartmentService.java
+++ b/src/main/java/com/mindskip/xzs/service/DepartmentService.java
@@ -3,6 +3,7 @@
 import com.github.pagehelper.PageInfo;
 import com.mindskip.xzs.domain.Department;
 import com.mindskip.xzs.domain.vo.BaseSelect;
+import com.mindskip.xzs.domain.vo.CascaderDataVO;
 import com.mindskip.xzs.domain.vo.UpdateDeptAdminVO;
 import com.mindskip.xzs.viewmodel.admin.department.DepartmentResponseVM;
 
@@ -35,7 +36,7 @@
      * 鏌ヨ鎵�鏈夐儴闂�
      * @return
      */
-    PageInfo<DepartmentResponseVM> gets(DepartmentResponseVM departmentResponseVM);
+    List<DepartmentResponseVM> gets(DepartmentResponseVM departmentResponseVM);
 
     Department getById(Integer id);
 
@@ -50,4 +51,11 @@
      * @param form
      */
     void updateAdmin(UpdateDeptAdminVO form);
+
+    /**
+     * 绾ц仈閫夋嫨鍣ㄦ暟鎹�
+     *
+     * @return
+     */
+    List<CascaderDataVO> cascader();
 }
diff --git a/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
index 503fd0b..c548f23 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
@@ -5,6 +5,7 @@
 import com.mindskip.xzs.domain.Department;
 import com.mindskip.xzs.domain.enums.DeptAdminEnum;
 import com.mindskip.xzs.domain.vo.BaseSelect;
+import com.mindskip.xzs.domain.vo.CascaderDataVO;
 import com.mindskip.xzs.domain.vo.UpdateDeptAdminVO;
 import com.mindskip.xzs.repository.BaseMapper;
 import com.mindskip.xzs.repository.DepartmentMapper;
@@ -18,8 +19,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -77,10 +77,33 @@
     }
 
     @Override
-    public PageInfo<DepartmentResponseVM> gets(DepartmentResponseVM departmentResponseVM) {
-        return PageHelper.startPage(departmentResponseVM.getPageIndex(), departmentResponseVM.getPageSize(), "id desc").doSelectPageInfo(() ->
-                departmentMapper.page(departmentResponseVM)
-        );
+    public List<DepartmentResponseVM> gets(DepartmentResponseVM departmentResponseVM) {
+        List<DepartmentResponseVM> deptList = departmentMapper.page(departmentResponseVM);
+        return this.buildPageTree(deptList);
+    }
+
+    public List<DepartmentResponseVM> buildPageTree(List<DepartmentResponseVM> departments) {
+        // 鐢ㄤ簬瀛樺偍宸茬粡鏀惧叆鏍戠殑鑺傜偣锛屼互value涓洪敭
+        Map<Integer, DepartmentResponseVM> map = new HashMap<>();
+        List<DepartmentResponseVM> rootNodes = new ArrayList<>();
+
+        // 绗竴姝ワ細灏嗘墍鏈夎妭鐐规斁鍏ap涓紝骞跺垵濮嬪寲children鍒楄〃
+        for (DepartmentResponseVM dept : departments) {
+            map.put(dept.getId(), dept);
+            dept.setChildren(new ArrayList<>());
+        }
+        // 绗簩姝ワ細鏋勫缓鏍戝舰缁撴瀯
+        for (DepartmentResponseVM dept : departments) {
+            if (dept.getParentId() == null) {
+                rootNodes.add(dept);
+            } else {
+                DepartmentResponseVM parent = map.get(dept.getParentId());
+                if (parent != null) {
+                    parent.getChildren().add(dept);
+                }
+            }
+        }
+        return rootNodes;
     }
 
     @Override
@@ -130,4 +153,36 @@
         // 淇敼娌¤閫夋嫨鐨勭敤鎴峰苟涓斾笉鏄埆鐨勯儴闂ㄧ鐞嗗憳鐨勭敤鎴疯鑹蹭负1
         userMapper.cancelUserDeptAdmin(form);
     }
+
+    @Override
+    public List<CascaderDataVO> cascader() {
+        List<CascaderDataVO> deptList = departmentMapper.list();
+        List<CascaderDataVO> tree = this.buildTree(deptList);
+        return tree;
+    }
+
+
+    public List<CascaderDataVO> buildTree(List<CascaderDataVO> departments) {
+        // 鐢ㄤ簬瀛樺偍宸茬粡鏀惧叆鏍戠殑鑺傜偣锛屼互value涓洪敭
+        Map<Integer, CascaderDataVO> map = new HashMap<>();
+        List<CascaderDataVO> rootNodes = new ArrayList<>();
+
+        // 绗竴姝ワ細灏嗘墍鏈夎妭鐐规斁鍏ap涓紝骞跺垵濮嬪寲children鍒楄〃
+        for (CascaderDataVO dept : departments) {
+            map.put(dept.getValue(), dept);
+            dept.setChildren(new ArrayList<>());
+        }
+        // 绗簩姝ワ細鏋勫缓鏍戝舰缁撴瀯
+        for (CascaderDataVO dept : departments) {
+            if (dept.getParentId() == null) { // 鍋囪椤剁骇閮ㄩ棬鐨刾arentId涓簄ull鎴�0
+                rootNodes.add(dept);
+            } else {
+                CascaderDataVO parent = map.get(dept.getParentId());
+                if (parent != null) {
+                    parent.getChildren().add(dept);
+                }
+            }
+        }
+        return rootNodes;
+    }
 }
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/department/DepartmentResponseVM.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/department/DepartmentResponseVM.java
index dd82651..83f77d5 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/department/DepartmentResponseVM.java
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/department/DepartmentResponseVM.java
@@ -14,6 +14,16 @@
     private String name;
 
     /**
+     * 鐖剁骇ID
+     */
+    private Integer parentId;
+
+    /**
+     * 瀛愮骇鏁版嵁
+     */
+    private List<DepartmentResponseVM> children;
+
+    /**
      * 绠$悊鍛�
      */
     private List<Integer> adminIds;
diff --git a/src/main/resources/mapper/DepartmentMapper.xml b/src/main/resources/mapper/DepartmentMapper.xml
index d8bf95f..8b11241 100644
--- a/src/main/resources/mapper/DepartmentMapper.xml
+++ b/src/main/resources/mapper/DepartmentMapper.xml
@@ -21,14 +21,12 @@
     <update id="update" parameterType="com.mindskip.xzs.domain.Department">
         update t_department
         <set>
+            parent_id = #{parentId},
             <if test="name != null">
                 name = #{name,jdbcType=VARCHAR},
             </if>
             <if test="adminId != null">
                 admin_id = #{adminId},
-            </if>
-            <if test="parentId != null">
-                parent_id = #{parentId},
             </if>
             <if test="deleted != null">
                 deleted = #{deleted,jdbcType=VARCHAR},
@@ -127,4 +125,8 @@
         SELECT count(*) FROM t_department WHERE admin_id = #{userId} AND deleted = 0 AND id != #{id}
     </select>
 
+    <select id="list" resultType="com.mindskip.xzs.domain.vo.CascaderDataVO">
+        SELECT id as value, name as label, parent_id FROM t_department WHERE deleted = 0
+    </select>
+
 </mapper>

--
Gitblit v1.8.0