Reisen aktualisieren und ihren Bundesstaat verwalten

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

Grundlagen zu Updates zu 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 Wegpunkte durchquert.
  • Wenn Sie Fahrtfelder aktualisieren, z. B. die Anzahl der Fahrgäste und den Abholpunkt.

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

  • UpdateTrip()-Methode: gRPC oder REST
  • UpdateTripRequest message: Nur gRPC

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

Fahrtfelder aktualisieren

Sie können die in Fahrtfelder beschriebenen Felder für Fahrten aktualisieren, die unter Eine Fahrt mit einem einzelnen Ziel erstellen beschrieben sind. Wenn Sie beispielsweise eine Fahrt erstellt haben, suchen Sie zuerst ein Fahrzeug und aktualisieren dann das Feld „Fahrt“ vehicle_id, um es mit dem Fahrzeug zu verknüpfen, das die Fahrt ausführen wird.

Feldmasken verwenden

Mit Feldmasken können API-Aufrufer die Felder auflisten, die eine Anfrage aktualisieren oder aktualisieren soll. Durch die Verwendung einer FieldMask werden unnötige Arbeiten vermieden und die Leistung verbessert. In der Fleet Engine werden Feldmasken verwendet, 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 die Fahrt mit einer Fahrzeug-ID aktualisiert wird.

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

Der Status einer Fahrt wird mit einem der TripStatus-Aufzählungswerte angegeben. Wenn sich der Status einer Fahrt ändert, z. B. von ENROUTE_TO_PICKUP in ARRIVED_AT_PICKUP, aktualisieren Sie den Fahrtstatus in der 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 direkt aufeinanderfolgende Fahrt in 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 zum Aktualisieren von Fahrten finden Sie im Abschnitt Weitere Fahrttypen.

Fehler bei Fahrten verarbeiten

Beim Aktualisieren oder Suchen vorhandener Fahrten kann der Fehler DEADLINE_EXCEEDED auftreten. In diesem Fall ist der Status von Fleet Engine unbekannt. Rufen Sie CreateTrip zuerst 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.

Liste der Netzwerkfehler im Consumer SDK, entweder für Android oder iOS

Nächste Schritte