Создавайте последовательные поездки

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

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

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

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

Поля поездок

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

Поля поездок
Имя Необходимый? Описание
родитель Да Строка, включающая идентификатор проекта. Этот идентификатор должен совпадать с идентификатором, используемым во всей вашей интеграции Fleet Engine, с теми же ролями учётной записи службы.
trip_id Да Строка, которую вы создаёте, чтобы уникально идентифицировать эту поездку. Идентификаторы поездок имеют определённые ограничения, как указано в справочнике.
тип_поездки Да Задайте для параметра TripType следующие значения для создаваемого типа поездки:
  • Один пункт назначения : установите значение SHARED или EXCLUSIVE .
  • Несколько пунктов назначения : установите значение EXCLUSIVE .
  • Спина к спине : установите значение EXCLUSIVE .
  • Общий пул : установите значение SHARED .
пункт_выдачи Да Место отправления поездки.
Промежуточные пункты назначения Да

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

точки_пути_транспортного_средства Да

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

количество_пассажиров Нет Количество пассажиров в поездке.
точка_высадки Нет Цель поездки.
идентификатор_транспортного_средства Нет Идентификатор транспортного средства, назначенного для поездки.

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

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

// 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 путевые точки» для поездки содержит список всех путевых точек, включая точки из других поездок, которые будут посещены до окончания поездки.

Например, рассмотрим две поездки подряд: поездка A и поездка B. Транспортное средство забрало пассажира для поездки A , и по пути к месту высадки водитель получает запрос на подбор другого пассажира для следующей поездки, поездки B.

  • Вызов getVehicle() возвращает remainingWaypoints , которые содержат:
    A Место высадкиB Место высадкиB Место высадки .
  • Либо getTrip() , либо обратный вызов onTripRemainingWaypointsUpdated для Trip A возвращает remainingWaypoints , которые содержат:
    Высадка .
  • Либо getTrip() , либо обратный вызов onTripRemainingWaypointsUpdated для Trip B возвращает remainingWaypoints , которые содержат:
    A Место высадкиB Место забора → и B Место высадки .

Что дальше?