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

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

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

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

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

Поля поездки

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

Поля поездки
Название Обязательно? Описание
parent Да Строка, содержащая идентификатор проекта. Этот идентификатор должен быть таким же, как и во всей интеграции Fleet Engine, с теми же ролями сервисного аккаунта.
trip_id Да Строка, которую вы создаете для уникальной идентификации этой поездки. Для идентификаторов поездок действуют определенные ограничения, указанные в справочной документации.
trip_type Да Задайте для TripType одно из следующих значений в зависимости от типа поездки:
  • Один пункт назначения. Укажите SHARED или EXCLUSIVE.
  • Multi-destination (Несколько пунктов назначения): 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 автоматически добавит путевые точки, связанные с последовательными поездками, в поле путевых точек транспортного средства. Поле remainingWaypoints содержит список всех путевых точек, включая точки из других поездок, которые будут посещены до высадки пассажира.

Рассмотрим две поездки, следующие одна за другой: поездку А и поездку Б. Транспортное средство забрало клиента для поездки А. По пути к месту назначения водитель получает запрос на следующую поездку Б.

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

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