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 usługi Fleet Engine do aktualizowania przejazdu w tych sytuacjach:
- Przypisując pojazd do podróży po jej utworzeniu.
- gdy zmienia się stan podróży, np. gdy pojazd przejeżdża przez punkty kontrolne;
- Gdy aktualizujesz pola dotyczące przejazdu, takie jak liczba pasażerów i punkt wysadzania.
Aby zaktualizować podróż, wyślij żądanie za pomocą gRPC lub REST.
Użyj odpowiednich danych logowania do konta usługi projektu 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 sekcji Tworzenie podróży do jednego miejsca docelowego. Na przykład po utworzeniu podróży należy najpierw znaleźć pojazd, a następnie zaktualizować pole podróży vehicle_id
, aby powiązać je z pojazdem, który będzie wykonywać podróż.
Używanie 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. Korzystanie z FieldMask pozwala uniknąć niepotrzebnej pracy i zwiększa 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ć przejazd, podając 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
Stan podróży określasz za pomocą jednej z wartości wyliczenia 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
, a kończy się wartością COMPLETE
lub CANCELED
.
Przykładowa aktualizacja podróży
Poniżej przedstawiamy, jak zaktualizować stan przejazdu w przypadku przejazdów z kolejnym 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 typy podróży.
Obsługa błędów dotyczących podróży
Podczas aktualizowania lub wyszukiwania istniejących przejazdów może wystąpić błąd DEADLINE_EXCEEDED
, co oznacza, że stan silnika floty jest nieznany.
Aby to sprawdzić, najpierw ponownie zadzwoń do CreateTrip
, używając tego samego identyfikatora podróży, który próbujesz zaktualizować lub monitorować. Powinien on zwrócić kod 201 (CREATED) lub 409 (CONFLICT). W tym drugim przypadku poprzednie żądanie zostało wykonane przed DEADLINE_EXCEEDED
.
Zobacz listę błędów sieci w pakiecie Consumer SDK na Android lub iOS.