Modifier des trajets et gérer leur état

Ce document explique comment mettre à jour un trajet et gérer son état, ce qui implique l’utilisation d’un masque de champ pour définir les champs pertinents pour un trajet. Nous partons du principe que ont configuré Fleet Engine comme décrit sur ce site et travaillent avec un véhicule attribué à un trajet.

Principes de base des mises à jour des trajets

Votre système utilise Fleet Engine pour mettre à jour un trajet dans les situations suivantes:

  • Lorsque vous attribuez un véhicule à un trajet après sa création.
  • Lorsque l'état du trajet change par exemple, lorsque le véhicule passe via des points de cheminement.
  • Lorsque vous modifiez les champs d'un trajet, tels que le nombre de passagers et le nombre point d'arrivée.

Pour mettre à jour un trajet, envoyez une requête à l'aide de gRPC et REST.

  • Méthode UpdateTrip(): gRPC ou REST
  • Message UpdateTripRequest: gRPC uniquement

Utilisez les identifiants appropriés pour le compte de service de votre projet en tant que décrit dans la section Fleet Engine: Rôles associés aux comptes de service.

Mettre à jour les champs du trajet

Vous pouvez mettre à jour tous les champs de trajet décrits dans la section Champs de trajet de la section Créer un trajet à destination unique. Par exemple, après avoir créé un voyage, entraînez-vous à trouver d'abord un véhicule, puis mettez à jour le champ vehicle_id du trajet pour l'associer au véhicule qui effectuera le trajet.

Utiliser des masques de champ

Les masques de champ permettent aux appelants d'API de lister les champs qu'une requête doit ou une mise à jour. Utiliser un FieldMask évite les tâches inutiles et améliore les performances. Fleet Engine utilise des masques de champ permettant de mettre à jour les champs de toutes les ressources.

Mettez à jour le trajet avec l'ID du véhicule

Vous devez configurer un trajet avec un identifiant de véhicule pour que Fleet Engine puisse suivre le véhicule sur son trajet. L'exemple de code suivant montre comment mettez à jour le trajet avec un ID de véhicule.

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

Gérer l'état des trajets

Vous spécifiez l'état d'un trajet à l'aide de l'une des énumérations TripStatus. valeurs. Lorsque l'état d'un trajet change : par exemple de ENROUTE_TO_PICKUP à ARRIVED_AT_PICKUP, vous mettez à jour l'état du trajet dans Fleet Engine. Le voyage le cycle de vie commence toujours par une valeur d'état de NEW et se termine par la valeur COMPLETE ou CANCELED.

Exemple de mise à jour de trajet

Vous trouverez ci-dessous la procédure à suivre pour mettre à jour l'état d'un trajet dans 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;
}

Vous trouverez d'autres exemples de modification de trajets dans la section Autres types de trajets .

Gérer les erreurs de trajet

Lors de la mise à jour ou de la recherche de trajets existants, vous pouvez être amené Erreur DEADLINE_EXCEEDED, auquel cas l'état de Fleet Engine est inconnu. Pour enquêter sur ce problème, commencez par appeler de nouveau le CreateTrip en utilisant le même identifiant de trajet que que vous essayez de mettre à jour ou de surveiller. Le code 201 (CREATED) doit s'afficher 409 (CONFLICT). Dans ce dernier cas, la requête précédente a abouti avant DEADLINE_EXCEEDED

Consultez la liste des erreurs réseau dans le SDK grand public, pour Android ou iOS

Étape suivante