Aggiorna le attività relative al veicolo per la consegna

Questo documento presuppone la conoscenza di quanto segue:

In uno scenario di consegna reale, le attività assegnano le attività di spedizione ai conducenti, che poi utilizzano un veicolo per consegnarle al destinatario in una località pianificata, ad esempio una residenza o una stanza per le consegne in un complesso di edifici. Puoi simulare questa situazione in Fleet Engine creando un'attività ed emettendo una richiesta di aggiornamento del veicolo di consegna, che aggiorna l'entità del veicolo con un elenco di fermate da percorrere. Assegni a ogni fermata un elenco di attività da completare in quella fermata.

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

  • Pianifica le attività da completare per un veicolo. Puoi farlo con una richiesta di aggiornamento che aggiunge una nuova fermata al veicolo o con una richiesta di aggiornamento che aggiunge una nuova attività a una fermata esistente.
  • Aggiorna l'ordine delle attività esistenti associate a una determinata fermata del veicolo.
  • Modifica la posizione del completamento dell'attività. Per impostazione predefinita, Fleet Engine contrassegni la posizione di completamento dell'attività come la stessa posizione della fermata del veicolo associata all'attività. Se preferisci, puoi specificare località specifiche per le singole attività. Ad esempio, un veicolo potrebbe fermarsi in un grande complesso per consegnare una serie di pacchi, a ciascuno dei quali è assegnata una stanza specifica per la consegna della posta.
  • Chiudi le attività assegnate in precedenza per escluderle dall'ordinamento aggiornato. Per maggiori dettagli, consulta Completare le attività.

Pianificare o modificare le attività di importazione

Puoi pianificare o modificare le attività assegnate a un veicolo da un ambiente di server o utilizzando l'SDK Driver se fornisci al conducente la possibilità di gestire le attività utilizzando un dispositivo attendibile. Utilizza un solo metodo per evitare condizioni di gara e mantenere un'unica fonte attendibile.

Per spostare una spedizione da un veicolo a un altro, chiudi l'attività originale e ricreala prima di assegnarla a un altro veicolo. Se aggiorni un veicolo di consegna per includere un'attività già assegnata a un altro veicolo, viene visualizzato un errore.

Campi obbligatori per l'aggiornamento delle attività

Questa sezione descrive i campi obbligatori da impostare quando si aggiorna un'attività per un veicolo. Non sono forniti campi facoltativi. Il motore del parco 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à nell'elenco viene eseguita per prima.
remainingVehicleJourneySegments[i].stop La fermata per l'attività i nell'elenco.
remainingVehicleJourneySegments[i].stop.plannedLocation La posizione pianificata della fermata.
remainingVehicleJourneySegments[i].stop.tasks Un elenco di attività da svolgere in questa fermata del veicolo.
remainingVehicleJourneySegments[i].stop.state State.NEW

Esempio di assegnazione delle attività

Gli esempi riportati di seguito mostrano come utilizzare la libreria gRPC Java e una chiamata HTTP 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`
  • <id> è un identificatore univoco di un veicolo di consegna del tuo parco mezzi per il quale intendi aggiornare l'ordine delle attività. Si tratta dell'identificatore che hai specificato durante la creazione del veicolo.

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

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

Comando curl di esempio:

  # 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