Actualiza los viajes y administra su estado

En este documento, se describe cómo actualizar un viaje y administrar su estado, lo que implica el uso de una máscara de campo para configurar los campos relevantes de un viaje. Se supone que configuraron Fleet Engine como se describe en este sitio y están trabajando con un vehículo asignado a un viaje.

Conceptos básicos sobre la actualización de viaje

Tu sistema usa Fleet Engine para actualizar un viaje en las siguientes situaciones:

  • Cuando asignas un vehículo a un viaje después de su creación.
  • Cuando cambia el estado del viaje. por ejemplo, cuando el vehículo pasa a través de puntos de referencia.
  • Cuando actualizas los campos de viajes, como la cantidad de pasajeros y las de destino.

Para actualizar un viaje, envía una solicitud con gRPC y REST.

  • Método UpdateTrip(): gRPC o REST
  • Mensaje UpdateTripRequest: Solo gRPC

Usa las credenciales apropiadas para la cuenta de servicio de tu proyecto como que se describe en Fleet Engine: Roles de cuenta de servicio.

Actualizar los campos de viaje

Puedes actualizar cualquiera de los campos de viaje descritos en Campos de viaje en Crear un solo viaje de destino. Por ejemplo, después de crear un viaje, es una frecuencia práctica para encontrar primero un vehículo y, luego, actualizar el campo vehicle_id del viaje a asociarlo con el vehículo que realizará el viaje.

Usar máscaras de campo

Las máscaras de campo permiten que los llamadores de la API enumeren los campos que una solicitud debe o actualizar. Con una FieldMask evita trabajos innecesarios y mejora el rendimiento. Fleet Engine usa máscaras de campo para actualizar campos en todos los recursos.

Actualiza el viaje con el ID de vehículo.

Debes configurar un viaje con un ID de vehículo para que Fleet Engine pueda hacer un seguimiento el vehículo a lo largo de su ruta. La siguiente muestra de código demuestra cómo actualiza el viaje con un ID de vehículo.

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

Cómo administrar el estado de los viajes

Puedes especificar el estado de un viaje usando una de las enumeraciones TripStatus. de salida. Cuando cambia el estado de un viaje. por ejemplo, de ENROUTE_TO_PICKUP a ARRIVED_AT_PICKUP, actualizas el estado del viaje en Fleet Engine. El viaje el ciclo de vida siempre comienza con un valor de estado de NEW y termina con un valor de COMPLETE o CANCELED.

Ejemplo de actualización de viaje

A continuación, se muestra cómo actualizar el estado de viaje para una viaje en 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;
}

Puedes ver otros ejemplos de cómo actualizar viajes en la sección Otros tipos de viaje. sección.

Maneja errores de viajes

Cuando actualices o busques viajes existentes, es posible que encuentres el Error DEADLINE_EXCEEDED, en cuyo caso se desconoce el estado de Fleet Engine. Para investigar este problema, primero vuelve a llamar a CreateTrip con el mismo ID de viaje que intentan actualizar o supervisar. Esto debería mostrar un error 201 (CREATED) o 409 (CONFLICTO). En este último caso, la solicitud anterior se realizó correctamente antes de DEADLINE_EXCEEDED

Consulta la lista de errores de red en el SDK para consumidores, ya sea para Android o iOS.

¿Qué sigue?