Finaliser les tâches

Ce document part du principe que vous savez comment créer et utiliser des tâches. Il fournit des exemples spécifiques pour finaliser les tâches d'expédition :

  • Fermer une tâche : la fermeture d'une tâche d'expédition définit son état sur CLOSED et indique que cette tâche n'est plus active.

  • Définir le résultat de la tâche : une fois la tâche fermée, finalisez-la en définissant son résultat sur SUCCEEDED ou FAILED. Il s'agit d'une étape importante pour finaliser une tâche, afin d'afficher le résultat de la livraison dans le partage de trajet et d'assurer 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 pour le véhicule. Vous retirez le colis du véhicule, ce qui clôture toutes les tâches associées à l'arrêt. Pour en savoir plus, consultez Mettre à jour l'état d'un arrêt.
  • 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 sans la tâche fermée. Consultez "Modifier l'ordre des tâches" dans Modifier des tâches.
  • Définissez l'état de la tâche sur CLOSED. Cette opération n'est possible que pour les tâches non attribuées à des véhicules. Cette section illustre cette approche.

Une fois une tâche fermée, vous ne pouvez plus la rouvrir.

La clôture d'une tâche n'indique pas si elle a réussi ou échoué. Cela indique que la tâche n'est plus considérée comme en cours. Pour indiquer le résultat réel d'une tâche et l'afficher à des fins de suivi de flotte et de partage de trajet, vous devez indiquer le résultat réel d'une tâche. Consultez Définir le résultat de la tâche ci-dessous.

Champs de tâches pour la clôture des tâches

Cette section décrit les champs obligatoires à définir lors de la clôture d'une 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 l'état "Fermée", soit dans gRPC, soit à l'aide d'un appel de requête HTTP REST à 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> est un identifiant unique pour la tâche.
  • L'en-tête de la 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 Rôles du 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, définissez le résultat des tâches clôturées sur SUCCEEDED ou FAILED. Vous devez fermer une tâche 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 informations supplémentaires sur le résultat de la tâche. Vous pouvez les définir directement, et Fleet Engine respectera vos paramètres :

  • Emplacement du résultat de la tâche : Fleet Engine renseigne automatiquement l'emplacement du résultat de la tâche avec la dernière position connue du véhicule. Vous pouvez fournir cette information à la place si vous le souhaitez.
  • Heure du résultat de la tâche : Fleet Engine ne renseigne pas ce champ, mais vous pouvez le définir.

Vous pouvez utiliser l'une des approches suivantes pour définir task_outcome_location et task_outcome_time :

  • Mettez-les à jour dans la même requête qui définit le résultat de la tâche.
  • Mettez-les à jour plus tard, une fois que vous avez défini le résultat de la tâche.
  • les modifier à 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 a été défini sur SUCCEEDED ou FAILED.
  • Vous ne pouvez pas définir de lieu ni d'heure de résultat pour les tâches sans résultat défini.

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

Cette section décrit les champs obligatoires et facultatifs à définir lorsque vous définissez un résultat de 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 Lieu où la tâche a été effectuée. Si ce champ n'est pas défini, Fleet Engine utilise par défaut la dernière position du véhicule.
taskOutcomeTime Horodatage 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 appel HTTP 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

  • <id> est un identifiant unique pour la tâche.
  • L'en-tête de la 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 Rôles du 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