Z tego dokumentu dowiesz się, jak zaktualizować podróż i zarządzać jej stanem, który polega na użyciu maski pola do ustawienia odpowiednich pól dla podróży. Zakładamy, że skonfigurowała Fleet Engine w sposób opisany w tej witrynie i pracuje z pojazdem przypisanym do podróży.
Podstawowe informacje o aktualizacji podróży
Twój system używa Fleet Engine do aktualizowania podróży w tych sytuacjach:
- podczas przypisywania pojazdu do podróży po jego utworzeniu.
- gdy zmieni się stan podróży; na przykład gdy pojazd mija przez punkty pośrednie.
- Gdy zaktualizujesz pola podróży, takie jak liczba pasażerów czy miejsca docelowego.
Aby zaktualizować podróż, wyślij żądanie przy użyciu gRPC i REST.
Użyj odpowiednich danych logowania konta usługi projektu jako: opisane w artykule Fleet Engine: role konta usługi.
Zaktualizuj pola podróży
Możesz zaktualizować dowolne z pól podróży opisanych w sekcji Pola podróży w sekcji Create (Tworzenie)
podróż w jedną stronę. Na przykład po utworzeniu podróży często
ćwicz, aby najpierw znaleźć pojazd, a następnie zaktualizować pole vehicle_id
podróży na
powiązać go z pojazdem, po którym odbędzie się podróż.
Użyj masek pól
Maski pól umożliwiają wywołującym interfejs API listę pól, które powinny zostać wysłane przez żądanie lub zaktualizuj. za pomocą maski FieldMask, pozwala uniknąć zbędnych prac i zwiększyć wydajność. Fleet Engine używa masek pól do aktualizowania pól we wszystkich zasobach.
Zaktualizuj podróż, podając identyfikator pojazdu
Musisz skonfigurować podróż za pomocą identyfikatora pojazdu, aby usługa Fleet Engine mogła śledzić pojazdem na trasie. Następujący przykładowy kod pokazuje, jak zaktualizować podróż o identyfikator pojazdu.
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;
}
Zarządzanie stanem podróży
Określasz stan podróży, używając jednego z wyliczeń TripStatus
. gdy zmienia się stan podróży; na przykład od ENROUTE_TO_PICKUP
do
ARRIVED_AT_PICKUP
, aktualizujesz stan podróży we Fleet Engine. Podróż
cykl życia zawsze zaczyna się od wartości stanu NEW
i kończy wartością
COMPLETE
lub CANCELED
.
Przykładowa aktualizacja podróży
Poniższy przykład ilustruje, jak zaktualizować stan podróży dla każdej z odpowiedzi we 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;
}
Inne przykłady aktualizowania podróży znajdziesz w sekcji Inne rodzaje podróży .
Obsługa błędów związanych z podróżą
Podczas aktualizowania lub wyszukiwania już istniejących podróży możesz natrafić na
DEADLINE_EXCEEDED
– w którym to przypadku stan Fleet Engine jest nieznany.
Aby to sprawdzić, najpierw zadzwoń ponownie pod numer CreateTrip
, używając tego samego identyfikatora podróży
które chcą zaktualizować lub monitorować. Powinien zostać zwrócony kod 201 (CREATED) albo
409 (CONFLICT). W tym drugim przypadku poprzednie żądanie zostało zrealizowane, zanim
DEADLINE_EXCEEDED
Listę błędów sieci znajdziesz w pakiecie SDK dla klientów na Androida lub iOS: