Finaliza tareas

En este documento, se asume que sabes crear y usar tareas. Proporciona ejemplos específicos para finalizar las tareas de envío de la siguiente manera:

  • Cerrar una tarea: Al cerrar una tarea de envío, el estado cambia a CLOSED. indica que esa tarea ya no está activa.

  • Definir el resultado de la tarea: Una vez que se cierra una tarea, puedes finalizarla. y establece su resultado en SUCCEEDED o FAILED. Este es un aspecto importante parte de finalizar una tarea para mostrar el resultado de la entrega en el recorrido y garantizar la facturación correcta del servicio de Fleet Engine.

Cómo cerrar una tarea

Puedes cerrar una tarea de las siguientes maneras:

  • Actualiza el estado de la parada del vehículo. Quitas la parada del vehículo, lo que, a su vez, cierra todas las tareas asociadas con ella. Consulta Actualiza el estado de parada para obtener más detalles.
  • Quita la tarea de la lista de paradas del vehículo. Esto implica actualizar la lista de tareas para la parada, pero con la tarea cerrada forman parte de la lista. Consulta Cómo actualizar el orden de las tareas en Cómo actualizar tareas.
  • Establece el estado de la tarea en CLOSED. Esto solo puede hacerse en tareas que no asignados a los vehículos. En esta sección, se muestra este enfoque.

Una vez que cierres una tarea, no podrás volver a abrirla.

El cierre de una tarea no indica su éxito o fracaso. Indica que la tarea ya no se considera en curso. Para indicar el resultado real de una tarea y que se muestre para el seguimiento de flota y para compartir recorridos, debes indicar el resultado real de una tarea. Consulta Establece el resultado de la tarea a continuación.

Campos de tareas para cerrar tareas

En esta sección, se documentan los campos obligatorios que se deben establecer cuando se cierra una tarea. El motor de flota ignora todos los demás campos de la entidad para la actualización.

Campo obligatorio Valor
state State.CLOSED

Cómo cerrar una tarea directamente

En los siguientes ejemplos, se muestra cómo establecer una tarea sin asignar en un estado cerrado, ya sea en gRPC o con una llamada de solicitud REST HTTP a UpdateTask

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setState(Task.State.CLOSED) // You can only directly CLOSE a
   .build();                    // task that is NOT assigned to a vehicle.

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } catch (StatusRuntimeException e) {
   Status s = e.getStatus();
   switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
   }
   return;
 }

REST

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=state

  • <id> es un identificador único para la tarea.
  • El encabezado de la solicitud debe contener un campo Authorization con el valor Bearer <token>, donde tu servidor emite <token>. según los lineamientos descritos en Roles de cuentas de servicio y Tokens web JSON:
  • Debes incluir una entidad Task en el cuerpo de la solicitud

Comando curl de ejemplo

 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "state": "CLOSED",
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
 }
 EOM

Establece el resultado de la tarea.

Para indicar el resultado real de una tarea, establece el resultado de las tareas cerradas a SUCCEEDED o FAILED. Se debe cerrar una tarea antes de establecer su resultado. Fleet Engine solo cobra por las tareas de entrega con el estado de SUCCEEDED

Detalles del resultado de la tarea

Las tareas también proporcionan detalles adicionales sobre el resultado de la tarea. Puedes establecer estas directamente y Fleet Engine respeta tu configuración:

  • Ubicación del resultado de la tarea: Fleet Engine completa la tarea automáticamente la ubicación de salida con la última ubicación conocida del vehículo. Puedes proporcionar en su lugar, si así lo prefieres.
  • Hora de resultado de la tarea: Fleet Engine no completa este campo, pero disponibles para que establezcas.

Puedes usar cualquiera de los siguientes enfoques para configurar task_outcome_location y task_outcome_time:

  • Actualízalos en la misma solicitud que establece el resultado de la tarea.
  • Actualízalos más tarde, después de haber establecido el resultado de la tarea.
  • Vuelve a modificarlos después de configurarlos.

Fleet Engine evita las siguientes actualizaciones relacionadas con los resultados de las tareas:

  • No puedes modificar el resultado de una tarea una vez que se establece en SUCCEEDED o FAILED.
  • No puedes establecer la ubicación del resultado de la tarea ni el tiempo de resultado para las tareas que no tienen un resultado fijo.

Campos de tareas para establecer el resultado

Esta sección documenta los campos obligatorios y opcionales que se deben configurar al configurar una el resultado de la tarea. Fleet Engine ignora otros campos de la entidad para la actualización.

Campo obligatorio Valor
taskOutcome Outcome.SUCCEEDED o Outcome.FAILED

Campo opcionalValor
taskOutcomeLocation La ubicación donde se completó la tarea. Si no se configura, Fleet Engine usa de forma predeterminada la última ubicación del vehículo.
taskOutcomeTime La marca de tiempo de cuando se completó la tarea.

Ejemplos de resultados de tareas

En el siguiente ejemplo, se muestra cómo usar la biblioteca de gRPC de Java y una llamada HTTP REST a UpdateTask para establecer un resultado de tarea en SUCCEEDED y configurar la ubicación en la que se completó la tarea.

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setTaskOutcome(TaskOutcome.SUCCEEDED)
   .setTaskOutcomeTime(now())
   .setTaskOutcomeLocation(               // Grand Indonesia East Mall
     LocationInfo.newBuilder().setPoint(
       LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
   .build();

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } catch (StatusRuntimeException e) {
   Status s = e.getStatus();
   switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
   }
   return;
 }

REST

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation

  • &lt;id&gt; es un identificador único para la tarea.
  • El encabezado de la solicitud debe contener un campo Authorization con el valor Bearer <token>, donde tu servidor emite <token>. según los lineamientos descritos en Roles de cuentas de servicio y Tokens web JSON:
  • El cuerpo de la solicitud debe contener una entidad Task.
 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
   "taskOutcomeLocation": {
     "point": {
       "latitude": -6.195139,
       "longitude": 106.820826
     }
   }
 }
 EOM

¿Qué sigue?