|
|
@@ -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);
|