diff --git a/src/main/java/com/point/strategy/classTree/controller/ClassTreeController.java b/src/main/java/com/point/strategy/classTree/controller/ClassTreeController.java index 1cc5ae8..a6ba8bb 100644 --- a/src/main/java/com/point/strategy/classTree/controller/ClassTreeController.java +++ b/src/main/java/com/point/strategy/classTree/controller/ClassTreeController.java @@ -118,7 +118,21 @@ public class ClassTreeController { try { String className = param.get("className").toString(); - List list = classTreeService.getClassTreeByClassName(className); + boolean onlyMapped = false; + if (param.get("onlyMapped") != null) { + onlyMapped = Boolean.parseBoolean(param.get("onlyMapped").toString()); + } + Integer fondId = null; + if (param.get("fondId") != null) { + fondId = Integer.parseInt(param.get("fondId").toString()); + } + Integer deptId = null; + if (param.get("deptId") != null) { + deptId = Integer.parseInt(param.get("deptId").toString()); + } + List list = onlyMapped + ? classTreeService.getClassTreeByClassNameMappedUnion(className, fondId, deptId) + : classTreeService.getClassTreeByClassName(className); json = new AjaxJson(); json.getBody().put("list",list); }catch(Exception e) { diff --git a/src/main/java/com/point/strategy/classTree/mapper/ClassTreeMapper.java b/src/main/java/com/point/strategy/classTree/mapper/ClassTreeMapper.java index 0172cbc..736b492 100644 --- a/src/main/java/com/point/strategy/classTree/mapper/ClassTreeMapper.java +++ b/src/main/java/com/point/strategy/classTree/mapper/ClassTreeMapper.java @@ -42,4 +42,8 @@ public interface ClassTreeMapper { List getClassByUserId(@Param("userId") Integer userId); List getClassByDeptId(@Param("deptId") Integer deptId); + + List getMappedClassIdsUnion(); + + List getMappedClassIdsUnionBySelection(@Param("fondId") Integer fondId, @Param("deptId") Integer deptId); } diff --git a/src/main/java/com/point/strategy/classTree/service/ClassTreeService.java b/src/main/java/com/point/strategy/classTree/service/ClassTreeService.java index 773283b..d89d489 100644 --- a/src/main/java/com/point/strategy/classTree/service/ClassTreeService.java +++ b/src/main/java/com/point/strategy/classTree/service/ClassTreeService.java @@ -335,6 +335,53 @@ public class ClassTreeService { return list; } + /** + * 返回“门类树”但仅包含已在 t_fondclass 或 t_departmentclass 中出现过的门类(并集),并保留必要的父节点以形成树结构。 + */ + public List getClassTreeByClassNameMappedUnion(String className, Integer fondId, Integer deptId) { + List fullTree = getClassTreeByClassName(className); + List mappedIds; + if (fondId == null && deptId == null) { + mappedIds = classTreeMapper.getMappedClassIdsUnion(); + } else { + mappedIds = classTreeMapper.getMappedClassIdsUnionBySelection(fondId, deptId); + } + if (mappedIds == null || mappedIds.isEmpty() || fullTree == null || fullTree.isEmpty()) { + return new ArrayList<>(); + } + Set allowedIds = new HashSet<>(mappedIds); + List filtered = new ArrayList<>(); + for (ClassTree node : fullTree) { + ClassTree kept = filterTreeByAllowedIds(node, allowedIds); + if (kept != null) { + filtered.add(kept); + } + } + return filtered; + } + + private ClassTree filterTreeByAllowedIds(ClassTree node, Set allowedIds) { + if (node == null) { + return null; + } + List children = node.getChildClass(); + List keptChildren = new ArrayList<>(); + if (children != null && !children.isEmpty()) { + for (ClassTree child : children) { + ClassTree keptChild = filterTreeByAllowedIds(child, allowedIds); + if (keptChild != null) { + keptChildren.add(keptChild); + } + } + } + boolean keepSelf = node.getId() != null && allowedIds.contains(node.getId()); + if (!keepSelf && keptChildren.isEmpty()) { + return null; + } + node.setChildClass(keptChildren); + return node; + } + /** * 知识产权树 * @param className @@ -1025,5 +1072,3 @@ public class ClassTreeService { } - - diff --git a/src/main/resources/mapper/classTreeMapper.xml b/src/main/resources/mapper/classTreeMapper.xml index c1e7ae6..562273c 100644 --- a/src/main/resources/mapper/classTreeMapper.xml +++ b/src/main/resources/mapper/classTreeMapper.xml @@ -155,5 +155,25 @@ where t1.id=#{userId} and t5.class_type='C' order by t5.class_order asc + + + + - \ No newline at end of file +