Z tego dokumentu dowiesz się, jak aktualizować podróż i zarządzać jej stanem. Obejmuje to używanie maski pola do ustawiania odpowiednich pól podróży. Zakładamy, że masz skonfigurowany Fleet Engine zgodnie z opisem w tej witrynie i pracujesz z pojazdem przypisanym do podróży.
Podstawowe informacje o aktualizowaniu podróży
Twój system używa Fleet Engine do aktualizowania podróży w tych sytuacjach:
- Gdy po utworzeniu podróży przypiszesz do niej pojazd.
- Gdy zmieni się stan podróży, np. gdy pojazd przejedzie przez punkty na trasie.
- Gdy zaktualizujesz pola podróży, np. liczbę pasażerów i punkt wysadzenia.
Aby zaktualizować podróż, wyślij prośbę 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 podróży często najpierw wyszukujesz pojazd, a potem aktualizujesz pole vehicle_id podróży, aby powiązać ją z pojazdem, który będzie realizował podróż.
Używanie masek pól
Maski pól umożliwiają osobom wywołującym interfejs API wyświetlanie pól, które powinny być uwzględnione w żądaniu lub aktualizacji. Używanie 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 podróży za pomocą identyfikatora pojazdu
Musisz skonfigurować podróż z identyfikatorem pojazdu, aby Fleet Engine mógł śledzić pojazd na trasie. Poniższy przykład kodu 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 TripStatus wartości wyliczenia. Gdy stan podróży się zmieni, np. z ENROUTE_TO_PICKUP na ARRIVED_AT_PICKUP, zaktualizuj stan podróży w Fleet Engine. Cykl życia podróży zawsze zaczyna się od stanu NEW i kończy się stanem COMPLETE lub CANCELED.
Przykład aktualizacji podróży
Poniżej pokazujemy, jak zaktualizować stan podróży w Fleet Engine w przypadku podróży z przesiadką.
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 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ć, ponownie wywołaj CreateTrip z tym samym identyfikatorem podróży, który próbujesz zaktualizować lub monitorować. Powinno to zwrócić kod stanu 201 (UTWORZONO) lub 409 (KONFLIKT). W tym drugim przypadku poprzednie żądanie zostało zrealizowane przed upływem terminu DEADLINE_EXCEEDED.
Listę błędów sieciowych znajdziesz w pakiecie SDK dla konsumentów na Android lub iOS.