diff --git a/src/main/java/com/dc/dc_project/controller/sys/OrgController.java b/src/main/java/com/dc/dc_project/controller/sys/OrgController.java index 191a4e8..2068701 100644 --- a/src/main/java/com/dc/dc_project/controller/sys/OrgController.java +++ b/src/main/java/com/dc/dc_project/controller/sys/OrgController.java @@ -31,7 +31,7 @@ public class OrgController { } @PostMapping("/tree") - public ResponseResult tree(OrgQueryDto queryDto) { + public ResponseResult tree(@RequestBody @Validated OrgQueryDto queryDto) { Long userId = StpUtil.getLoginIdAsLong(); return orgService.getTree(queryDto, userId); } diff --git a/src/main/java/com/dc/dc_project/mapper/OrgMapper.java b/src/main/java/com/dc/dc_project/mapper/OrgMapper.java index 2734b4a..1b1ba4f 100644 --- a/src/main/java/com/dc/dc_project/mapper/OrgMapper.java +++ b/src/main/java/com/dc/dc_project/mapper/OrgMapper.java @@ -21,6 +21,8 @@ public interface OrgMapper extends BaseMapper { List getCListByOrgId(Long pOrgId); List getList(@Param("queryDto") OrgQueryDto queryDto); + + List getListAll(); } diff --git a/src/main/java/com/dc/dc_project/service/impl/OrgServiceImpl.java b/src/main/java/com/dc/dc_project/service/impl/OrgServiceImpl.java index 73e2f72..9e8a473 100644 --- a/src/main/java/com/dc/dc_project/service/impl/OrgServiceImpl.java +++ b/src/main/java/com/dc/dc_project/service/impl/OrgServiceImpl.java @@ -141,12 +141,11 @@ public class OrgServiceImpl extends ServiceImpl @Override public ResponseResult getTree(OrgQueryDto queryDto, Long userId) { - if( queryDto.getId() == null){ + if(queryDto.getId() == null){ return ResponseResult.error("参数缺失"); } OrgQueryDto queryDto1 = new OrgQueryDto(); - queryDto1.setId(queryDto.getId()); - List list = baseMapper.getList(queryDto1); + List list = baseMapper.getListAll(); for (OrgVo orgVo : list){ List standardCategorys = standardCategoryMapper.selectListByOrgId(orgVo.getId()); orgVo.setStandardCategorys(standardCategorys); diff --git a/src/main/java/com/dc/dc_project/utils/TreeUtil.java b/src/main/java/com/dc/dc_project/utils/TreeUtil.java index 9fc5298..8cbea42 100644 --- a/src/main/java/com/dc/dc_project/utils/TreeUtil.java +++ b/src/main/java/com/dc/dc_project/utils/TreeUtil.java @@ -24,9 +24,36 @@ public class TreeUtil { return new ArrayList<>(); } + // 1.构建 ID -> Node 的映射(为了快速查找和组装) + Map nodeMap = list.stream() + .collect(Collectors.toMap(TreeNode::getId, node -> node, (a, b) -> a)); + + // 2.组装所有的父子关系(一次性组装整棵树) + // 这一步之后,map里的所有节点都已经包含了它的children + for (T node : list) { + T parent = nodeMap.get(node.getParentId()); + if (parent != null) { + List children = parent.getChildren(); + if (children == null) { + children = new ArrayList<>(); + parent.setChildren(children); + } + children.add(node); + } + } + + // 3.根据 rootId 判断返回策略 + + // 情况 A: 找到了指定的节点(例如 rootId=100,且列表中有ID为100的节点) + if (rootId != null && nodeMap.containsKey(rootId)) { + T rootNode = nodeMap.get(rootId); + return Collections.singletonList(rootNode); + } + + // 情况 B: 没找到指定节点(例如 rootId=0 或 null,或者 ID 不在列表中) + // 这里退化为原逻辑:返回直属子节点 return list.stream() .filter(node -> Objects.equals(node.getParentId(), rootId)) - .peek(node -> node.setChildren(getChildren(node, list))) .collect(Collectors.toList()); } diff --git a/src/main/resources/mapper/OrgMapper.xml b/src/main/resources/mapper/OrgMapper.xml index ee9d211..05fdc93 100644 --- a/src/main/resources/mapper/OrgMapper.xml +++ b/src/main/resources/mapper/OrgMapper.xml @@ -37,24 +37,44 @@ left join sys_org_laboratory_standard ol on o.id = ol.org_id and o.is_deleted = 0 - - and o.id = #{queryDto.id} - - - and o.name like concat('%',#{queryDto.name},'%') - - - and o.type = #{queryDto.type} - - - and o.code like concat('%',#{queryDto.code},'%') - - - and o.remark like concat('%',#{queryDto.remark},'%') - - - and ol.standard_category_id = #{queryDto.standardCategoryId} - + + and o.id = #{queryDto.id} + + + and o.name like concat('%',#{queryDto.name},'%') + + + and o.type = #{queryDto.type} + + + and o.code like concat('%',#{queryDto.code},'%') + + + and o.remark like concat('%',#{queryDto.remark},'%') + + + and ol.standard_category_id = #{queryDto.standardCategoryId} + + + +