From b80d4a5cbac9ad9460717b6463819fa784e55ceb Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期日, 28 九月 2025 11:13:10 +0800
Subject: [PATCH] 跨城查询优化

---
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/OrderCrossCity.java                  |   10 +++++
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java         |    3 +
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java       |   26 +++++++++----
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java |    4 ++
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/OrderCrossCityMapper.java              |    3 +
 UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/OrderCrossCityMapper.xml       |   22 ++++++++++
 6 files changed, 59 insertions(+), 9 deletions(-)

diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/OrderCrossCityMapper.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/OrderCrossCityMapper.java
index 9dbc933..e7b5743 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/OrderCrossCityMapper.java
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/OrderCrossCityMapper.java
@@ -91,4 +91,7 @@
      * @return
      */
     List<Map<String, Object>> queryRedEnvelope(@Param("uid") Integer uid);
+
+    int queryCountOrder(@Param("driverId") Integer driverId, @Param("lineShiftId") Integer lineShiftId,
+                        @Param("state") Integer state, @Param("day") String day);
 }
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/OrderCrossCityMapper.xml b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/OrderCrossCityMapper.xml
index ca04758..d3831a8 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/OrderCrossCityMapper.xml
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/OrderCrossCityMapper.xml
@@ -571,7 +571,8 @@
         a.oldState as oldState,
         a.telX as telX,
         a.bindId as bindId,
-        a.remark as remark
+        a.remark as remark,
+        b.lineShiftId as lineShiftId
         from t_order_cross_city a
         left join t_line_shift_driver b on (a.lineShiftDriverId = b.id)
         where a.isDelete = 1
@@ -591,4 +592,23 @@
             and DATE_FORMAT(a.travelTime, '%Y-%m-%d') = #{day}
         </if>
     </select>
+    <select id="queryCountOrder" resultType="java.lang.Integer">
+        select
+        count(1)
+        from t_order_cross_city a
+        left join t_line_shift_driver b on (a.lineShiftDriverId = b.id)
+        where a.isDelete = 1
+        <if test="null != driverId">
+            and a.driverId = #{driverId}
+        </if>
+        <if test="null != lineShiftId">
+            and b.lineShiftId = #{lineShiftId}
+        </if>
+        <if test="null != state">
+            and a.state = #{state}
+        </if>
+        <if test="null != day and '' != day">
+            and DATE_FORMAT(a.travelTime, '%Y-%m-%d') = #{day}
+        </if>
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/OrderCrossCity.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/OrderCrossCity.java
index 25c3159..a25d9d1 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/OrderCrossCity.java
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/OrderCrossCity.java
@@ -328,6 +328,16 @@
      */
     @TableField("bindId")
     private String bindId;
+    @TableField(exist = false)
+    private Integer lineShiftId;
+
+    public Integer getLineShiftId() {
+        return lineShiftId;
+    }
+
+    public void setLineShiftId(Integer lineShiftId) {
+        this.lineShiftId = lineShiftId;
+    }
 
     public Integer getId() {
         return id;
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
index cc106a2..460b041 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IOrderCrossCityService.java
@@ -258,4 +258,7 @@
 
 
     List<OrderCrossCity> queryListOrder(Integer driverId, Integer lineShiftId, List<Integer> state, String day) throws Exception;
+
+    int queryCountOrder(Integer driverId, Integer id, Integer state, String day);
+
 }
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java
index 2261739..257c1ad 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java
@@ -23,10 +23,12 @@
 import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -75,6 +77,7 @@
         List<Map<String, Object>> list = new ArrayList<>();
         List<LineShift> lineShifts = lineShiftMapper.queryByLineId(lineId);
         List<Map<String, Object>> s = lineSiteMapper.queryDriver(lineId, sdf.parse(day), driverId);
+        s = s.stream().distinct().collect(Collectors.toList());
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(sdf.parse(day));
         String vehicle = redisUtil.getValue("VEHICLE");
@@ -82,6 +85,10 @@
         if(ToolUtil.isNotEmpty(vehicle)){
             integers = JSON.parseArray(vehicle).toJavaList(Integer.class);
         }
+        List<OrderPrivateCar> orderPrivateCars = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>()
+                .in("state", Arrays.asList(2, 3, 4, 5, 11))
+                .eq("DATE_FORMAT(travelTime, '%Y-%m-%d')", day));
+        List<OrderCrossCity> orderCrossCities = orderCrossCityService.queryListOrder(null, null, Arrays.asList(5), day);
         for(LineShift lineShift : lineShifts){
             boolean b = true;
             String[] split = lineShift.getEndTime().split(":");
@@ -104,18 +111,21 @@
                 if(bo){
                     continue;
                 }
-
-
-                int i = orderTaxiService.selectCount(new EntityWrapper<OrderTaxi>().eq("driverId", map.get("driverId")).in("state", Arrays.asList(2, 3, 4, 5, 11)).eq("DATE_FORMAT(travelTime, '%Y-%m-%d')", day));
+                long i = 0 ;
+                if(CollectionUtils.isEmpty(orderPrivateCars)){
+                    Integer driverId1 = Integer.valueOf(map.get("driverId").toString());
+                    i = orderPrivateCars.stream().filter(orderPrivateCar -> orderPrivateCar.getDriverId().equals(driverId1)).count();
+                }
                 if(i > 0){
                     continue;
                 }
-                i = orderPrivateCarService.selectCount(new EntityWrapper<OrderPrivateCar>().eq("driverId", map.get("driverId")).in("state", Arrays.asList(2, 3, 4, 5, 11)).eq("DATE_FORMAT(travelTime, '%Y-%m-%d')", day));
-                if(i > 0){
-                    continue;
+//                List<OrderCrossCity> driverId1 = orderCrossCityService.queryListOrder(Integer.valueOf(map.get("driverId").toString()), lineShift.getId(), Arrays.asList(5), day);
+                if (CollectionUtils.isEmpty(orderCrossCities)){
+                    Integer driverId1 = Integer.valueOf(map.get("driverId").toString());
+                    i = orderCrossCities.stream().filter(orderCrossCity -> orderCrossCity.getDriverId().equals(driverId1)
+                    && orderCrossCity.getLineShiftId().equals(lineShift.getId())).count();
                 }
-                List<OrderCrossCity> driverId1 = orderCrossCityService.queryListOrder(Integer.valueOf(map.get("driverId").toString()), lineShift.getId(), Arrays.asList(5), day);
-                if(driverId1.size() > 0){
+                if(i > 0){
                     continue;
                 }
                 if(Integer.valueOf(map.get("laveSeat").toString()) <= 0){
diff --git a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
index 0b10a29..6f0f249 100644
--- a/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
+++ b/UserNTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -1835,6 +1835,10 @@
     public List<OrderCrossCity> queryListOrder(Integer driverId, Integer lineShiftId, List<Integer> state, String day) throws Exception {
         return orderCrossCityMapper.queryListOrder(driverId, lineShiftId, state, day);
     }
+    @Override
+    public int queryCountOrder(Integer driverId, Integer lineShiftId, Integer state, String day){
+        return orderCrossCityMapper.queryCountOrder(driverId, lineShiftId, state, day);
+    }
 
     /**
      * 获取订单编号

--
Gitblit v1.7.1