diff --git a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java index 3f1932b8..c34113e8 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java @@ -1,33 +1,38 @@ package com.jero.modules.system.service.impl; -import java.util.*; - import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.jero.common.system.vo.SysDepartTreeModel; -import com.jero.common.util.oConvertUtils; -import org.apache.commons.lang3.StringUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.constant.CacheConstant; import com.jero.common.constant.CommonConstant; import com.jero.common.constant.FillRuleConstant; +import com.jero.common.system.vo.SysDepartTreeModel; import com.jero.common.util.FillRuleUtil; import com.jero.common.util.YouBianCodeUtil; -import com.jero.modules.system.entity.*; -import com.jero.modules.system.mapper.*; +import com.jero.common.util.oConvertUtils; +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.service.ISysDepartService; 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.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - -import io.netty.util.internal.StringUtil; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -236,7 +241,40 @@ public class SysDepartServiceImpl extends ServiceImpl getSubDepIdsByDepId(String departId) { - return this.baseMapper.getSubDepIdsByDepId(departId); + // 获取所有有效部门 + List allDepartList = this.list(new LambdaQueryWrapper() + .eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0) + .eq(SysDepart::getStatus, CommonConstant.STATUS_1)); + + // 创建一个映射,用于存储每个部门及其子部门的列表 + Map> childrenMap = allDepartList.parallelStream() + .filter(depart -> depart.getParentId() != null && !depart.getParentId().isEmpty()) + .collect(Collectors.groupingBy(SysDepart::getParentId, + Collectors.mapping(SysDepart::getId, Collectors.toList()))); + + // 使用递归方法来收集所有子部门的ID + List 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> childrenMap, List subDepIds) { + List children = childrenMap.get(departId); + if (children != null) { + // 使用并行流处理子部门 + children.parallelStream().forEach(childId -> { + subDepIds.add(childId); + // 递归调用,以收集当前子部门的子部门 + collectSubDepIds(childId, childrenMap, subDepIds); + }); + } } @Override