Z tego dokumentu dowiesz się, jak aktualizować podróż i zarządzać jej stanem. Polega to na ustawianiu odpowiednich pól podróży za pomocą maski pól. Zakładamy, że masz skonfigurowany mechanizm floty zgodnie z opisem na tej stronie i pracujesz 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 zmienia się stan podróży, np. gdy pojazd przejeżdża przez punkty kontrolne;
- Gdy aktualizujesz pola podróży, takie jak liczba pasażerów i miejsce wylądowania.
Aby zaktualizować podróż, wyślij żądanie przy użyciu gRPC i REST.
Użyj odpowiednich danych logowania do konta usługi projektu zgodnie z opisem w artykule Fleet Engine: role konta usługi.
Zaktualizuj pola podróży
Możesz zaktualizować dowolne pole podróży opisane w sekcji Pola podróży w sekcji Tworzenie podróży do jednego miejsca docelowego. Na przykład często po utworzeniu podróży najpierw znajduje się pojazd, a następnie aktualizuje pole vehicle_id
, aby powiązać go z pojazdem, po którym się odbywa.
Użyj masek pól
Pole maski to sposób na podanie przez wywołujących interfejs API listy pól, które mają być aktualizowane lub aktualizowane. Używanie FieldMask pozwala uniknąć zbędnych działań 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ć przejazd z identyfikatorem pojazdu, aby silnik floty mógł śledzić pojazd na jego trasie. Poniższy przykładowy kod pokazuje, jak zaktualizować podróż 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ślasz za pomocą jednej z wartości enumeracji TripStatus
. Gdy stan podróży ulegnie zmianie, np. z ENROUTE_TO_PICKUP
na
ARRIVED_AT_PICKUP
, aktualizujesz stan podróży w Fleet Engine. Cykl życia podróży zawsze zaczyna się od wartości stanu NEW
i kończy wartością COMPLETE
lub CANCELED
.
Przykładowa aktualizacja podróży
Poniżej pokazujemy, jak zaktualizować stan podróży w przypadku kilkukrotnej podróży 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;
}
Więcej przykładów aktualizowania podróży znajdziesz w sekcji Inne typy podróży.
Obsługa błędów dotyczących podróży
Podczas aktualizowania lub wyszukiwania istniejących podróży może wystąpić błąd DEADLINE_EXCEEDED
. W takim przypadku stan Fleet Engine jest nieznany.
Aby to sprawdzić, najpierw ponownie wywołaj funkcję CreateTrip
, używając tego samego identyfikatora podróży, który próbujesz zaktualizować lub monitorować. Powinien wyświetlić się błąd 201 (CREATED) albo 409 (CONFLICT). W tym drugim przypadku poprzednie żądanie zostało zrealizowane przed DEADLINE_EXCEEDED
.
Wyświetl listę błędów sieci w pakiecie SDK dla konsumentów (Android lub iOS).