Aggiorna le attività relative al veicolo per la consegna

In questo documento si presuppone una conoscenza di quanto segue:

In uno scenario di consegna reale, le aziende assegnano attività di spedizione autisti, che poi utilizzano un veicolo per consegnarli al destinatario in base a una pianificazione ad esempio una residenza o una sala per le consegne in un complesso di edifici. Tu modellalo in Fleet Engine creando un'attività ed emettendo un veicolo per le consegne di aggiornamento, che a sua volta aggiorna l'entità veicolo con un elenco di fermate viaggiare. A ogni fermata assegnerai un elenco di attività da completare alla fermata.

Puoi aggiornare le attività del veicolo in qualsiasi momento, ma in genere lo fai per: le seguenti finalità:

  • Programmare le attività da completare per un veicolo. Puoi eseguire questa operazione con una richiesta di aggiornamento che aggiunge una nuova fermata al veicolo o tramite un aggiornamento che aggiunge una nuova attività a una fermata esistente.
  • Aggiornare l'ordine delle attività esistenti associate a una determinata fermata del veicolo.
  • Modifica la posizione di completamento dell'attività. Per impostazione predefinita, Fleet Engine contrassegna il luogo di completamento dell'attività come lo stesso luogo della fermata del veicolo associati all'attività. Se preferisci, puoi specificare località specifiche per le singole attività. Ad esempio, potresti avere un veicolo che ferma in un tratto di strada complessa per la consegna di un certo numero di pacchetti, a ognuno dei quali viene assegnato una sala di consegna della posta specifica.
  • Chiudi tutte le attività assegnate in precedenza per escluderle dall'elenco aggiornato ordinazione. Per maggiori dettagli, consulta Finalizzare le attività.

Pianificare o modificare le attività di invio

Puoi programmare o modificare le attività assegnate a un veicolo da un server o utilizzando l'SDK del driver, se fornisci al driver la possibilità gestire le attività utilizzando un dispositivo attendibile. Utilizza un solo metodo per evitare gare le condizioni ambientali e mantenere un'unica fonte attendibile.

Per modificare una spedizione da un veicolo all'altro, chiudi l'attività originale e ricrearlo prima di assegnarlo a un altro veicolo. Se aggiorni un per includere un'attività già assegnata a un altro veicolo, ricevi un messaggio di errore.

Campi obbligatori per l'aggiornamento delle attività

Questa sezione documenta i campi obbligatori da impostare durante l'aggiornamento di un'attività per un veicolo. Non sono stati forniti campi facoltativi. Fleet Engine ignora tutti gli altri campi nell'entità per l'aggiornamento.

Campo obbligatorioValore
remainingVehicleJourneySegments Un elenco di segmenti di percorso per le attività nell'ordine in cui devono essere eseguite. La prima attività dell'elenco viene eseguita per prima.
remainingVehicleJourneySegments[i].stop L'interruzione per l'attività i nell'elenco.
remainingVehicleJourneySegments[i].stop.plannedLocation Il luogo pianificato per la fermata.
remainingVehicleJourneySegments[i].stop.tasks Un elenco di attività da eseguire in corrispondenza di questa fermata del veicolo.
remainingVehicleJourneySegments[i].stop.state State.NEW

Esempio di assegnazione di attività

I seguenti esempi mostrano come utilizzare la libreria Java gRPC e un server HTTP Chiamata REST a UpdateDeliveryVehicle per aggiungere due nuove attività per il veicolo.

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; è un identificatore univoco di un veicolo per la consegna del tuo parco risorse per cui intendi aggiornare l'ordine delle attività. È l'identificatore che che hai specificato durante la creazione del veicolo.

  • L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> viene emesso dal tuo server in base alle linee guida descritte in Ruoli dell'account di servizio e Token web JSON.

  • Il corpo della richiesta deve contenere un'entità DeliveryVehicle

Esempio di comando 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

Passaggi successivi