From a8895e0ce4d03c9a50ad0196bb4ddc6dd642cd34 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 24 七月 2025 09:05:35 +0800
Subject: [PATCH] 司机端改派

---
 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java |  101 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 96 insertions(+), 5 deletions(-)

diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
index d2ac236..ee18e5c 100644
--- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
+++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
@@ -36,6 +36,7 @@
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -191,6 +192,8 @@
 
                         //添加已收入明细
                         incomeService.saveData(1, orderPrivateCar.getCompanyId(), 4, orderPrivateCar.getId(), 1, reassign.getMoney());
+                        // qyt 改派直接推送
+                        pushOrderPrivate(orderPrivateCar,uid);
                         break;
                     case 2:
                         OrderTaxi orderTaxi = orderTaxiService.selectById(reassign.getOrderId());
@@ -201,6 +204,9 @@
 
                         //添加已收入明细
                         incomeService.saveData(1, orderTaxi.getCompanyId(), 4, orderTaxi.getId(), 2, reassign.getMoney());
+
+                        // qyt 改派直接推送
+                        pushOrderTaxi(orderTaxi,uid);
                         break;
                     case 4:
                         OrderLogistics orderLogistics = orderLogisticsService.selectById(reassign.getOrderId());
@@ -234,8 +240,7 @@
 //                    jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId());
 //                }
 
-                // qyt 改派直接推送
-                pushOrder();
+
     
     
             }
@@ -662,12 +667,15 @@
     @Autowired
     private IPushOrderService pushOrderService;
 
+    @Autowired
+    private PushUtil pushUtil;
+
     /**
      * 推送订单给司机抢单
      * @param orderTaxi
      * @throws Exception
      */
-    public void pushOrder(OrderTaxi orderTaxi, Integer type) throws Exception{
+    public void pushOrderTaxi(OrderTaxi orderTaxi, Integer uid) throws Exception{
         new Thread(new Runnable() {
             @Override
             public void run() {
@@ -680,11 +688,12 @@
                     }
                     Company query = companyCityService.query(String.valueOf(orderTaxi.getStartLon()), String.valueOf(orderTaxi.getStartLat()));//获取起点所属分公司
                     List<PushOrder> querys = pushOrderService.querys(null, 2, query.getId());//获取需要推送的次数
-                    for (int i = 1; i <= querys.size(); i++) {
+                    for (int i = 1; i <=6; i++) {
                         PushOrder pushOrder = pushOrderService.querys(i, 2, query.getId()).get(0);
                         System.out.println("pushOrder:" + pushOrder);
                         //获取空闲司机
                         List<Driver> list = driverService.queryIdleDriver(2, orderTaxi.getStartLon(), orderTaxi.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机
+                        list = list.stream().filter(e->e.getId()!=uid).collect(Collectors.toList());
                         if (list.size() > 0) {
                             double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
                             int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
@@ -706,13 +715,15 @@
                             }
                         }
                         Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间
-                        OrderTaxi orderTaxi1 = OrderTaxiServiceImpl.this.selectById(orderTaxi.getId());
+                        OrderTaxi orderTaxi1 = orderTaxiService.selectById(orderTaxi.getId());
                         Integer state = orderTaxi1.getState();
                         if (state != 1) {
                             break;
                         }
                         if (i == querys.size() && state == 1) {
                             pushUtil.pushEndPush(1, orderTaxi.getUserId(), orderTaxi.getId(), 2);
+                            orderTaxi1.setState(10);
+                            orderTaxiService.updateById(orderTaxi1);
                             orderIds.remove(orderTaxi.getId());
                         }
                     }
@@ -722,4 +733,84 @@
             }
         }).start();
     }
+
+
+    /**
+     * 推送抢单数据
+     * @param orderPrivateCar
+     * @throws Exception
+     */
+    public void pushOrderPrivate(OrderPrivateCar orderPrivateCar,Integer uid) throws Exception{
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    Integer id = orderPrivateCar.getId();
+                    Integer orderType = orderPrivateCar.getRideType()==1?1:orderPrivateCar.getRideType()==2?9:8;
+                    orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单
+                    String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE");
+                    List<Integer> integers = new ArrayList<>();
+                    if(ToolUtil.isNotEmpty(vehicle)){
+                        integers = JSON.parseArray(vehicle).toJavaList(Integer.class);
+                    }
+                    Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司
+                    List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数
+                    for(int i = 1; i <= 6; i++){
+                        OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(id);
+                        if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
+                            break;
+                        }
+                        PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0);
+                        System.out.println("pushOrder:"+pushOrder);
+                        int i2 = pushOrder.getPushTime() / 10;
+                        if(i2==0){
+                            i2=1;
+                        }
+                        for (int i1 = 0; i1 < i2 ; i1++) {
+                            if (orderPrivateCar.getState() > 1) {
+                                break;
+                            }
+                            //获取空闲司机
+                            List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机
+                            list = list.stream().filter(e->e.getId()!=uid).collect(Collectors.toList());
+                            if (list.size() > 0) {
+                                double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
+                                int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
+                                lastIndex = lastIndex == 0 ? list.size() : lastIndex;
+                                list = list.subList(0, lastIndex);//获取空闲司机中占比数据
+                                for (Driver driver : list) {//开始进行推送
+                                    boolean bo = false;
+                                    for (Integer integer : integers) {
+                                        if (integer.compareTo(driver.getId()) == 0) {
+                                            bo = true;
+                                            break;
+                                        }
+                                    }
+                                    if (bo) {
+                                        continue;
+                                    }
+                                    pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime());
+                                }
+                            }
+                            Thread.sleep(10000);//设置等待时间
+                            Integer state = orderPrivateCar.getState();
+                            if (state > 1) {
+                                orderIds.remove(orderPrivateCar.getId());
+                                return;
+                            }
+                            if (i == querys.size() && state == 1) {
+                                pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
+                                orderPrivateCar.setState(10);
+                                orderPrivateCarService.updateById(orderPrivateCar);
+                                orderIds.remove(orderPrivateCar.getId());
+                            }
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }).start();
+    }
+
 }

--
Gitblit v1.7.1