W tym dokumencie opisujemy, jak aktualizować przejazd i zarządzać jego stanem. Wymaga to użycia maski pola do ustawienia odpowiednich pól przejazdu. Zakłada się w nim, że usługa Fleet Engine została skonfigurowana zgodnie z opisem na tej stronie i że pracujesz z pojazdem przypisanym do przejazdu.
Podstawowe informacje o aktualizacjach podróży
System korzysta z Fleet Engine, aby aktualizować przejazd w tych sytuacjach:
- Podczas przypisywania pojazdu do utworzonej już podróży.
- Gdy zmieni się stan przejazdu, np. gdy pojazd przejedzie przez punkty pośrednie.
- Gdy aktualizujesz pola podróży, takie jak liczba pasażerów i miejsce docelowe.
Aby zaktualizować przejazd, wyślij żądanie za pomocą gRPC lub REST.
Użyj odpowiednich danych logowania konta usługi w projekcie zgodnie z opisem w artykule Fleet Engine: role konta usługi.
Aktualizowanie pól podróży
Możesz zaktualizować dowolne pole podróży opisane w sekcji Pola podróży w artykule Tworzenie podróży do jednego miejsca docelowego. Na przykład po utworzeniu przejazdu często najpierw wyszukuje się pojazd, a potem aktualizuje pole vehicle_id
przejazdu, aby powiązać go z pojazdem, który będzie realizować przejazd.
Używanie masek pól
Maski pól umożliwiają wywołującym interfejs API wyświetlanie listy pól, które żądanie powinno zwracać lub aktualizować. Użycie FieldMask pozwala uniknąć niepotrzebnych działań i zwiększa wydajność. Fleet Engine używa masek pól do aktualizowania pól we wszystkich zasobach.
Aktualizowanie przejazdu za pomocą identyfikatora pojazdu
Musisz skonfigurować przejazd z identyfikatorem pojazdu, aby Fleet Engine mógł śledzić pojazd na trasie. Poniższy przykładowy kod pokazuje, jak zaktualizować przejazd za pomocą identyfikatora 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
Stan podróży określa się za pomocą jednej z wartości wyliczeniowych TripStatus
. Gdy stan przejazdu się zmieni, np. z ENROUTE_TO_PICKUP
na ARRIVED_AT_PICKUP
, zaktualizuj stan przejazdu w Fleet Engine. Cykl życia podróży zawsze zaczyna się od wartości stanu NEW
, a kończy wartością COMPLETE
lub CANCELED
.
Przykładowa aktualizacja podróży
Poniżej przedstawiamy, jak zaktualizować stan przejazdu w przypadku przejazdu bezpośrednio po poprzednim w 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;
}
Więcej przykładów aktualizowania podróży znajdziesz w sekcji Inne rodzaje podróży.
Obsługa błędów dotyczących przejazdu
Podczas aktualizowania lub wyszukiwania istniejących przejazdów może wystąpić błąd DEADLINE_EXCEEDED
, w którym stan Fleet Engine jest nieznany.
Aby to sprawdzić, ponownie zadzwoń pod numer CreateTrip
, używając tego samego identyfikatora przejazdu, który próbujesz zaktualizować lub monitorować. Powinien zostać zwrócony kod stanu 201 (CREATED) lub 409 (CONFLICT). W tym drugim przypadku poprzednia prośba została zrealizowana przed DEADLINE_EXCEEDED
.
Zapoznaj się z listą błędów sieciowych w pakiecie Consumer SDK na Android lub iOS.