Reisen aktualisieren und ihren Bundesstaat verwalten

In diesem Dokument wird beschrieben, wie Sie eine Fahrt aktualisieren und ihren Status verwalten. beinhaltet die Verwendung einer Feldmaske, um relevante Felder für eine Fahrt festzulegen. Dabei wird davon ausgegangen, Fleet Engine wie auf dieser Website beschrieben eingerichtet haben und mit einem das einer Fahrt zugewiesen ist.

Grundlagen zur Aktualisierung von Fahrten

Ihr System verwendet Fleet Engine, um eine Fahrt in den folgenden Situationen zu aktualisieren:

  • Wenn ein Fahrzeug einer Fahrt zugewiesen wird, nachdem es erstellt wurde.
  • Wenn sich der Status der Fahrt ändert: z. B. wenn das Fahrzeug über Wegpunkte.
  • Wenn Sie Fahrtfelder aktualisieren, z. B. die Anzahl der Fahrgäste und die die eine Abgabestelle erreicht.

Senden Sie eine Anfrage mit gRPC und REST, um eine Fahrt zu aktualisieren.

  • UpdateTrip()-Methode: gRPC oder REST
  • UpdateTripRequest-Nachricht: nur gRPC

Verwenden Sie die entsprechenden Anmeldedaten für das Dienstkonto Ihres Projekts als unter Fleet Engine: Dienstkontorollen beschrieben.

Fahrtfelder aktualisieren

Sie können alle Reisefelder aktualisieren, die in Reisefeldern in Erstellen eine Reise mit einem einzelnen Ziel. Nachdem Sie eine Fahrt erstellt haben, Üben Sie, um zuerst ein Fahrzeug zu finden und dann das Feld vehicle_id für die Fahrt in mit dem Fahrzeug verknüpfen, das die Fahrt durchführt.

Feldmasken verwenden

Mit Feldmasken können API-Aufrufer die Felder auflisten, die eine Anfrage enthalten soll bzw. aktualisieren. FieldMask verwenden vermeidet unnötige Arbeiten und verbessert die Leistung. Fleet Engine verwendet Feldmasken zum Aktualisieren von Feldern in allen Ressourcen.

Fahrt mit der Fahrzeug-ID aktualisieren

Sie müssen eine Fahrt mit einer Fahrzeug-ID konfigurieren, damit die Fleet Engine des Fahrzeugs auf seiner Route. Im folgenden Codebeispiel wird veranschaulicht, die Fahrt mit einer Fahrzeug-ID aktualisieren.

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;
}

Fahrtstatus für Fahrten verwalten

Sie geben den Status einer Fahrt mit einer der TripStatus-Enumerationen an Werte. Wenn sich der Status einer Fahrt ändert: z. B. von ENROUTE_TO_PICKUP nach ARRIVED_AT_PICKUP, aktualisieren Sie den Fahrtstatus in Fleet Engine. Die Fahrt Lebenszyklus beginnt immer mit dem Statuswert NEW und endet mit dem Wert entweder COMPLETE oder CANCELED.

Beispiel für eine Fahrtaktualisierung

Im Folgenden wird gezeigt, wie der Fahrtstatus für eine direkte Fleet Engine ein.

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;
}

Weitere Beispiele für die Aktualisierung von Fahrten finden Sie unter Andere Reisetypen. .

Fehler bei Fahrten verarbeiten

Beim Aktualisieren oder Suchen vorhandener Fahrten kann der Fall DEADLINE_EXCEEDED-Fehler. In diesem Fall ist der Status von Fleet Engine unbekannt. Um das Problem zu untersuchen, rufen Sie zuerst CreateTrip noch einmal auf und verwenden Sie dabei dieselbe Fahrt-ID zu aktualisieren oder zu überwachen. Es sollte entweder 201 (CREATED) oder 409 (CONFLICT). Im letzteren Fall war die vorherige Anfrage erfolgreich, bevor DEADLINE_EXCEEDED

Sehen Sie sich die Liste der Netzwerkfehler im Consumer SDK an, entweder für Android oder iOS:

Nächste Schritte