Questo documento presuppone la conoscenza di quanto segue:
- Creare attività di spedizione
- L'introduzione alle attività programmate, che illustra in dettaglio la relazione tra attività, fermate e veicoli.
In uno scenario di consegna reale, le aziende 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 sala di consegna in un complesso edilizio. Puoi modellare 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. Assegna a ogni fermata un elenco di attività da completare.
Puoi aggiornare le attività del veicolo in qualsiasi momento, ma in genere lo fai per i seguenti scopi:
- Pianificare le attività che un veicolo deve completare. 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.
- Aggiornare l'ordine delle attività esistenti associate a una determinata fermata del veicolo.
- Modificare la località di completamento dell'attività. Per impostazione predefinita, Fleet Engine contrassegna la località di completamento dell'attività come la stessa località della fermata del veicolo associata all'attività. Se preferisci, puoi specificare località specifiche per le singole attività. Ad esempio, potresti avere una fermata del veicolo in un grande complesso per consegnare una serie di pacchi, ognuno dei quali è assegnato a una sala di consegna della posta specifica.
- Chiudere le attività assegnate in precedenza per escluderle dall'ordinamento aggiornato. Per i dettagli, consulta Finalizzare le attività.
Pianificare o modificare le attività di consegna
Puoi pianificare o modificare le attività assegnate a un veicolo da un ambiente server o utilizzando Driver SDK se fornisci al conducente la possibilità di gestire le attività utilizzando un dispositivo attendibile. Utilizza un solo metodo per evitare condizioni di competizione e mantenere un'unica fonte di verità.
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 in modo da includere un'attività già assegnata a un altro veicolo, riceverai un errore.
Campi obbligatori per l'aggiornamento delle attività
In questa sezione sono documentati i campi obbligatori da impostare quando aggiorni un'attività per un veicolo. Non sono forniti campi facoltativi. Fleet Engine ignora tutti gli altri campi dell'entità per l'aggiornamento.
| Campo obbligatorio | Valore |
|---|---|
remainingVehicleJourneySegments |
Un elenco di segmenti di viaggio per le attività nell'ordine in cui devono essere eseguite. La prima attività dell'elenco viene eseguita per prima. |
remainingVehicleJourneySegments[i].stop |
La fermata per l'attività i nell'elenco. |
remainingVehicleJourneySegments[i].stop.plannedLocation |
La località pianificata per la fermata. |
remainingVehicleJourneySegments[i].stop.tasks |
Un elenco di attività da eseguire in questa fermata del veicolo. |
remainingVehicleJourneySegments[i].stop.state |
State.NEW |
Esempio di assegnazione delle attività
Gli esempi seguenti mostrano come utilizzare la libreria Java gRPC 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 della tua flotta per il quale intendi aggiornare l'ordinamento delle attività. È l'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> viene emesso dal server in base alle linee guida descritte in Ruoli degli 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