Finaliser les tâches

Dans ce document, nous partons du principe que vous savez comment créer et utiliser des tâches. Il fournit Exemples spécifiques pour finaliser les tâches d'expédition comme suit:

  • Fermer une tâche: la fermeture d'une tâche d'envoi passe à l'état CLOSED, et indique que la tâche n'est plus active.

  • Définissez le résultat de la tâche: une fois la tâche fermée, vous la finalisez en en définissant son résultat sur SUCCEEDED ou FAILED. Il s'agit d'un partie de la finalisation d'une tâche afin de montrer le résultat de la livraison dans le parcours le partage et de garantir une facturation correcte pour le service Fleet Engine.

Fermer une tâche

Vous pouvez fermer une tâche de différentes manières:

  • Mettez à jour l'état de l'arrêt du véhicule. Vous supprimez l'arrêt du véhicule, ce qui ferme toutes les tâches associées à l'arrêt. Voir Mettez à jour l'état de l'arrêt pour en savoir plus.
  • Supprimez la tâche de la liste des arrêts du véhicule. Cela implique de mettre à jour la liste des tâches pour l'arrêt, mais avec la tâche fermée, pas plus longue de la liste. Consultez la section "Mettre à jour l'ordre des tâches" dans Mettre à jour les tâches.
  • Définissez l'état de la tâche sur CLOSED. Cela ne peut être fait que sur des tâches attribués aux véhicules. Cette section présente cette approche.

Une fois que vous avez fermé une tâche, vous ne pouvez pas la rouvrir.

La fermeture d'une tâche n'indique pas sa réussite ou son échec. Elle indique que la tâche n’est plus considérée comme en cours. Afin d'indiquer la le résultat réel d'une tâche et de les afficher pour le suivi de flotte et de partage du parcours, vous devez indiquer le résultat réel d'une tâche. Voir Définissez le résultat de la tâche ci-dessous.

Champs de tâche pour fermer les tâches

Cette section décrit les champs obligatoires à définir lors de la fermeture d'un tâche. Fleet Engine ignore tous les autres champs de l'entité pour la mise à jour.

Champ obligatoire Valeur
state State.CLOSED

Fermer une tâche directement

Les exemples suivants montrent comment définir une tâche non attribuée sur un état fermé, soit dans gRPC, soit à l'aide d'un appel de requête REST HTTP à 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

  • &lt;id&gt; est un identifiant unique pour la tâche.
  • L'en-tête de requête doit contenir un champ Authorization avec la valeur Bearer <token>, où <token> est émis par votre serveur conformément aux consignes décrites dans la section Rôles de compte de service et Jetons Web JSON :
  • Vous devez inclure une entité Task dans le corps de la requête.

Exemple de commande curl :

 # 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

Définir le résultat de la tâche

Pour indiquer le résultat réel d'une tâche, vous définissez le résultat des tâches fermées à SUCCEEDED ou FAILED. Une tâche doit être fermée avant de définir son résultat. Fleet Engine ne facture que les tâches de livraison dont l'état est SUCCEEDED

Détails du résultat de la tâche

Les tâches fournissent également des détails supplémentaires sur le résultat de la tâche. Vous pouvez définir ces et Fleet Engine respecte vos paramètres:

  • Emplacement du résultat de la tâche: Fleet Engine remplit automatiquement la tâche l'emplacement du résultat avec la dernière position connue du véhicule. Vous pouvez fournir cette si vous préférez.
  • Délai de résultat de la tâche: Fleet Engine ne remplit pas ce champ, mais l'est que vous pouvez définir.

Vous pouvez utiliser l'une des approches suivantes pour configurer task_outcome_location et task_outcome_time:

  • Mettez-les à jour dans la même requête que celle qui définit le résultat de la tâche.
  • Mettez-les à jour plus tard, après avoir défini le résultat de la tâche.
  • Modifiez-les à nouveau une fois qu'ils ont été définis.

Fleet Engine empêche les mises à jour suivantes liées aux résultats des tâches:

  • Vous ne pouvez pas modifier le résultat d'une tâche une fois qu'il est défini sur SUCCEEDED ou FAILED
  • Vous ne pouvez pas définir de lieu de résultat ni d'heure de résultat pour les tâches sans un résultat défini.

Champs de tâche pour définir le résultat

Cette section décrit les champs obligatoires et facultatifs à définir lorsque vous définissez un le résultat de la tâche. Fleet Engine ignore les autres champs de l'entité pour la mise à jour.

Champ obligatoire Valeur
taskOutcome Outcome.SUCCEEDED ou Outcome.FAILED

Champ facultatifValeur
taskOutcomeLocation Emplacement où la tâche a été effectuée. Si ce champ n'est pas défini, Fleet Engine la valeur par défaut est la dernière position du véhicule.
taskOutcomeTime Code temporel de la fin de la tâche.

Exemples de résultats de tâches

L'exemple suivant montre comment utiliser la bibliothèque gRPC Java et un objet HTTP appel REST à UpdateTask pour définir le résultat d'une tâche sur SUCCEEDED et définir le lieu où la tâche a été effectuée.

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; est un identifiant unique pour la tâche.
  • L'en-tête de requête doit contenir un champ Authorization avec la valeur Bearer <token>, où <token> est émis par votre serveur conformément aux consignes décrites dans la section Rôles de compte de service et Jetons Web JSON :
  • Le corps de la requête doit contenir une entité 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

Étape suivante