Ce document suppose que vous connaissez les éléments suivants :
- Créer des tâches d'expédition
- Présentation des tâches planifiées, qui décrit en détail la relation entre les tâches, les arrêts et les véhicules.
Dans un scénario de livraison réel, les entreprises attribuent des tâches d'expédition aux chauffeurs, qui utilisent ensuite un véhicule pour les livrer au destinataire à un emplacement planifié, tel qu'un domicile ou une salle de livraison dans un ensemble de bâtiments. Pour la modéliser dans Fleet Engine, vous devez créer une tâche et envoyer une requête de mise à jour du véhicule de livraison, qui met ensuite à jour l'entité du véhicule avec une liste des arrêts à parcourir. Vous attribuez à chaque arrêt une liste de tâches à effectuer.
Vous pouvez mettre à jour les tâches du véhicule à tout moment, mais généralement aux fins suivantes:
- Planifier des tâches pour un véhicule Pour ce faire, vous pouvez envoyer une requête de mise à jour qui ajoute un arrêt au véhicule ou une requête de mise à jour qui ajoute une tâche à un arrêt existant.
- Modifiez l'ordre des tâches existantes associées à un arrêt de véhicule donné.
- Modifiez le lieu d'exécution de la tâche. Par défaut, Fleet Engine marque l'emplacement d'exécution de la tâche au même endroit que l'arrêt du véhicule associé à la tâche. Si vous préférez, vous pouvez spécifier des emplacements spécifiques pour des tâches individuelles. Par exemple, vous pouvez avoir un arrêt de véhicule dans un vaste complexe permettant de livrer un certain nombre de colis, chacun étant associé à une salle de distribution de courrier spécifique.
- Fermez toutes les tâches précédemment attribuées pour les retirer de l'ordre mis à jour. Pour en savoir plus, consultez Finaliser les tâches.
Planifier ou modifier des tâches de diffusion
Vous pouvez planifier ou modifier les tâches attribuées à un véhicule à partir d'un environnement de serveur ou à l'aide du SDK Driver si vous permettez au conducteur de gérer les tâches à l'aide d'un appareil vérifié. N'utilisez qu'une seule méthode pour éviter les conditions de concurrence et conserver une seule source de vérité.
Pour passer d'un véhicule à un autre, fermez la tâche d'origine et recréez-la avant de l'attribuer à un autre véhicule. Si vous modifiez un véhicule de livraison pour inclure une tâche déjà attribuée à un autre véhicule, un message d'erreur s'affiche.
Champs obligatoires pour mettre à jour des tâches
Cette section décrit les champs obligatoires à définir lors de la mise à jour d'une tâche pour un véhicule. Aucun champ facultatif n'est fourni. Le moteur Fleet ignore tous les autres champs de l'entité pour la mise à jour.
Champ obligatoire | Valeur |
---|---|
remainingVehicleJourneySegments |
Une liste de segments de parcours pour les tâches dans l'ordre dans lequel elles doivent être exécutées. La première tâche de la liste est exécutée en premier. |
remainingVehicleJourneySegments[i].stop |
Arrêt de la tâche i dans la liste. |
remainingVehicleJourneySegments[i].stop.plannedLocation |
Emplacement prévu de l'arrêt. |
remainingVehicleJourneySegments[i].stop.tasks |
Liste des tâches à effectuer à cet arrêt de véhicule. |
remainingVehicleJourneySegments[i].stop.state |
State.NEW |
Exemple d'attribution de tâches
Les exemples suivants montrent comment utiliser la bibliothèque Java gRPC et un appel REST HTTP à UpdateDeliveryVehicle
pour ajouter deux nouvelles tâches au véhicule.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
static final String TASK1_ID = "task-756390";
static final String TASK2_ID = "task-849263";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // 1st stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.7749)
.setLongitude(122.4194)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
.setState(VehicleStop.State.NEW)))
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // 2nd stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.3382)
.setLongitude(121.8863)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
.setState(VehicleStop.State.NEW)))
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryRequest =
UpdateDeliveryVehicleRequest.newBuilder() // No need for the header
.setName(vehicleName)
.setDeliveryVehicle(deliveryVehicle)
.setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
.build();
try {
DeliveryVehicle updatedDeliveryVehicle =
deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} 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>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
<id> est l'identifiant unique d'un véhicule de livraison de votre parc pour lequel vous souhaitez mettre à jour l'ordre des tâches. Il s'agit de l'identifiant que vous avez spécifié lors de la création du véhicule.
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 de compte de service et Jetons Web JSON.
Le corps de la requête doit contenir une entité
DeliveryVehicle
.
Exemple de commande curl
:
# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"remainingVehicleJourneySegments": [
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.7749,
"longitude": -122.084061
}
},
"tasks": [
{
"taskId": "${TASK1_ID}"
}
]
}
},
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM