Aktualizowanie podróży i zarządzanie ich stanem

Z tego dokumentu dowiesz się, jak zaktualizować podróż i zarządzać jej stanem, który polega na użyciu maski pola do ustawienia odpowiednich pól dla podróży. Zakładamy, że skonfigurowała Fleet Engine w sposób opisany w tej witrynie i pracuje 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 zmieni się stan podróży; na przykład gdy pojazd mija przez punkty pośrednie.
  • Gdy zaktualizujesz pola podróży, takie jak liczba pasażerów czy miejsca docelowego.

Aby zaktualizować podróż, wyślij żądanie przy użyciu gRPC i REST.

  • Metoda UpdateTrip(): gRPC lub REST
  • Komunikat UpdateTripRequest: tylko gRPC

Użyj odpowiednich danych logowania konta usługi projektu jako: opisane w artykule Fleet Engine: role konta usługi.

Zaktualizuj pola podróży

Możesz zaktualizować dowolne z pól podróży opisanych w sekcji Pola podróży w sekcji Create (Tworzenie) podróż w jedną stronę. Na przykład po utworzeniu podróży często ćwicz, aby najpierw znaleźć pojazd, a następnie zaktualizować pole vehicle_id podróży na powiązać go z pojazdem, po którym odbędzie się podróż.

Użyj masek pól

Maski pól umożliwiają wywołującym interfejs API listę pól, które powinny zostać wysłane przez żądanie lub zaktualizuj. za pomocą maski FieldMask, pozwala uniknąć zbędnych prac 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ć podróż za pomocą identyfikatora pojazdu, aby usługa Fleet Engine mogła śledzić pojazdem na trasie. Następujący przykładowy kod pokazuje, jak zaktualizować podróż o 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

Określasz stan podróży, używając jednego z wyliczeń TripStatus . gdy zmienia się stan podróży; na przykład od ENROUTE_TO_PICKUP do ARRIVED_AT_PICKUP, aktualizujesz stan podróży we Fleet Engine. Podróż cykl życia zawsze zaczyna się od wartości stanu NEW i kończy wartością COMPLETE lub CANCELED.

Przykładowa aktualizacja podróży

Poniższy przykład ilustruje, jak zaktualizować stan podróży dla każdej z odpowiedzi 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;
}

Inne przykłady aktualizowania podróży znajdziesz w sekcji Inne rodzaje podróży .

Obsługa błędów związanych z podróżą

Podczas aktualizowania lub wyszukiwania już istniejących podróży możesz natrafić na DEADLINE_EXCEEDED – w którym to przypadku stan Fleet Engine jest nieznany. Aby to sprawdzić, najpierw zadzwoń ponownie pod numer CreateTrip, używając tego samego identyfikatora podróży które chcą zaktualizować lub monitorować. Powinien zostać zwrócony kod 201 (CREATED) albo 409 (CONFLICT). W tym drugim przypadku poprzednie żądanie zostało zrealizowane, zanim DEADLINE_EXCEEDED

Listę błędów sieci znajdziesz w pakiecie SDK dla klientów na Androida lub iOS:

Co dalej?