Reisen aktualisieren und ihren Bundesstaat verwalten

In diesem Dokument wird beschrieben, wie Sie eine Fahrt aktualisieren und ihren Status verwalten. Dazu müssen Sie eine Feldmaske verwenden, um die relevanten Felder für eine Fahrt festzulegen. Es wird davon ausgegangen, dass Sie die Fleet Engine wie auf dieser Website beschrieben eingerichtet haben und mit einem Fahrzeug arbeiten, das einer Fahrt zugewiesen ist.

Grundlagen zu Fahrtaktualisierungen

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

  • Wenn Sie einer Fahrt nach dem Erstellen ein Fahrzeug zuweisen.
  • Wenn sich der Status der Fahrt ändert, z. B. wenn das Fahrzeug Wegpunkte passiert.
  • Wenn Sie Fahrtfelder wie die Anzahl der Fahrgäste und den Ausstiegspunkt aktualisieren.

Wenn Sie eine Fahrt aktualisieren möchten, senden Sie eine Anfrage entweder über gRPC oder REST.

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

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

Fahrtfelder aktualisieren

Sie können alle Fahrtfelder aktualisieren, die unter Fahrtfelder im Abschnitt Fahrt mit einem Ziel erstellen beschrieben sind. Nachdem Sie eine Fahrt erstellt haben, ist es beispielsweise üblich, zuerst ein Fahrzeug zu finden und dann das Feld vehicle_id der Fahrt zu aktualisieren, um es mit dem Fahrzeug zu verknüpfen, das die Fahrt ausführt.

Feldmasken verwenden

Mit Feldmasken können API-Aufrufer die Felder auflisten, die in einer Anfrage enthalten sein oder aktualisiert werden sollen. Durch die Verwendung einer FieldMask werden unnötige Arbeiten vermieden und die Leistung verbessert. Die Fleet Engine verwendet Feldmasken, um Felder in allen Ressourcen zu aktualisieren.

Fahrt mit der Fahrzeug-ID aktualisieren

Sie müssen eine Fahrt mit einer Fahrzeug-ID konfigurieren, damit die Fleet Engine das Fahrzeug auf seiner Route verfolgen kann. Das folgende Codebeispiel zeigt, wie Sie 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 einem der TripStatus-Aufzählungswerte an. Wenn sich der Status einer Fahrt ändert, z. B. von ENROUTE_TO_PICKUP zu ARRIVED_AT_PICKUP, aktualisieren Sie den Fahrtstatus in Fleet Engine. Der Lebenszyklus einer Fahrt beginnt immer mit dem Statuswert NEW und endet mit dem Wert COMPLETE oder CANCELED.

Beispiel für eine Fahrtaktualisierung

Im Folgenden wird gezeigt, wie Sie den Fahrtstatus für eine Anschlussfahrt in der Fleet Engine 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);

// 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 im Abschnitt Andere Fahrtentypen.

Fahrtfehler beheben

Beim Aktualisieren oder Suchen vorhandener Fahrten kann ein DEADLINE_EXCEEDED-Fehler auftreten. In diesem Fall ist der Status von Fleet Engine unbekannt. Rufen Sie zuerst CreateTrip noch einmal mit derselben Fahrt-ID auf, die Sie aktualisieren oder beobachten möchten. Es sollte entweder 201 (CREATED) oder 409 (CONFLICT) zurückgegeben werden. Im letzteren Fall war die vorherige Anfrage vor DEADLINE_EXCEEDED erfolgreich.

Eine Liste der Netzwerkfehler im Consumer SDK finden Sie entweder für Android oder für iOS.

Nächste Schritte