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

В этом документе описывается, как создать обратную поездку, задать правильные поля и назначить ее транспортному средству для выполнения. Предполагается, что вы настроили 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 , но поездка с несколькими пунктами назначения по определению содержит промежуточные пункты назначения.

Vehicle_waypoints Да

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

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

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

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

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

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

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

Что дальше