diff --git a/com.awspaas.user.apps.yili.reportform/src/com/awspaas/user/apps/yili/reportform/util/TreeUtil.java b/com.awspaas.user.apps.yili.reportform/src/com/awspaas/user/apps/yili/reportform/util/TreeUtil.java index 2be151df..a0591dba 100644 --- a/com.awspaas.user.apps.yili.reportform/src/com/awspaas/user/apps/yili/reportform/util/TreeUtil.java +++ b/com.awspaas.user.apps.yili.reportform/src/com/awspaas/user/apps/yili/reportform/util/TreeUtil.java @@ -105,4 +105,77 @@ public class TreeUtil { } return rootNodes; } + + //建立树形结构 + //rootSign 根节点标识 + //tLevel 节点层级,用于指定展示层数 + //nodeType 节点类型,用于多数据类型合并 + public static List buildTreeFileFirst(String type,List nodeMaps,String rootSign,String rootNodeType,String tLevel,String nodeType){ + List treeNodes =new ArrayList<>(); + if("1".equals(type)) { + HashMap deptNode = new HashMap<>(); + nodeType = "dept"; + deptNode.put("ID","all"); + deptNode.put("PARENTID","0"); + deptNode.put("name","全部"); + deptNode.put("ORDERINDEX","1"); + deptNode.put("TLEVEL",""); + deptNode.put("nodeType", "dept"); + treeNodes.add(deptNode); + } + for (Map treeNode : getRootNode(nodeMaps,rootSign,rootNodeType)) { + treeNode = buildChildTreeFileFirst(treeNode,nodeMaps,tLevel,nodeType); + treeNodes.add(treeNode); + } + // 子节点进行排序 + List treeNodesSort = Optional.ofNullable(treeNodes) + .map(List::stream) + .orElseGet(Stream::empty) + .sorted(Comparator.comparing(treeNode->Integer.valueOf(treeNode.get("ORDERINDEX").toString()))) + .collect(Collectors.toList()); + return treeNodesSort; + } + //递归,建立子树形结构 + private static Map buildChildTreeFileFirst(Map pNode, List nodeMaps, String tLevel, String nodeType){ + List childNodes =new ArrayList<>(); + if (null == tLevel || tLevel.equals("")) { + for (Map nodeMap : nodeMaps) { + if (nodeMap.get("PARENTID").equals(pNode.get("ID"))) { + childNodes.add(buildChildTreeFileFirst(nodeMap,nodeMaps,tLevel,nodeType)); + } + } + if(CollectionUtils.isNotEmpty(childNodes)){ + List childNodesSort = Optional.ofNullable(childNodes) + .map(List::stream) + .orElseGet(Stream::empty) + .sorted(Comparator.comparing((Map treeNode) -> "file".equals(treeNode.get("nodeType").toString()) ? 0 : 1) + // 然后按 ORDERINDEX 排序 + .thenComparing(treeNode -> Integer.valueOf(treeNode.get("ORDERINDEX").toString()))) + .collect(Collectors.toList()); + pNode.put("children",childNodesSort); + } + } else { + for (Map nodeMap : nodeMaps) { + if (Integer.valueOf(tLevel)>=Integer.valueOf(String.valueOf(nodeMap.get("TLEVEL")))) { + if (nodeMap.get("PARENTID").equals(pNode.get("ID"))) { + childNodes.add(buildChildTree(nodeMap,nodeMaps,tLevel,nodeType)); + } + } + if (Integer.valueOf(tLevel) childNodesSort = Optional.ofNullable(childNodes) + .map(List::stream) + .orElseGet(Stream::empty) + .sorted(Comparator.comparing(childNodesOrigin->Integer.valueOf(childNodesOrigin.get("ORDERINDEX").toString()))) + .collect(Collectors.toList()); + pNode.put("children",childNodesSort); + } + } + return pNode; + } }