Ten dokument opisuje, jak zaktualizować przejazd i zarządzać jego stanem, co obejmuje użycie maski pola do ustawienia odpowiednich pól przejazdu. Zakładamy, że masz skonfigurowany Fleet Engine zgodnie z opisem na tej stronie i pracujesz z pojazdem przypisanym do przejazdu.
Podstawowe informacje o aktualizacji podróży
System używa Fleet Engine do aktualizowania przejazdu w tych sytuacjach:
- podczas przypisywania pojazdu do przejazdu po jego utworzeniu.
- gdy zmieni się stan przejazdu, np. gdy pojazd przejedzie przez punkty pośrednie;
- gdy aktualizujesz pola przejazdu, takie jak liczba pasażerów i miejsce wysiadania;
Aby zaktualizować przejazd, wyślij żądanie za pomocą gRPC lub REST.
Użyj odpowiednich danych logowania do konta usługi w projekcie, jak opisano w artykule Fleet Engine: role kont usługi.
Aktualizowanie pól podróży
Możesz zaktualizować dowolne pola przejazdu opisane w sekcji Pola przejazdu w artykule Tworzenie przejazdu z jednym miejscem docelowym. Na przykład po utworzeniu przejazdu często najpierw wyszukuje się pojazd, a następnie aktualizuje pole vehicle_id przejazdu, aby powiązać go z pojazdem, który będzie go realizować.
Używanie masek pól
Maski pól to sposób, w jaki wywołujący interfejs API mogą wyświetlać listę pól, które żądanie powinno zwrócić lub zaktualizować. Użycie FieldMask pozwala uniknąć niepotrzebnych działań i poprawia wydajność. Fleet Engine używa masek pól do aktualizowania pól we wszystkich zasobach.
Aktualizowanie podróży 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 przejazdu w przypadku przejazdów
Stan podróży określasz za pomocą jednej z wartości typu wyliczeniowego TripStatus. Gdy stan przejazdu się zmieni, np. z ENROUTE_TO_PICKUP na ARRIVED_AT_PICKUP, zaktualizuj stan przejazdu w Fleet Engine. Cykl życia przejazdu zawsze zaczyna się od wartości stanu NEW, a kończy wartością COMPLETE lub CANCELED.
Przykładowa aktualizacja przejazdu
Poniżej pokazujemy, jak zaktualizować stan przejazdu w przypadku przejazdu łączonego 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;
}
Inne przykłady aktualizowania podróży znajdziesz w sekcji Inne typy podróży.
Obsługa błędów dotyczących przejazdów
Podczas aktualizowania lub wyszukiwania istniejących przejazdów może wystąpić błąd DEADLINE_EXCEEDED. W takim przypadku stan Fleet Engine jest nieznany.
Aby to sprawdzić, najpierw wywołaj ponownie CreateTrip, używając tego samego identyfikatora przejazdu, który próbujesz zaktualizować lub monitorować. Powinien zostać zwrócony kod 201 (UTWORZONO) lub 409 (KONFLIKT). W tym drugim przypadku poprzednie żądanie zostało zrealizowane przed DEADLINE_EXCEEDED.
Zobacz listę błędów sieciowych w pakiecie SDK dla konsumentów na Android lub iOS.