xiangpei
2024-07-07 5912494a3298c006e47c0d81c8feb59ea978d43c
部门管理树状:分页
6个文件已修改
1个文件已添加
152 ■■■■■ 已修改文件
src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/vo/CascaderDataVO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/DepartmentService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/viewmodel/admin/department/DepartmentResponseVM.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/DepartmentMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | 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>