From 0ffd0dc267f12e7208ea4c636ff1bf6771d43ad1 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期一, 18 五月 2026 19:13:45 +0800
Subject: [PATCH] fix bugs

---
 DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java |   92 ++++++++++++++++++++++++++++++++--------------
 1 files changed, 64 insertions(+), 28 deletions(-)

diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
index 6c589a9..aa425c1 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -27,6 +27,7 @@
 import com.stylefeng.guns.modular.system.warpper.MerchantCouponListWarpper;
 import com.stylefeng.guns.modular.taxi.dao.OrderTaxiMapper;
 import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateFormatUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -684,35 +685,70 @@
             lineShiftDriver.setLaveSeatNumber("");
         }else{//拼车
             lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber());
-            String[] split = orderCrossCity.getSeatNumber().split(",");
             String[] split1 = lineShiftDriver.getLaveSeatNumber().split(",");
-            String seatNumber = "";
-            //先判断选中座位号和剩余座位号是否匹配
-            for(String spl : split){
-                boolean b = true;
-                for(String sp : split1){
-                    if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){
-                        b = false;
-                        break;
-                    }
-                }
-                if(b){
-                    throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!");
-                }
-            }
-            for(String sp : split1){
-                boolean b = true;
+
+            if (StringUtils.isNotEmpty(orderCrossCity.getSeatNumber())){
+                // 用户已选座的情况
+                String[] split = orderCrossCity.getSeatNumber().split(",");
+                String seatNumber = "";
+                //先判断选中座位号和剩余座位号是否匹配
                 for(String spl : split){
-                    if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){
-                        b = false;
-                        break;
+                    boolean b = true;
+                    for(String sp : split1){
+                        if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){
+                            b = false;
+                            break;
+                        }
+                    }
+                    if(b){
+                        throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!");
                     }
                 }
-                if(b && ToolUtil.isNotEmpty(sp)){
-                    seatNumber += (sp + ",");
+                for(String sp : split1){
+                    boolean b = true;
+                    for(String spl : split){
+                        if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){
+                            b = false;
+                            break;
+                        }
+                    }
+                    if(b && ToolUtil.isNotEmpty(sp)){
+                        seatNumber += (sp + ",");
+                    }
                 }
+                lineShiftDriver.setLaveSeatNumber(ToolUtil.isNotEmpty(seatNumber) ? seatNumber.substring(0, seatNumber.length() - 1) : "");
+            } else {
+                // 用户未选座的情况,自动分配剩余座位的前peopleNumber个
+                StringBuilder assignedSeats = new StringBuilder();
+                StringBuilder remainingSeats = new StringBuilder();
+
+                for(int i = 0; i < split1.length; i++){
+                    if(ToolUtil.isEmpty(split1[i])){
+                        continue;
+                    }
+
+                    if(i < orderCrossCity.getPeopleNumber()){
+                        // 分配给当前订单的座位
+                        if(assignedSeats.length() > 0){
+                            assignedSeats.append(",");
+                        }
+                        assignedSeats.append(split1[i]);
+                    } else {
+                        // 剩余的座位
+                        if(remainingSeats.length() > 0){
+                            remainingSeats.append(",");
+                        }
+                        remainingSeats.append(split1[i]);
+                    }
+                }
+
+                // 设置订单的座位号
+                orderCrossCity.setSeatNumber(assignedSeats.toString());
+                this.updateById(orderCrossCity);
+
+                // 更新班次的剩余座位号
+                lineShiftDriver.setLaveSeatNumber(remainingSeats.toString());
             }
-            lineShiftDriver.setLaveSeatNumber(ToolUtil.isNotEmpty(seatNumber) ? seatNumber.substring(0, seatNumber.length() - 1) : "");
         }
         lineShiftDriverMapper.updateById(lineShiftDriver);
 
@@ -1607,11 +1643,11 @@
             return ResultUtil.error("该乘客有未完成的订单");
         }
 
-        // 9. 检查司机是否正在服务中
-        List<OrderCrossCity> orderCrossCities2 = orderCrossCityMapper.queryOrders(driverId, warpper.getLineShiftDriverId(), Arrays.asList(5));
-        if (orderCrossCities2.size() > 0) {
-            return ResultUtil.error("司机正在服务中");
-        }
+//        // 9. 检查司机是否正在服务中
+//        List<OrderCrossCity> orderCrossCities2 = orderCrossCityMapper.queryOrders(driverId, warpper.getLineShiftDriverId(), Arrays.asList(5));
+//        if (orderCrossCities2.size() > 0) {
+//            return ResultUtil.error("司机正在服务中");
+//        }
 
 //        // 10. 计算价格
 //        Map<String, String> distanceMap = gdMapElectricFenceUtil.getDistance(

--
Gitblit v1.7.1