Pārlūkot izejas kodu

修改质检wbs树搜索排序问题

lvy 1 nedēļu atpakaļ
vecāks
revīzija
954aea3ffe

+ 22 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -29,6 +29,7 @@ import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.entity.*;
 import org.springblade.manager.mapper.*;
 import org.springblade.manager.service.IContractInfoService;
+import org.springblade.manager.utils.ComplexStringComparator;
 import org.springblade.manager.vo.*;
 import org.springblade.meter.entity.MeterContractInfo;
 import org.springblade.meter.feign.MeterContractInfoClient;
@@ -836,7 +837,17 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
 
     public List<WbsTreeContractTreeAllVO> buildWbsTreeByStreamByTreeAll(List<WbsTreeContractTreeAllVO> wbsTreeVO2s) {
         List<WbsTreeContractTreeAllVO> list = wbsTreeVO2s.stream().filter(f -> f.getParentId() == 0L).collect(Collectors.toList());
-        Map<Long, List<WbsTreeContractTreeAllVO>> map = wbsTreeVO2s.stream().collect(Collectors.groupingBy(WbsTreeContractTreeAllVO::getParentId));
+        // 修改比较器链,处理空值情况
+        Comparator<WbsTreeContractTreeAllVO> safeComparator = Comparator
+                .comparing(WbsTreeContractTreeAllVO::getSort, Comparator.nullsFirst(Comparator.naturalOrder()))
+                .thenComparing(new ComplexStringComparator<>(obj ->
+                        obj.getTitle() != null ? obj.getTitle() : ""))
+                .thenComparing(
+                        WbsTreeContractTreeAllVO::getId,
+                        Comparator.nullsLast(Comparator.reverseOrder()));
+        list.sort(safeComparator);
+        Map<Long, List<WbsTreeContractTreeAllVO>> map = wbsTreeVO2s.stream().collect(Collectors.groupingBy(WbsTreeContractTreeAllVO::getParentId,
+                Collectors.collectingAndThen(Collectors.toList(), items -> items.stream().sorted(safeComparator).collect(Collectors.toList()))));
         this.recursionFnTreeAll(list, map);
         return list;
     }
@@ -844,7 +855,16 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         String[] split = position.split("\\\\");
         if (split.length > 1 && split[1] != null && !split[1].isEmpty()) {
             List<WbsTreeContractTreeAllVO> list = wbsTreeVO2s.stream().filter(f -> f.getParentId() == 0L).collect(Collectors.toList());
-            Map<Long, List<WbsTreeContractTreeAllVO>> map = wbsTreeVO2s.stream().collect(Collectors.groupingBy(WbsTreeContractTreeAllVO::getParentId));
+            // 修改比较器链,处理空值情况
+            Comparator<WbsTreeContractTreeAllVO> safeComparator = Comparator
+                    .comparing(WbsTreeContractTreeAllVO::getSort, Comparator.nullsFirst(Comparator.naturalOrder()))
+                    .thenComparing(new ComplexStringComparator<>(obj ->
+                            obj.getTitle() != null ? obj.getTitle() : ""))
+                    .thenComparing(
+                            WbsTreeContractTreeAllVO::getId,
+                            Comparator.nullsLast(Comparator.reverseOrder()));
+            Map<Long, List<WbsTreeContractTreeAllVO>> map = wbsTreeVO2s.stream().collect(Collectors.groupingBy(WbsTreeContractTreeAllVO::getParentId,
+                    Collectors.collectingAndThen(Collectors.toList(), items -> items.stream().sorted(safeComparator).collect(Collectors.toList()))));
             this.recursionFnTreeAll(list, map, split, 0);
             return list;
         }