龚焕茏
2024-08-01 a56cbc8a929232b039f137fc51b5af27f40b2822
ycl-server/src/main/java/com/ycl/system/service/impl/SysDeptServiceImpl.java
@@ -3,6 +3,7 @@
import annotation.DataScope;
import com.ycl.exception.ServiceException;
import com.ycl.platform.base.BaseSelect;
import com.ycl.platform.base.Cascader;
import com.ycl.system.Result;
import com.ycl.system.domain.TreeSelect;
import com.ycl.system.entity.SysDept;
@@ -19,14 +20,12 @@
import org.springframework.stereotype.Service;
import utils.text.Convert;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 部门管理 服务实现
 *
 *
 * @author ruoyi
 */
@Service
@@ -40,7 +39,7 @@
    /**
     * 查询部门管理数据
     *
     *
     * @param dept 部门信息
     * @return 部门信息集合
     */
@@ -53,7 +52,7 @@
    /**
     * 查询部门树结构信息
     *
     *
     * @param dept 部门信息
     * @return 部门树信息集合
     */
@@ -66,7 +65,7 @@
    /**
     * 构建前端所需要树结构
     *
     *
     * @param depts 部门列表
     * @return 树结构列表
     */
@@ -93,7 +92,7 @@
    /**
     * 构建前端所需要下拉树结构
     *
     *
     * @param depts 部门列表
     * @return 下拉树结构列表
     */
@@ -106,7 +105,7 @@
    /**
     * 根据角色ID查询部门树信息
     *
     *
     * @param roleId 角色ID
     * @return 选中部门列表
     */
@@ -119,7 +118,7 @@
    /**
     * 根据部门ID查询信息
     *
     *
     * @param deptId 部门ID
     * @return 部门信息
     */
@@ -131,7 +130,7 @@
    /**
     * 根据ID查询所有子部门(正常状态)
     *
     *
     * @param deptId 部门ID
     * @return 子部门数
     */
@@ -143,7 +142,7 @@
    /**
     * 是否存在子节点
     *
     *
     * @param deptId 部门ID
     * @return 结果
     */
@@ -156,7 +155,7 @@
    /**
     * 查询部门是否存在用户
     *
     *
     * @param deptId 部门ID
     * @return 结果 true 存在 false 不存在
     */
@@ -169,7 +168,7 @@
    /**
     * 校验部门名称是否唯一
     *
     *
     * @param dept 部门信息
     * @return 结果
     */
@@ -187,7 +186,7 @@
    /**
     * 校验部门是否有数据权限
     *
     *
     * @param deptId 部门id
     */
    @Override
@@ -207,7 +206,7 @@
    /**
     * 新增保存部门信息
     *
     *
     * @param dept 部门信息
     * @return 结果
     */
@@ -226,7 +225,7 @@
    /**
     * 修改保存部门信息
     *
     *
     * @param dept 部门信息
     * @return 结果
     */
@@ -254,7 +253,7 @@
    /**
     * 修改该部门的父级部门状态
     *
     *
     * @param dept 当前部门
     */
    private void updateParentDeptStatusNormal(SysDept dept)
@@ -266,7 +265,7 @@
    /**
     * 修改子元素关系
     *
     *
     * @param deptId 被修改的部门ID
     * @param newAncestors 新的父ID集合
     * @param oldAncestors 旧的父ID集合
@@ -286,7 +285,7 @@
    /**
     * 删除部门管理信息
     *
     *
     * @param deptId 部门ID
     * @return 结果
     */
@@ -327,6 +326,43 @@
        return Result.ok().data(vos);
    }
    @Override
    public Result cascader() {
        List<Cascader> data = deptMapper.cascader();
        return Result.ok().data(this.buildTree(data));
    }
    public List<Cascader> buildTree(List<Cascader> cascaders) {
        // 创建一个映射,以parentId为键,对应的子节点列表为值
        Map<Long, List<Cascader>> map = new HashMap<>();
        for (Cascader cascader : cascaders) {
            Long parentId = cascader.getParentId();
            map.computeIfAbsent(parentId, k -> new ArrayList<>()).add(cascader);
        }
        // 递归函数,用于构建树
        List<Cascader> tree = new ArrayList<>();
        for (Cascader cascader : cascaders) {
            if (cascader.getParentId().equals(0L)) { // 根节点
                tree.add(setChildren(cascader, map));
            }
        }
        // 更新原始列表为树形结构
        cascaders.clear();
        cascaders.addAll(tree);
        return cascaders;
    }
    private Cascader setChildren(Cascader cascader, Map<Long, List<Cascader>> map) {
        List<Cascader> children = map.getOrDefault(cascader.getValue(), new ArrayList<>());
        for (Cascader child : children) {
            setChildren(child, map); // 递归设置子节点的子节点
        }
        cascader.setChildren(children);
        return cascader;
    }
    /**
     * 递归列表
     */