Ce document part du principe que vous savez créer et utiliser des tâches. Il fournit des exemples spécifiques sur la façon de finaliser les tâches d'expédition :
Fermer une tâche : la fermeture d'une tâche d'expédition fait passer son état à
CLOSEDet indique qu'elle n'est plus active.Définir le résultat de la tâche : une fois une tâche fermée, vous la finalisez en définissant son résultat sur
SUCCEEDEDouFAILED. 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 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 :
- Mettre à jour l'état de l'arrêt pour le véhicule. Vous supprimez l'arrêt du véhicule, ce qui ferme toutes les tâches associées à l'arrêt. Pour en savoir plus, consultez Mettre à jour l'état de l'arrêt.
- Supprimer 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 que la tâche fermée ne fasse plus partie de la liste. Consultez Mettre à jour l'ordre des tâches dans Mettre à jour les tâches.
- Définir l'état de la tâche sur
CLOSED. Cela ne peut être effectué que sur les tâches non attribuées à des véhicules. Cette section présente cette approche.
Une fois que vous avez fermé une tâche, vous ne pouvez plus la rouvrir.
La fermeture d'une tâche n'indique pas si elle a réussi ou échoué. Elle 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âche pour la fermeture des tâches
Cette section décrit les champs obligatoires à définir lors de la fermeture 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 l'état d'une tâche non attribuée sur "fermé", 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 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 de compte de service et jetons Web JSON.
- Vous devez inclure une entité
Taskdans 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")"
}
EOMDé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 fermées sur SUCCEEDED ou FAILED. Une tâche doit être fermée avant que vous puissiez 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 respecte 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 le dernier emplacement connu 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 est disponible pour que vous puissiez 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 que celle qui définit le résultat de la tâche.
- Mettez-les à jour ultérieurement, après avoir défini le résultat de la tâche.
- Modifiez-les à nouveau après les avoir 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
SUCCEEDEDouFAILED. - Vous ne pouvez pas définir d'emplacement ni d'heure de résultat de tâche pour les tâches sans résultat défini.
Champs de tâche pour la définition du résultat
Cette section décrit les champs obligatoires et facultatifs à définir lors de la définition du résultat d'une 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 facultatif | Valeur |
|---|---|
taskOutcomeLocation |
L'emplacement où la tâche a été effectuée. Si elle n'est pas définie, Fleet Engine utilise par défaut le dernier emplacement du véhicule. |
taskOutcomeTime |
L'horodatage de la fin de la tâche. |
Exemples de résultats de tâches
L'exemple suivant montre comment utiliser la bibliothèque Java gRPC et un appel HTTP
REST à UpdateTask pour définir le résultat d'une tâche sur SUCCEEDED et définir l'
emplacement 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 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 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