Criar viagens em sequência

Este documento descreve como criar uma viagem de ida e volta, definir as campos e atribuí-los a um veículo para serem atendidos. Ele pressupõe que você tenha configurado o Fleet Engine, criado veículos, tenha um app de motorista funcionando e, opcionalmente, um app de consumidor. Você também precisa conhecer os vários cenários de viagem disponíveis para viagens sob demanda. Consulte os seguintes guias relacionados para que:

Noções básicas sobre a criação de viagens

Esta seção descreve os detalhes da solicitação necessários para criar uma viagem no Fleet Engine. Você emite uma solicitação de criação usando gRPC e REST.

  • Método CreateTrip(): gRPC ou REST
  • Mensagem CreateTripRequest: somente gRPC

Campos de viagem

Use os campos a seguir para criar uma viagem no Fleet Engine. É possível usar campos diferentes para os diferentes tipos de viagens: com um ou vários destinos, viagens consecutivas ou compartilhadas. Você você pode fornecer os campos opcionais ao criar a viagem ou pode defini-los mais tarde, ao atualizar a viagem.

Campos de viagem
Nome Obrigatório? Descrição
pai Sim Uma string que inclui o ID do projeto. Esse ID precisa ser o mesmo usado em toda a integração do Fleet Engine, com as mesmas funções da conta de serviço.
trip_id Sim Uma string criada por você que identifica exclusivamente essa viagem. Os IDs de viagem têm restrições específicas, conforme indicado na referência.
trip_type Sim Defina o TripType com os seguintes valores para o tipo de viagem que você está criando:
  • Destino único: defina como SHARED ou EXCLUSIVE.
  • Vários destinos: defina como EXCLUSIVE.
  • Conversas: defina como EXCLUSIVE.
  • Compartilhamento de recursos: defina como SHARED.
pickup_point Sim Ponto de origem da viagem.
Destinos intermediários Sim

Somente viagens com vários destinos: a lista de destinos intermediários que o motorista visita entre a coleta e a entrega. Assim como o dropoff_point, esse campo também pode ser definido mais tarde chamando UpdateTrip, mas uma viagem com vários destinos contém destinos intermediários por definição.

vehicle_waypoints Sim

Somente viagens em pool compartilhado: este campo permite a intercalação dos waypoints de várias viagens. Ele contém todos os pontos de referência restantes do veículo atribuído, bem como os pontos de referência de retirada e entrega dessa viagem. É possível definir esse campo chamando CreateTrip ou UpdateTrip. Também é possível atualizar os pontos de passagem do veículo pelo campo waypoints com uma chamada para UpdateVehicle. O serviço não retorna essas informações em chamadas GetTrip por motivos de privacidade.

number_of_passengers Não O número de passageiros na viagem.
dropoff_point Não O destino da viagem.
vehicle_id Não O ID do veículo atribuído à viagem.

Exemplo: criar uma viagem de ida

Veja a seguir como criar uma viagem de ida e volta e atribuí-la a um veículo Nesse cenário, a criação de viagens é a mesma para uma viagem de destino único. Só depois você cria outra viagem e a atribui a um veículo com uma viagem já ativa.

// 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;
}

Atualizar viagens consecutivas

Quando você atribui um veículo para uma viagem consecutiva, você atribui uma viagem a um veículo, mesmo que ele já tenha sido atribuído.

Qualquer viagem criada no Fleet Engine precisa ser atribuída a um veículo para que o Fleet Engine possa calcular os horários estimados de chegada e rastrear a viagem. Você pode fazer isso durante criação da viagem ou depois, ao atualizá-la.

Depois que você atribui a viagem a um veículo, o Fleet Engine adiciona automaticamente os pontos de passagem associados às viagens consecutivas ao campo de pontos de passagem do veículo. O campo remainingWaypoints de uma viagem contém uma lista de todos os pontos de passagem, incluindo os de outras viagens que serão visitados antes da entrega.

Por exemplo, considere duas viagens consecutivas: Viagem A e Viagem B. O veículo pegou o consumidor para a Viagem A e, enquanto estava a caminho do local de entrega, o motorista recebeu uma solicitação para pegar outro consumidor para a próxima viagem, a Viagem B.

  • Chamar getVehicle() retorna remainingWaypoints que contém:
    A entregaB retiradaB entrega.
  • getTrip() ou o Callback onTripRemainingWaypointsUpdated para A viagem A retorna remainingWaypoints que contenham:
    Uma desistência.
  • getTrip() ou o Callback onTripRemainingWaypointsUpdated para A viagem B retorna remainingWaypoints que contêm:
    Uma desistênciaB Retirada → e B Desistência.

A seguir