src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/domain/vo/CascaderDataVO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/service/DepartmentService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/viewmodel/admin/department/DepartmentResponseVM.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/DepartmentMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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()); } } src/main/java/com/mindskip/xzs/domain/vo/CascaderDataVO.java
New file @@ -0,0 +1,36 @@ package com.mindskip.xzs.domain.vo; import lombok.Data; import java.util.List; /** * 级联选择器数据 * * @author:xp * @date:2024/7/7 20:50 */ @Data public class CascaderDataVO { /** * 选中的值,id */ private Integer value; /** * 展示的内容 */ private String label; /** * 父级 */ private Integer parentId; /** * 子级数据 */ private List<CascaderDataVO> children; } 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(); } 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(); } 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<>(); // 第一步:将所有节点放入map中,并初始化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<>(); // 第一步:将所有节点放入map中,并初始化children列表 for (CascaderDataVO dept : departments) { map.put(dept.getValue(), dept); dept.setChildren(new ArrayList<>()); } // 第二步:构建树形结构 for (CascaderDataVO dept : departments) { if (dept.getParentId() == null) { // 假设顶级部门的parentId为null或0 rootNodes.add(dept); } else { CascaderDataVO parent = map.get(dept.getParentId()); if (parent != null) { parent.getChildren().add(dept); } } } return rootNodes; } } 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; 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>