Questo documento presuppone che tu abbia familiarità con quanto segue:
- Creare attività di spedizione
- L'introduzione alle attività pianificate, che illustra in dettaglio la relazione tra attività, fermate e veicoli.
In uno scenario di consegna reale, le attività assegnano le attività di spedizione delle consegne agli autisti, che poi utilizzano un veicolo per consegnarle al destinatario in una posizione pianificata, ad esempio una residenza o un locale 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à 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:
- Pianifica le attività da completare per un veicolo. Puoi farlo con una richiesta di aggiornamento che aggiunge una nuova fermata al veicolo oppure 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 di completamento dell'attività. Per impostazione predefinita, Fleet Engine contrassegna la posizione di completamento dell'attività come la stessa posizione della fermata del veicolo associata all'attività. Se preferisci, puoi specificare posizioni specifiche per le singole attività. Ad esempio, un veicolo potrebbe fermarsi in un grande complesso per consegnare una serie di pacchi, ognuno dei quali è assegnato a una specifica sala di consegna della posta.
- Chiudi 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 attendibile.
Per trasferire 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, viene visualizzato un errore.
Campi obbligatori per l'aggiornamento delle attività
Questa sezione documenta i campi obbligatori da impostare quando aggiorni un'attività per un veicolo. Non vengono forniti campi facoltativi. Fleet Engine ignora tutti gli altri campi nell'entità per l'aggiornamento.
Campo obbligatorio | Valore |
---|---|
remainingVehicleJourneySegments |
Un elenco di segmenti del percorso 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 posizione pianificata della 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 riportati di seguito mostrano come utilizzare la libreria gRPC Java e una chiamata REST HTTP 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 per un veicolo di consegna della tua flotta per il quale intendi aggiornare l'ordine 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 service account 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