cnas-server/src/main/java/com/yuanchu/mom/dto/DepartmentDto.java
@@ -2,12 +2,14 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.ArrayList; import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor public class DepartmentDto { private Integer id; cnas-server/src/main/java/com/yuanchu/mom/mapper/DepartmentMapper.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yuanchu.mom.dto.DepartmentDto; import com.yuanchu.mom.dto.UserDto; import com.yuanchu.mom.pojo.Department; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -23,7 +24,7 @@ //获取部门树 List<Department> selectDepartment(); List<DepartmentDto> selectDepartment(); //根据选择的树展示相关的人员 IPage<UserDto> showUserById(@Param("page") IPage<UserDto> page, @Param("ids") List<String> ids, @Param("ew") QueryWrapper<UserDto> ew); cnas-server/src/main/java/com/yuanchu/mom/service/impl/DepartmentServiceImpl.java
@@ -17,6 +17,7 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import lombok.var; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -24,10 +25,7 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Wrapper; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; import java.util.stream.Collectors; /** @@ -57,26 +55,24 @@ //获取部门树 @Override public List<DepartmentDto> selectDepartment() { List<Department> departments = departmentMapper.selectDepartment(); // 假设 resultSet 是从数据库查询返回的结果集 List<DepartmentDto> departmentDtos = new ArrayList<>(); Map<Integer, DepartmentDto> departmentMap = new HashMap<>(); List<DepartmentDto> departments = departmentMapper.selectDepartment(); //获取父节点 List<DepartmentDto> collect = departments.stream().filter(m -> m.getFatherId() == null).peek( (m) -> m.setChildren(getChildren(m, departments)) ).collect(Collectors.toList()); return collect; } for (Department department : departments) { DepartmentDto departmentDto = new DepartmentDto(department.getId(), department.getName(), department.getFatherId(), new ArrayList<DepartmentDto>()); departmentMap.put(department.getId(), departmentDto); if (department.getFatherId() == null) { // 根部门 departmentDtos.add(departmentDto); } else { // 将当前部门添加到父部门的 children 列表中 DepartmentDto parent = departmentMap.get(department.getFatherId()); if (parent != null) { parent.getChildren().add(departmentDto); } } } return departmentDtos; /** * 递归查询子节点 * @param root 根节点 * @param all 所有节点 * @return 根节点信息 */ private List<DepartmentDto> getChildren(DepartmentDto root, List<DepartmentDto> all) { return all.stream().filter(m -> Objects.equals(m.getFatherId(), root.getId())).peek( (m) -> m.setChildren(getChildren(m, all)) ).collect(Collectors.toList()); } //删除部门 cnas-server/src/main/resources/mapper/DepartmentMapper.xml
@@ -1,21 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.yuanchu.mom.mapper.DepartmentMapper"> <select id="selectDepartment" resultType="com.yuanchu.mom.pojo.Department"> WITH RECURSIVE DepartmentHierarchy AS ( SELECT id, name, father_id FROM department WHERE father_id IS NULL UNION ALL SELECT d.id, d.name, d.father_id FROM department d JOIN DepartmentHierarchy dh ON d.father_id = dh.id ) <select id="selectDepartment" resultType="com.yuanchu.mom.dto.DepartmentDto"> SELECT id, name, father_id FROM DepartmentHierarchy; FROM department </select> <select id="showUserById" resultType="com.yuanchu.mom.dto.UserDto"> select * from (select id, name, age, email, phone,depart_id from user where state=1 and SUBSTRING_INDEX(depart_id, ',', -1) in @@ -26,18 +16,17 @@ ${ew.customSqlSegment} </if> </select> <select id="selectSonById" resultType="java.lang.Integer"> WITH RECURSIVE DepartmentHierarchy AS ( SELECT id, name, father_id FROM department WHERE id = #{id} UNION ALL SELECT d.id, d.name, d.father_id FROM department d JOIN DepartmentHierarchy dh ON d.father_id = dh.id ) SELECT au.id FROM (SELECT * FROM department WHERE father_id IS NOT NULL) au, (SELECT @father_id := #{id}) pd WHERE FIND_IN_SET(father_id, @father_id) > 0 AND @father_id := concat(@father_id, ',', id) UNION SELECT id FROM DepartmentHierarchy order by id desc; FROM department WHERE id = #{id} ORDER BY id </select> </mapper>