Explorar o código

自定义排序规则

ZhaoMn %!s(int64=4) %!d(string=hai) anos
pai
achega
2dd8b24869

+ 31 - 10
railway-admin/src/main/java/com/railway/web/controller/business/catenary/BusJcebController.java

@@ -26,7 +26,6 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import java.util.ArrayList;
 import java.util.Comparator;
-import java.util.Date;
 import java.util.List;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
@@ -244,20 +243,42 @@ public class BusJcebController extends BaseController {
       }
     }
     // 汇总结果按日期排序
+    JcebCountComparator comparator = new JcebCountComparator();
     if (null == sortType || sortType == SortTypeEnum.DESC) {
-      list.sort(
-          Comparator.comparing(JcebCountVo::getOperationDate, Comparator.nullsLast(Date::compareTo))
-              .reversed()
-              .thenComparing(JcebCountVo::getCount).reversed()
-              .thenComparing(JcebCountVo::getJcebType, Comparator.nullsLast(String::compareTo)));
+      comparator.setIsAsc(SortTypeEnum.DESC);
+      list.sort(comparator);
     } else {
       log.info("排序类型 - {}", sortType.getNotes());
-      list.sort(
-          Comparator.comparing(JcebCountVo::getOperationDate, Comparator.nullsLast(Date::compareTo))
-              .thenComparing(JcebCountVo::getCount)
-              .thenComparing(JcebCountVo::getJcebType, Comparator.nullsLast(String::compareTo)));
+      comparator.setIsAsc(SortTypeEnum.ASC);
+      list.sort(comparator);
     }
     return getDataTable(list);
   }
 
+
+  static class JcebCountComparator implements Comparator<JcebCountVo> {
+
+    private SortTypeEnum isAsc;
+
+    public void setIsAsc(SortTypeEnum isAsc) {
+      this.isAsc = isAsc;
+    }
+
+    @Override
+    public int compare(JcebCountVo jceb1, JcebCountVo jceb2) {
+      if (jceb1.getOperationDate() != null && jceb2.getOperationDate() != null) {
+        long t1 = jceb1.getOperationDate().getTime();
+        long t2 = jceb2.getOperationDate().getTime();
+        int ret = Long.compare(t1, t2);
+        if (isAsc == SortTypeEnum.DESC) {
+          ret *= -1;
+        }
+        return ret;
+      } else {
+        return jceb1.getOperationDate() == null ? 1 : -1;
+      }
+    }
+
+  }
+
 }