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