Mettre à jour les tâches liées au véhicule de livraison

Dans ce document, nous partons du principe que vous connaissez les éléments suivants:

Dans un scénario de livraison réel, les entreprises attribuent des tâches de livraison aux conducteurs, qui utilisent ensuite un véhicule pour les livrer au destinataire à un emplacement prévu, comme une résidence ou une salle de livraison dans un immeuble. Toi modéliser ceci dans Fleet Engine en créant une tâche et en émettant un véhicule de livraison "update", qui met ensuite à jour l'entité du véhicule avec une liste d'arrêts à voyager. Vous attribuez à chaque arrêt une liste de tâches à effectuer.

Vous pouvez modifier les tâches du véhicule à tout moment, mais généralement pour les raisons suivantes :

  • planifier des tâches qu'un véhicule doit effectuer ; Vous pouvez le faire soit avec une demande de mise à jour qui ajoute un nouvel arrêt au véhicule, ou par une mise à jour requête qui ajoute une nouvelle 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 le lieu d'achèvement de la tâche au même endroit que l'arrêt du véhicule associées à la tâche. Si vous préférez, vous pouvez spécifier des zones géographiques spécifiques pour des tâches individuelles. Par exemple, un arrêt de véhicule au grand complexe à livrer un certain nombre de colis, chacun d'entre eux étant associé à un une salle de distribution de courrier spécifique.
  • Fermez toutes les tâches précédemment attribuées pour ne plus les mettre à jour. le classement. Pour en savoir plus, consultez Finaliser les tâches.

Planifier ou modifier les tâches de livraison

Vous pouvez planifier ou modifier les tâches attribuées à un véhicule à partir d'un environnement serveur ou à l'aide du SDK Driver si vous autorisez le conducteur à gérer les tâches à l'aide d'un appareil de confiance. N'utilisez qu'une seule méthode afin d'éviter la course et maintenir une source unique de vérité.

Pour passer d'un véhicule à un autre, fermez la tâche d'origine. puis le recréer avant de l'attribuer à un autre véhicule. Si vous mettez à jour véhicule de livraison pour inclure une tâche déjà attribuée à un autre un message d'erreur s'affiche.

Champs obligatoires pour la mise à 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. Fleet Engine ignore tous les autres champs dans l'entité pour la mise à jour.

Champ obligatoireValeur
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 gRPC Java et un objet Appel REST à UpdateDeliveryVehicle pour ajouter deux nouvelles tâches pour le 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`
  • &lt;id&gt; est l'identifiant unique d'un véhicule de livraison de votre parc pour laquelle 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 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é 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

Étape suivante