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