Как создавать поездки подряд

В этом документе рассказывается, как создать поездку с пересадкой, задать правильные поля и назначить ее транспортному средству. Предполагается, что вы настроили Fleet Engine, создали транспортные средства, разработали рабочее приложение для водителей и, при необходимости, приложение для пользователей. Кроме того, вы должны быть знакомы с различными сценариями поездок по запросу. Чтобы узнать больше, ознакомьтесь со следующими руководствами:

Основы создания поездок

В этом разделе описываются сведения о запросе, необходимые для создания поездки в Fleet Engine. Вы отправляете запрос на создание с помощью gRPC или REST.

  • Метод CreateTrip(): gRPC или REST.
  • Сообщение CreateTripRequest: только gRPC

Поля поездки

Чтобы создать рейс в Fleet Engine, используйте следующие поля. Для разных типов поездок можно использовать разные поля: поездки с одной или несколькими остановками, последовательные поездки или поездки с несколькими пассажирами. Вы можете указать необязательные поля при создании поездки или позже, когда будете ее изменять.

Поля поездки
Название Обязательно? Описание
parent Да Строка, содержащая идентификатор проекта. Этот идентификатор должен быть таким же, как и во всей интеграции Fleet Engine, с теми же ролями сервисного аккаунта.
trip_id Да Строка, созданная вами и однозначно идентифицирующая поездку. Идентификаторы поездок имеют определенные ограничения, указанные в справочнике.
trip_type Да Задайте для параметра TripType следующие значения в зависимости от типа поездки:
  • Единственный пункт назначения: задайте значение SHARED или EXCLUSIVE.
  • Несколько пунктов назначения: задайте значение EXCLUSIVE.
  • Back-to-back (Последовательные встречи): EXCLUSIVE.
  • Общий пул – SHARED.
pickup_point Да Пункт отправления.
Промежуточные пункты назначения Да

Только для поездок с несколькими пунктами назначения. Список промежуточных пунктов назначения, которые водитель посещает между пунктами посадки и высадки. Как и в случае с полем dropoff_point, это поле можно задать позже, вызвав функцию UpdateTrip, но поездка с несколькими пунктами назначения по определению содержит промежуточные пункты назначения.

vehicle_waypoints Да

Только поездки с общим пулом. Это поле поддерживает чередование путевых точек из нескольких поездок. Он содержит все оставшиеся точки маршрута для назначенного транспортного средства, а также точки посадки и высадки для этой поездки. Это поле можно задать, вызвав метод CreateTrip или UpdateTrip. Вы также можете обновить путевые точки транспортного средства через поле waypoints с помощью вызова UpdateVehicle. Сервис не возвращает эту информацию при звонках на номер GetTrip из соображений конфиденциальности.

number_of_passengers Нет Количество пассажиров.
dropoff_point Нет Пункт назначения поездки.
vehicle_id Нет Идентификатор транспортного средства, назначенного для поездки.

Пример: как создать поездку с пересадкой

Ниже показано, как создать последовательную поездку и назначить ее автомобилю. В этом случае поездка создается так же, как и для одного пункта назначения. Позже вы создаете другую поездку и назначаете ее транспортному средству, у которого уже есть активная поездка.

// A vehicle with ID 'my-vehicle' is already created and it is assigned to a trip with ID 'current-trip'.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String VEHICLE_ID =" my-vehicle";
static final String TRIP_ID = "back-to-back-trip");

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;

Trip trip = Trip.newBuilder()
    .setTripType(TripType.EXCLUSIVE)
    .setPickupPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.195139).setLongitude(106.820826)))
    .setDropoffPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.1275).setLongitude(106.6537)))
    .setVehicleId(VEHICLE_ID)
    .build();

// Create trip request
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
    .setParent(parent)
    .setTripId(TRIP_ID)
    .setTrip(trip)
    .build();

// Error handling.
try {
  // Fleet Engine automatically assigns a 'waypoints' list to the trip containing
  // the vehicle's current trip waypoints.
  Trip createdTrip =
      tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Как изменить последовательные поездки

Когда вы назначаете транспортное средство для поездки, следующей сразу за другой, вы назначаете поездку транспортному средству, даже если оно уже назначено для другой поездки.

Любая поездка, созданная в Fleet Engine, должна быть назначена транспортному средству, чтобы Fleet Engine мог рассчитывать время прибытия и отслеживать ее. Это можно сделать при создании поездки или позже, когда вы будете ее редактировать.

После того как вы назначите поездку автомобилю, Fleet Engine автоматически добавит путевые точки, связанные с последовательными поездками, в поле путевых точек автомобиля. Поле remainingWaypoints содержит список всех путевых точек, включая точки из других поездок, которые будут посещены до высадки пассажира.

Например, рассмотрим две поездки подряд: Поездка А и Поездка Б. Водитель забрал пассажира для поездки А и получил запрос на поездку Б.

  • При вызове getVehicle() возвращается remainingWaypoints со следующими данными:
    A Высадка → B Посадка → B Высадка.
  • Для поездки А либо getTrip(), либо обратный вызов onTripRemainingWaypointsUpdated возвращает remainingWaypoints, содержащий:
    остановку.
  • Функция getTrip() или обратный вызов onTripRemainingWaypointsUpdated для поездки Б возвращает remainingWaypoints, содержащий:
    Высадка в пункте А → Посадка в пункте Б → Высадка в пункте Б.

Дальнейшие действия