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.
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.