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

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

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

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

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

Поля поездок

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

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

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

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

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

количество_пассажиров Нет Количество пассажиров в поездке.
точка высадки Нет Пункт назначения поездки.
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 для поездки A возвращают remainingWaypoints , содержащие:
    Высадка пассажиров .
  • Метод getTrip() или функция обратного вызова onTripRemainingWaypointsUpdated для поездки B возвращают remainingWaypoints , содержащие:
    A — место высадкиB — место посадки → и B — место высадки .

Что дальше?