liujie
2026-03-18 62a2a8e5fafec9cde437c00a5721253501451c33
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -144,6 +144,9 @@
   private IUserTaxiCardService userTaxiCardService;
   @Autowired
   private IRegionService regionService;
   @Autowired
   private ITSysPushTypeService tSysPushTypeService;
   @Value("${callbackPath}")
   private String callbackPath;
   
@@ -349,6 +352,13 @@
               driver.setState(3);
               driverService.updateById(driver);
            }
            //判断独享,一口价,拼车
            if (orderPrivateCar.getRideType() != 3) {
               orderPrivateCar.setTotalPeopleNum(peopleNum);
@@ -371,6 +381,7 @@
               if (orderPrivateCar.getState() == 1) {
                  this.pushOrder(orderPrivateCar);
               }
            } else {
@@ -2756,6 +2767,8 @@
    * @throws Exception
    */
   public void pushOrder(OrderPrivateCar orderPrivateCar) throws Exception {
      new Thread(new Runnable() {
         @Override
         public void run() {
@@ -2769,56 +2782,168 @@
                  integers = JSON.parseArray(vehicle).toJavaList(Integer.class);
               }
               OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
               List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数
               for (int i = 1; i <= querys.size() + 15; i++) {
               // 判断是否为派单模式
               TSysPushType sysPushType = tSysPushTypeService.selectOne(new EntityWrapper<TSysPushType>().eq("openCityId", openCity.getId()));
               if(sysPushType!=null && sysPushType.getPushType()==2){
                  OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
                  if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
                     break;
                  }
                  int finalI = i;
                  PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
                  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);//所有附近空闲司机
                  if (null == orderPrivateCar && orderPrivateCar.getState() == 1) {
                     // 固定5公里进行派单
                     List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), 5.0, null);//所有附近空闲司机
                     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;
                        Driver driver1 = list.stream().sorted(Comparator.comparingDouble(Driver::getDistance).reversed()).findFirst().get();
                        if(orderPrivateCar.getType() == 3){
                           //批量订单
                           CarService carService = new CarService();
                           carService.setCarId(driver1.getCarId());
                           carService.setType(1);
                           CarService carService1 = carServiceMapper.selectOne(carService);
                           orderPrivateCar.setServerCarModelId(carService1.getServerCarModelId());
                           //1=独享,2=一口价
                           String serverCarModel = orderPrivateCar.getServerCarModel();
                           JSONArray jsonArray = JSON.parseArray(serverCarModel);
                           Integer rideType1 = null;
                           for (int i = 0; i < jsonArray.size(); i++) {
                              JSONObject jsonObject = jsonArray.getJSONObject(i);
                              Integer serverCarModelId = jsonObject.getInteger("serverCarModelId");
                              Integer rideType = jsonObject.getInteger("rideType");
                              if(serverCarModelId.equals(carService1.getServerCarModelId())){
                                 rideType1 = rideType;
                                 if(rideType == 1){
                                    break;
                                 }
                              }
                           }
                           if (bo) {
                              continue;
                           }
                           pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime());
                           orderPrivateCar.setRideType(rideType1);
                        }
                     }
                     Thread.sleep(10000);//设置等待时间
                     Integer state = orderPrivateCar.getState();
                     if (state > 1) {
                        orderIds.remove(orderPrivateCar.getId());
                        return;
                     }
                     if (i == querys.size() + 15 && state == 1) {
                        orderPrivateCar.setDriverId(driver1.getId());
                        orderPrivateCar.setCarId(driver1.getCarId());
                        orderPrivateCar.setCompanyId(driver1.getFranchiseeId() != null && driver1.getFranchiseeId() != 0 ? driver1.getFranchiseeId() : (
                              driver1.getCompanyId() != null && driver1.getCompanyId() != 0 ? driver1.getCompanyId() : 1));
                        orderPrivateCar.setState(2);
                        orderPrivateCar.setSnatchOrderTime(new Date());
                        // 是否推广订单
                        Integer promotion = isPromotion(orderPrivateCar.getUserId(), driver1.getPlaceOfEmployment());
                        if(null != promotion){
                           orderPrivateCar.setPromotion(2);
                           driver1 = driverService.selectById(promotion);
                           orderPrivateCar.setPromotionUser(driver1.getName());
                           orderPrivateCar.setPromotionPhone(driver1.getPhone());
                           orderPrivateCar.setPromotionDriverId(promotion);
                        }else{
                           orderPrivateCar.setPromotion(1);
                        }
                        orderPrivateCarMapper.updateById(orderPrivateCar);
                        //如果是预约单,则不修改司机为服务中
                        if(orderPrivateCar.getOrderType() != 2 || (orderPrivateCar.getOrderType() == 2 && orderPrivateCar.getTravelTime().getTime() < System.currentTimeMillis() + 600000)){
                           //修改司机为服务中
                           driver1.setState(3);
                           driverService.updateById(driver1);
                        }
                        //推送相关代码------------------start----------------
                        new Thread(new Runnable() {
                           @Override
                           public void run() {
                                 pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(),0);
                                 pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(),0);
                                 if(orderPrivateCar.getType() == 2){
                                    pushUtil.pushFerryOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 2);
                                 }
                           }
                        }).start();
                        new Thread(new Runnable() {
                           @Override
                           public void run() {
                              pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
                           }
                        }).start();
                        systemNoticeService.addSystemNotice(2, "已为您派得快车订单,请及时联系客户!", orderPrivateCar.getDriverId(), 1);
                        systemNoticeService.addSystemNotice(1, "您的订单已指派给" + driver1.getName().substring(0, 1) + "师傅,请保持电话畅通!", orderPrivateCar.getUserId(), 1);
                        if(pushMinistryOfTransport){
                           new Thread(new Runnable() {
                              @Override
                              public void run() {
                                 //上传数据
                                 pushMinistryOfTransportUtil.orderCreate(orderPrivateCar.getId());
                                 pushMinistryOfTransportUtil.orderMatch(orderPrivateCar.getId());
                              }
                           }).start();
                        }
                     }else {
                        // 没找到车辆
                        orderPrivateCar.setState(10);
                        orderPrivateCarMapper.updateById(orderPrivateCar);
                        pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
                        orderIds.remove(orderPrivateCar.getId());
                        // TODO 退款
                     }
                  }
               }else {
                  List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数
                  for (int i = 1; i <= querys.size() + 15; i++) {
                     OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
                     if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
                        break;
                     }
                     int finalI = i;
                     PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
                     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);//所有附近空闲司机
                        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() + 15 && state == 1) {
                           pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
                           orderIds.remove(orderPrivateCar.getId());
                        }
                     }
                  }
               }
            } catch (Exception e) {
               e.printStackTrace();
            }
@@ -2890,4 +3015,6 @@
      }
      return maps;
   }
}