fix: 获取部门子集改为并发递归
This commit is contained in:
+50
-12
@@ -1,33 +1,38 @@
|
|||||||
package com.jero.modules.system.service.impl;
|
package com.jero.modules.system.service.impl;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.jero.common.system.vo.SysDepartTreeModel;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.jero.common.util.oConvertUtils;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import com.jero.common.constant.CacheConstant;
|
import com.jero.common.constant.CacheConstant;
|
||||||
import com.jero.common.constant.CommonConstant;
|
import com.jero.common.constant.CommonConstant;
|
||||||
import com.jero.common.constant.FillRuleConstant;
|
import com.jero.common.constant.FillRuleConstant;
|
||||||
|
import com.jero.common.system.vo.SysDepartTreeModel;
|
||||||
import com.jero.common.util.FillRuleUtil;
|
import com.jero.common.util.FillRuleUtil;
|
||||||
import com.jero.common.util.YouBianCodeUtil;
|
import com.jero.common.util.YouBianCodeUtil;
|
||||||
import com.jero.modules.system.entity.*;
|
import com.jero.common.util.oConvertUtils;
|
||||||
import com.jero.modules.system.mapper.*;
|
import com.jero.modules.system.entity.SysDepart;
|
||||||
|
import com.jero.modules.system.entity.SysDepartPermission;
|
||||||
|
import com.jero.modules.system.entity.SysUser;
|
||||||
|
import com.jero.modules.system.entity.SysUserDepart;
|
||||||
|
import com.jero.modules.system.mapper.SysDepartMapper;
|
||||||
|
import com.jero.modules.system.mapper.SysDepartPermissionMapper;
|
||||||
|
import com.jero.modules.system.mapper.SysUserDepartMapper;
|
||||||
|
import com.jero.modules.system.mapper.SysUserMapper;
|
||||||
import com.jero.modules.system.model.DepartIdModel;
|
import com.jero.modules.system.model.DepartIdModel;
|
||||||
import com.jero.modules.system.service.ISysDepartService;
|
import com.jero.modules.system.service.ISysDepartService;
|
||||||
import com.jero.modules.system.util.FindsDepartsChildrenUtil;
|
import com.jero.modules.system.util.FindsDepartsChildrenUtil;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import java.util.*;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import io.netty.util.internal.StringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -236,7 +241,40 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getSubDepIdsByDepId(String departId) {
|
public List<String> getSubDepIdsByDepId(String departId) {
|
||||||
return this.baseMapper.getSubDepIdsByDepId(departId);
|
// 获取所有有效部门
|
||||||
|
List<SysDepart> allDepartList = this.list(new LambdaQueryWrapper<SysDepart>()
|
||||||
|
.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0)
|
||||||
|
.eq(SysDepart::getStatus, CommonConstant.STATUS_1));
|
||||||
|
|
||||||
|
// 创建一个映射,用于存储每个部门及其子部门的列表
|
||||||
|
Map<String, List<String>> childrenMap = allDepartList.parallelStream()
|
||||||
|
.filter(depart -> depart.getParentId() != null && !depart.getParentId().isEmpty())
|
||||||
|
.collect(Collectors.groupingBy(SysDepart::getParentId,
|
||||||
|
Collectors.mapping(SysDepart::getId, Collectors.toList())));
|
||||||
|
|
||||||
|
// 使用递归方法来收集所有子部门的ID
|
||||||
|
List<String> subDepIds = Collections.synchronizedList(new ArrayList<>());
|
||||||
|
collectSubDepIds(departId, childrenMap, subDepIds);
|
||||||
|
|
||||||
|
return subDepIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 递归方法用于收集子部门ID
|
||||||
|
* @param departId 当前部门ID
|
||||||
|
* @param childrenMap 子部门映射表
|
||||||
|
* @param subDepIds 收集到的子部门ID列表
|
||||||
|
*/
|
||||||
|
private void collectSubDepIds(String departId, Map<String, List<String>> childrenMap, List<String> subDepIds) {
|
||||||
|
List<String> children = childrenMap.get(departId);
|
||||||
|
if (children != null) {
|
||||||
|
// 使用并行流处理子部门
|
||||||
|
children.parallelStream().forEach(childId -> {
|
||||||
|
subDepIds.add(childId);
|
||||||
|
// 递归调用,以收集当前子部门的子部门
|
||||||
|
collectSubDepIds(childId, childrenMap, subDepIds);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user