Jelajahi Sumber

导出划分排序

cr 1 Minggu lalu
induk
melakukan
876cb6a369

+ 31 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -4753,13 +4753,17 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
         // 按单位工程分组
         Map<Long, List<WbsTreeContract>> unitProjectMap = list.stream()
-                .filter(item -> item.getNodeType() == 18) // 单位工程
+                .filter(item -> item.getNodeType() == 18)
+                .sorted(Comparator.comparing(WbsTreeContract::getSort,
+                        Comparator.nullsLast(Comparator.naturalOrder()))) // null值排在最后面
                 .collect(Collectors.toMap(
                         WbsTreeContract::getPKeyId,
                         unit -> list.stream()
                                 .filter(item -> item.getAncestorsPId() != null &&
                                         item.getAncestorsPId().contains(unit.getPKeyId().toString()))
-                                .collect(Collectors.toList())
+                                .collect(Collectors.toList()),
+                        (existing, replacement) -> existing,
+                        LinkedHashMap::new
                 ));
 
         // 为每个单位工程创建sheet
@@ -4783,6 +4787,13 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
             String validSheetName = WorkbookUtil.createSafeSheetName(safeUnitName);
 
             // 创建sheet并设置名称
+            //Sheet sheet = workbook.createSheet(validSheetName);
+            String baseSheetName = validSheetName;
+            int counter = 1;
+            while (workbook.getSheet(validSheetName) != null) {
+                validSheetName = baseSheetName + "(" + counter + ")";
+                counter++;
+            }
             Sheet sheet = workbook.createSheet(validSheetName);
 
             // 创建表头(两行)- 使用模板sheet
@@ -5356,6 +5367,8 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         // 1. 先找子分项工程 (节点类型5)
         leafNodes = projects.stream()
                 .filter(item -> item.getNodeType() == 5)
+                .sorted(Comparator.comparing(WbsTreeContract::getSort,
+                        Comparator.nullsLast(Comparator.naturalOrder())))
                 .collect(Collectors.toList());
 
         if (!leafNodes.isEmpty()) {
@@ -5364,9 +5377,11 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         ancestorIds= leafNodes.stream()
                 .map(WbsTreeContract::getAncestorsPId)
                 .filter(Objects::nonNull)
+                .filter(ancestors -> !ancestors.equals("null"))
                 .flatMap(ancestors -> Arrays.stream(ancestors.split(",")))
                 .map(String::trim)
                 .filter(id -> !id.isEmpty())
+                .filter(id -> !id.equals("null"))
                 .map(Long::parseLong)
                 .collect(Collectors.toSet());
 
@@ -5374,6 +5389,8 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         Set<Long> finalAncestorIds = ancestorIds;
         List<WbsTreeContract> items=projects.stream()
                 .filter(item -> item.getNodeType() == 4 && !finalAncestorIds.contains(item.getPKeyId()))
+                .sorted(Comparator.comparing(WbsTreeContract::getSort,
+                        Comparator.nullsLast(Comparator.naturalOrder())))
                 .collect(Collectors.toList());
         if(!items.isEmpty()&&items.size()>0){
             leafNodes.addAll(items);
@@ -5381,9 +5398,11 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         ancestorIds = leafNodes.stream()
                 .map(WbsTreeContract::getAncestorsPId)
                 .filter(Objects::nonNull)
+                .filter(ancestors -> !ancestors.equals("null"))
                 .flatMap(ancestors -> Arrays.stream(ancestors.split(",")))
                 .map(String::trim)
                 .filter(id -> !id.isEmpty())
+                .filter(id -> !id.equals("null"))
                 .map(Long::parseLong)
                 .collect(Collectors.toSet());
 
@@ -5391,6 +5410,8 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         Set<Long> finalAncestorIds1 = ancestorIds;
         List<WbsTreeContract> subDivisional = projects.stream()
                 .filter(item -> item.getNodeType() == 3&& !finalAncestorIds1.contains(item.getPKeyId()))
+                .sorted(Comparator.comparing(WbsTreeContract::getSort,
+                        Comparator.nullsLast(Comparator.naturalOrder())))
                 .collect(Collectors.toList());
         if(!subDivisional.isEmpty()&&subDivisional.size()>0){
             leafNodes.addAll(subDivisional);
@@ -5398,15 +5419,19 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         ancestorIds = leafNodes.stream()
                 .map(WbsTreeContract::getAncestorsPId)
                 .filter(Objects::nonNull)
+                .filter(ancestors -> !ancestors.equals("null"))
                 .flatMap(ancestors -> Arrays.stream(ancestors.split(",")))
                 .map(String::trim)
                 .filter(id -> !id.isEmpty())
+                .filter(id -> !id.equals("null"))
                 .map(Long::parseLong)
                 .collect(Collectors.toSet());
         Set<Long> finalAncestorIds2 = ancestorIds;
         // 4. 如果没有子分部,找分部工程 (节点类型2)
         List<WbsTreeContract> divisional = projects.stream()
                 .filter(item -> item.getNodeType() == 2&& !finalAncestorIds2.contains(item.getPKeyId()))
+                .sorted(Comparator.comparing(WbsTreeContract::getSort,
+                        Comparator.nullsLast(Comparator.naturalOrder())))
                 .collect(Collectors.toList());
         if(!divisional.isEmpty()&&divisional.size()>0){
             leafNodes.addAll(divisional);
@@ -5414,9 +5439,11 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         ancestorIds = leafNodes.stream()
                 .map(WbsTreeContract::getAncestorsPId)
                 .filter(Objects::nonNull)
+                .filter(ancestors -> !ancestors.equals("null"))
                 .flatMap(ancestors -> Arrays.stream(ancestors.split(",")))
                 .map(String::trim)
                 .filter(id -> !id.isEmpty())
+                .filter(id -> !id.equals("null"))
                 .map(Long::parseLong)
                 .collect(Collectors.toSet());
         Set<Long> finalAncestorIds3 = ancestorIds;
@@ -5424,6 +5451,8 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         // 5. 最后找单位工程 (节点类型18)
         List<WbsTreeContract> unit = projects.stream()
                 .filter(item -> item.getNodeType() == 18&&!finalAncestorIds3.contains(item.getPKeyId()))
+                .sorted(Comparator.comparing(WbsTreeContract::getSort,
+                        Comparator.nullsLast(Comparator.naturalOrder())))
                 .collect(Collectors.toList());
         if(!unit.isEmpty()&&unit.size()>0){
             leafNodes.addAll(unit);