From b7f7acbb6dec716aa7faa38a72118867779fe5ca Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 23 九月 2024 16:45:38 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/page/bus/BusList.jsx                                                  |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/BusinessSortService.java |   61 ++++++++++++++++++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/BusStsType.java         |   28 +++++++--
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/BusController.java |   11 +++
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/DataFieldSortFunc.java   |    9 +++
 zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/BaseController.java |   20 ++++++
 6 files changed, 123 insertions(+), 8 deletions(-)

diff --git a/zy-acs-flow/src/page/bus/BusList.jsx b/zy-acs-flow/src/page/bus/BusList.jsx
index f0284c5..0222839 100644
--- a/zy-acs-flow/src/page/bus/BusList.jsx
+++ b/zy-acs-flow/src/page/bus/BusList.jsx
@@ -112,7 +112,7 @@
                 title={"menu.bus"}
                 empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
                 filters={filters}
-                sort={{ field: "create_time", order: "desc" }}
+                sort={{ field: "create_time", order: "asc" }}
                 actions={(
                     <TopToolbar>
                         <FilterButton />
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/BusinessSortService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/BusinessSortService.java
new file mode 100644
index 0000000..399ba84
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/BusinessSortService.java
@@ -0,0 +1,61 @@
+package com.zy.acs.manager.common.utils;
+
+import com.zy.acs.framework.common.Cools;
+import com.zy.acs.manager.manager.enums.BusStsType;
+import com.zy.acs.manager.manager.service.BusStsService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+/**
+ * Created by vincent on 9/23/2024
+ */
+@Slf4j
+@Service
+public class BusinessSortService {
+
+    public static final Map<Class<? extends DataFieldSortFunc>, String> map = new ConcurrentHashMap<>();
+
+    interface SelectSupport {
+        Long execute(String field);
+    }
+
+    @Autowired
+    private BusStsService busStsService;
+
+    @PostConstruct
+    public void init() {
+        set(BusStsType.class, field -> busStsService.selectByUuid(field).getId());
+    }
+
+    public void set(Class<? extends DataFieldSortFunc> cls, SelectSupport support) {
+        if (null == support) return;
+        try {
+            DataFieldSortFunc instance = cls.getEnumConstants()[0];
+            List<String> fieldSort = instance.getDataFieldSort();
+            List<Long> ids = fieldSort.stream().map(support::execute).collect(Collectors.toList());
+            String idString = ids.stream().map(String::valueOf).collect(Collectors.joining(", "));
+            if (!Cools.isEmpty(idString)) {
+                map.put(cls, idString);
+            }
+        } catch (Exception e) {
+            log.error("BusinessSortService", e);
+        }
+    }
+
+    public String getSql(Class<? extends DataFieldSortFunc> cls, String fieldName) {
+        String sql = map.get(cls);
+        if (!Cools.isEmpty(sql)) {
+            return "ORDER BY FIELD(" + fieldName + ", " + sql + ") ASC, create_time DESC";
+        }
+        return "";
+    }
+
+
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/DataFieldSortFunc.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/DataFieldSortFunc.java
new file mode 100644
index 0000000..2febd6e
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/DataFieldSortFunc.java
@@ -0,0 +1,9 @@
+package com.zy.acs.manager.common.utils;
+
+import java.util.List;
+
+public interface DataFieldSortFunc {
+
+    List<String> getDataFieldSort();
+
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/BusController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/BusController.java
index c7e937f..6a62262 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/BusController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/BusController.java
@@ -1,17 +1,20 @@
 package com.zy.acs.manager.manager.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.framework.common.R;
 import com.zy.acs.manager.common.annotation.OperationLog;
 import com.zy.acs.manager.common.domain.*;
+import com.zy.acs.manager.common.utils.BusinessSortService;
 import com.zy.acs.manager.common.utils.ExcelUtil;
 import com.zy.acs.manager.core.service.MainService;
 import com.zy.acs.manager.manager.controller.param.BusCreateParam;
 import com.zy.acs.manager.manager.controller.param.OpenBusSubmitParam;
 import com.zy.acs.manager.manager.entity.Bus;
 import com.zy.acs.manager.manager.entity.Task;
+import com.zy.acs.manager.manager.enums.BusStsType;
 import com.zy.acs.manager.manager.service.BusService;
 import com.zy.acs.manager.manager.service.LocService;
 import com.zy.acs.manager.manager.service.StaService;
@@ -39,13 +42,19 @@
     private LocService locService;
     @Autowired
     private TaskService taskService;
+    @Autowired
+    private BusinessSortService businessSortService;
 
     @PreAuthorize("hasAuthority('manager:bus:list')")
     @PostMapping("/bus/page")
     public R page(@RequestBody Map<String, Object> map) {
         BaseParam baseParam = buildParam(map, BaseParam.class);
         PageParam<Bus, BaseParam> pageParam = new PageParam<>(baseParam, Bus.class);
-        PageParam<Bus, BaseParam> page = busService.page(pageParam, pageParam.buildWrapper(true));
+        QueryWrapper<Bus> wrapper = pageParam.buildWrapper(true);
+        if (createTimeDesc(pageParam.getOrders())) {
+            wrapper.last(businessSortService.getSql(BusStsType.class, "bus_sts"));
+        }
+        PageParam<Bus, BaseParam> page = busService.page(pageParam, wrapper);
         for (Bus record : page.getRecords()) {
             List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getBusId, record.getId()));
             if (!Cools.isEmpty(tasks)) {
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/BusStsType.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/BusStsType.java
index 2fbd541..478694d 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/BusStsType.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/BusStsType.java
@@ -2,18 +2,26 @@
 
 import com.zy.acs.framework.common.SpringUtils;
 import com.zy.acs.manager.common.exception.BusinessException;
+import com.zy.acs.manager.common.utils.DataFieldSortFunc;
 import com.zy.acs.manager.manager.entity.BusSts;
 import com.zy.acs.manager.manager.service.BusStsService;
 
-public enum BusStsType {
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
 
-    RECEIVE,
-    PROGRESS,
-    FINISH,
-    CANCEL,
+public enum BusStsType implements DataFieldSortFunc {
+
+    RECEIVE(1),
+    PROGRESS(2),
+    FINISH(3),
+    CANCEL(4),
     ;
 
-    BusStsType() {
+    public int dataSort;
+
+    BusStsType(int dataSort) {
+        this.dataSort = dataSort;
     }
 
     public long val() {
@@ -25,4 +33,12 @@
         return busSts.getId();
     }
 
+    @Override
+    public List<String> getDataFieldSort() {
+        return Arrays.stream(BusStsType.values())
+                .sorted((e1, e2) -> Integer.compare(e1.dataSort, e2.dataSort))
+                .map(Enum::name)
+                .collect(Collectors.toList());
+    }
+
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/BaseController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/BaseController.java
index 619c985..1849999 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/BaseController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/BaseController.java
@@ -1,10 +1,13 @@
 package com.zy.acs.manager.system.controller;
 
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.zy.acs.framework.common.Cools;
 import com.zy.acs.manager.common.domain.BaseParam;
 import com.zy.acs.manager.system.entity.User;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -48,4 +51,21 @@
         return t;
     }
 
+    public Boolean createTimeDesc(List<OrderItem> orderItems) {
+        if (Cools.isEmpty(orderItems)) {
+            return true;
+        }
+        if (orderItems.size() > 1) {
+            return false;
+        }
+        OrderItem orderItem = orderItems.get(0);
+        if (!orderItem.getColumn().equals("create_time")) {
+            return false;
+        }
+        if (orderItem.isAsc()) {
+            return false;
+        }
+        return true;
+    }
+
 }

--
Gitblit v1.9.1