fuliqi
2024-09-11 b14531e3b850fe6d2fa916ba7b88b3e2bd2ff30a
ycl-server/src/main/java/com/ycl/system/service/impl/SysDeptServiceImpl.java
@@ -3,6 +3,8 @@
import annotation.DataScope;
import com.ycl.exception.ServiceException;
import com.ycl.platform.base.BaseSelect;
import com.ycl.platform.base.Cascader;
import com.ycl.platform.domain.vo.screen.DeptAreaVO;
import com.ycl.system.Result;
import com.ycl.system.domain.TreeSelect;
import com.ycl.system.entity.SysDept;
@@ -19,14 +21,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 +40,7 @@
    /**
     * 查询部门管理数据
     *
     *
     * @param dept 部门信息
     * @return 部门信息集合
     */
@@ -53,7 +53,7 @@
    /**
     * 查询部门树结构信息
     *
     *
     * @param dept 部门信息
     * @return 部门树信息集合
     */
@@ -66,7 +66,7 @@
    /**
     * 构建前端所需要树结构
     *
     *
     * @param depts 部门列表
     * @return 树结构列表
     */
@@ -93,7 +93,7 @@
    /**
     * 构建前端所需要下拉树结构
     *
     *
     * @param depts 部门列表
     * @return 下拉树结构列表
     */
@@ -106,7 +106,7 @@
    /**
     * 根据角色ID查询部门树信息
     *
     *
     * @param roleId 角色ID
     * @return 选中部门列表
     */
@@ -119,7 +119,7 @@
    /**
     * 根据部门ID查询信息
     *
     *
     * @param deptId 部门ID
     * @return 部门信息
     */
@@ -131,7 +131,7 @@
    /**
     * 根据ID查询所有子部门(正常状态)
     *
     *
     * @param deptId 部门ID
     * @return 子部门数
     */
@@ -143,7 +143,7 @@
    /**
     * 是否存在子节点
     *
     *
     * @param deptId 部门ID
     * @return 结果
     */
@@ -156,7 +156,7 @@
    /**
     * 查询部门是否存在用户
     *
     *
     * @param deptId 部门ID
     * @return 结果 true 存在 false 不存在
     */
@@ -169,7 +169,7 @@
    /**
     * 校验部门名称是否唯一
     *
     *
     * @param dept 部门信息
     * @return 结果
     */
@@ -187,7 +187,7 @@
    /**
     * 校验部门是否有数据权限
     *
     *
     * @param deptId 部门id
     */
    @Override
@@ -207,7 +207,7 @@
    /**
     * 新增保存部门信息
     *
     *
     * @param dept 部门信息
     * @return 结果
     */
@@ -226,7 +226,7 @@
    /**
     * 修改保存部门信息
     *
     *
     * @param dept 部门信息
     * @return 结果
     */
@@ -254,7 +254,7 @@
    /**
     * 修改该部门的父级部门状态
     *
     *
     * @param dept 当前部门
     */
    private void updateParentDeptStatusNormal(SysDept dept)
@@ -266,7 +266,7 @@
    /**
     * 修改子元素关系
     *
     *
     * @param deptId 被修改的部门ID
     * @param newAncestors 新的父ID集合
     * @param oldAncestors 旧的父ID集合
@@ -286,7 +286,7 @@
    /**
     * 删除部门管理信息
     *
     *
     * @param deptId 部门ID
     * @return 结果
     */
@@ -296,6 +296,10 @@
        return deptMapper.deleteDeptById(deptId);
    }
    /**
     * 部门下拉列表
     * @return
     */
    @Override
    public Result all() {
        List<BaseSelect> vos = deptMapper.selectDeptList(new SysDept()).stream().map(sysDept -> {
@@ -306,6 +310,58 @@
                }
        ).collect(Collectors.toList());
        return Result.ok().data(vos);
    }
    /**
     * 区域下拉列表
     * @return
     */
    @Override
    public Result pullList() {
        List<BaseSelect> vos = deptMapper.selectDeptList(new SysDept()).stream().filter(sysDept -> sysDept.getArea()!=null).map(sysDept -> {
                    BaseSelect baseSelect = new BaseSelect();
                    baseSelect.setId(Integer.parseInt(sysDept.getDeptId() + ""));
                    baseSelect.setValue(sysDept.getArea());
                    return baseSelect;
                }
        ).collect(Collectors.toList());
        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;
    }
    /**
@@ -350,4 +406,9 @@
    {
        return getChildList(list, t).size() > 0;
    }
    @Override
    public List<DeptAreaVO> dashboard() {
        return deptMapper.dashboard();
    }
}