Aggiornare le corse e gestire il loro stato

Questo documento descrive come aggiornare una corsa e gestirne lo stato, comporta l'utilizzo di una maschera di campo per impostare i campi pertinenti per una corsa. Si presume che configurato Fleet Engine come descritto in questo sito e stai lavorando veicolo assegnato a una corsa.

Nozioni di base sugli aggiornamenti dei percorsi

Il tuo sistema utilizza Fleet Engine per aggiornare una corsa nelle seguenti situazioni:

  • Quando assegni un veicolo a una corsa dopo la sua creazione.
  • Quando lo stato della corsa cambia; ad esempio quando il veicolo passa passando per le tappe.
  • Quando aggiorni i campi della corsa, come il numero di passeggeri e punto di partenza.

Per aggiornare un viaggio, invia una richiesta utilizzando gRPC e REST.

  • Metodo UpdateTrip(): gRPC o REST
  • Messaggio UpdateTripRequest: solo gRPC

Utilizza le credenziali appropriate per l'account di servizio del progetto come descritto in Fleet Engine: ruoli degli account di servizio.

Aggiorna i campi del percorso

Puoi aggiornare qualsiasi campo della corsa descritti in Campi viaggio in Crea un viaggio con una sola destinazione. Ad esempio, dopo aver creato un viaggio, è una pratica comune esercitati per trovare un veicolo e poi aggiornare il campo vehicle_id della corsa in associarlo al veicolo che eseguirà la corsa.

Utilizzare le maschere dei campi

Le maschere di campo sono un modo per i chiamanti dell'API di elencare i campi che una richiesta deve o aggiornare. Utilizzo di una FieldMask evita lavori non necessari e migliora le prestazioni. Fleet Engine utilizza le maschere dei campi per aggiornare i campi di tutte le risorse.

Aggiorna la corsa con l'ID veicolo

Devi configurare una corsa con un ID veicolo in modo che Fleet Engine possa monitorare lungo il percorso. Il seguente esempio di codice mostra come aggiorna la corsa con un ID veicolo.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to update.
Trip trip = Trip.newBuilder()
    .setVehicleId("8241890")
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest =
    UpdateTripRequest.newBuilder()      // No need for the header.
        .setName(tripName)
        .setTrip(trip)
        .setUpdateMask(FieldMask.newBuilder().addPaths("vehicle_id"))
        .build();

// Error handling.
// If the Fleet Engine has both a trip and vehicle with IDs, and if the
// credentials validate, then the service updates the trip.
try {
  Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:                    // Neither the trip nor vehicle exist.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Gestisci lo stato dei viaggi

Puoi specificare lo stato di una corsa utilizzando una delle enumerazioni TripStatus e i relativi valori. Quando lo stato di un viaggio cambia. ad esempio da ENROUTE_TO_PICKUP a ARRIVED_AT_PICKUP, aggiorni lo stato della corsa in Fleet Engine. Il viaggio il ciclo di vita inizia sempre con il valore dello stato NEW e termina con il valore COMPLETE o CANCELED.

Esempio di aggiornamento della corsa

Di seguito viene illustrato come aggiornare lo stato del viaggio per una sequenza retroattiva su Fleet Engine.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// Trip settings to be updated.
Trip trip = Trip.newBuilder()
    .setTripStatus(TripStatus.ARRIVED_AT_PICKUP)
    .build();

// Trip update request
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(FieldMask.newBuilder().addPaths("trip_status"))
    .build();

// Error handling.
try {
  Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:            // The trip doesn't exist.
      break;
    case FAILED_PRECONDITION:  // The given trip status is invalid.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Puoi vedere altri esempi su come aggiornare le corse nella sezione Altri tipi di viaggio. .

Gestire gli errori di blocco

Durante l'aggiornamento o la ricerca di corse esistenti, è possibile che si verifichi DEADLINE_EXCEEDED errore, nel qual caso lo stato di Fleet Engine è sconosciuto. Per effettuare accertamenti, per prima cosa chiama di nuovo CreateTrip utilizzando lo stesso ID di viaggio che hai stanno tentando di aggiornare o monitorare. Dovrebbe essere restituito un errore 201 (CREATED) 409 (CONFLITTO). Nel secondo caso, la richiesta precedente è riuscita prima DEADLINE_EXCEEDED.

Visualizza l'elenco degli errori di rete nell'SDK consumer per Android o iOS.

Passaggi successivi