From 9e4bae869bdfb3783129b84409fe2ae0a3351100 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期一, 13 一月 2025 17:30:54 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/ZhaoYangChuXing

---
 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |   59 ++++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 36 insertions(+), 23 deletions(-)

diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index a006a68..eece0eb 100644
--- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -362,6 +362,7 @@
             if(null != assignOrder){//配置了指派规则才处理
                 //获取空闲司机
                 List<Driver> drivers = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), assignOrder.getDistance(), null);//获取范围内空闲司机
+                List<Integer> driverIds = drivers.stream().map(Driver::getId).collect(Collectors.toList());
                 if(drivers.size() > 0){//有司机,直接指派给司机
                     Driver dr = null;
                     if(drivers.size() > 1){
@@ -370,16 +371,18 @@
                             Driver driver = null;
                             int m = 0;
                             int index = 0;
-    
                             // 查询预约单
-                            List<Integer> driverIds = drivers.stream().map(Driver::getId).collect(Collectors.toList());
                             List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6,  11);
+                            List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList());
                             for(int j = 0; j < drivers.size(); j++){
                                 Driver driver1 = drivers.get(j);
                                 // 判断该司机是否有30分钟内预约单
                                 long count = orderPrivateCarss.stream().filter(orderPrivateCar1 -> driver1.getId().equals(orderPrivateCar1.getDriverId())
                                         && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).minusMinutes(30).isBefore(LocalDateTime.now())
                                         && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).isAfter(LocalDateTime.now())).count();
+                                if(orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())){
+                                    continue;
+                                }
                                 if(count > 0){
                                     continue;
                                 }
@@ -415,17 +418,35 @@
                             }
                         }
                     }else{
-                        dr = drivers.get(0);
+                        List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6,  11);
+                        if(orderPrivateCarss.size()==0){
+                            dr = drivers.get(0);
+                        }
                     }
 
-                    orderPrivateCar.setDriverId(dr.getId());
-                    orderPrivateCar.setCompanyId(dr.getFranchiseeId() != null && dr.getFranchiseeId() != 0 ? dr.getFranchiseeId() : (
-                            dr.getCompanyId() != null && dr.getCompanyId() != 0 ? dr.getCompanyId() : 1));
-                    orderPrivateCar.setState(2);
-                    orderPrivateCar.setCarId(dr.getCarId());
-                    CarService query1 = carServiceMapper.query(1, dr.getCarId());
-                    orderPrivateCar.setServerCarModelId(query1.getServerCarModelId());
-                    orderPrivateCar.setSnatchOrderTime(new Date());
+                    if(Objects.nonNull(dr)){
+                        orderPrivateCar.setDriverId(dr.getId());
+                        orderPrivateCar.setCompanyId(dr.getFranchiseeId() != null && dr.getFranchiseeId() != 0 ? dr.getFranchiseeId() : (
+                                dr.getCompanyId() != null && dr.getCompanyId() != 0 ? dr.getCompanyId() : 1));
+                        orderPrivateCar.setState(2);
+                        orderPrivateCar.setCarId(dr.getCarId());
+                        CarService query1 = carServiceMapper.query(1, dr.getCarId());
+                        orderPrivateCar.setServerCarModelId(query1.getServerCarModelId());
+                        orderPrivateCar.setSnatchOrderTime(new Date());
+                        if(orderPrivateCar.getOrderType() != 2){
+                            dr.setState(3);
+                        }
+                        driverService.updateById(dr);
+                        new Thread(new Runnable() {
+                            @Override
+                            public void run() {
+                                pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0);
+                                pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0);
+                                pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
+                            }
+                        }).start();
+                    }
+
 
                     //调用高德创建轨迹
 //                    String s = gdFalconUtil.selectTerminal(dr.getPhone());
@@ -441,22 +462,10 @@
 //                        orderPrivateCar.setBindId(map.get("bindId"));
 //                    }
 
-                    if(orderPrivateCar.getOrderType() != 2){
-                        dr.setState(3);
-                    }
-                    driverService.updateById(dr);
                     this.updateById(orderPrivateCar);
 
                     //发送短信给司机
 //                    aLiSendSms.sendSms(dr.getPhone(), "SMS_216832951", "{\"" + orderPrivateCar.getStartAddress() + "\"}");
-                    new Thread(new Runnable() {
-                        @Override
-                        public void run() {
-                            pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0);
-                            pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0);
-                            pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
-                        }
-                    }).start();
                 }
             }
         }
@@ -815,6 +824,7 @@
                             // 查询预约单
                             List<Integer> driverIds = list.stream().map(Driver::getId).collect(Collectors.toList());
                             List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6,  11);
+                            List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList());
                             double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
                             int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
                             list = list.subList(0, lastIndex);//获取空闲司机中占比数据
@@ -823,6 +833,9 @@
                                 long count = orderPrivateCars.stream().filter(orderPrivateCar1 -> driver.getId().equals(orderPrivateCar1.getDriverId())
                                         && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).minusMinutes(30).isBefore(LocalDateTime.now())
                                         && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).isAfter(LocalDateTime.now())).count();
+                                if(orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())){
+                                    continue;
+                                }
                                 if(count > 0){
                                     continue;
                                 }

--
Gitblit v1.7.1