In diesem Dokument wird davon ausgegangen, dass Sie mit Folgendem vertraut sind:
- Versandaufgaben erstellen
- Die Einführung in Geplante Aufgaben, in der die Beziehung zwischen Aufgaben, Stopps und Fahrzeugen im Detail beschrieben wird.
In einem realen Lieferszenario weisen Unternehmen Fahrern Lieferaufgaben zu, die diese dann mit einem Fahrzeug an den Empfänger an einem geplanten Ort liefern, z. B. an eine Wohnung oder einen Lieferraum in einem Gebäudekomplex. In Fleet Engine modellieren Sie dies, indem Sie eine Aufgabe erstellen und eine Anfrage zur Aktualisierung des Lieferfahrzeugs senden. Dadurch wird die Fahrzeug-Entity mit einer Liste der anzufahrenden Haltestellen aktualisiert. Sie weisen jedem Stopp eine Liste von Aufgaben zu, die dort erledigt werden müssen.
Sie können Fahrzeugaufgaben jederzeit aktualisieren, in der Regel jedoch aus folgenden Gründen:
- Aufgaben für ein Fahrzeug planen Das ist entweder mit einer Aktualisierungsanfrage möglich, mit der dem Fahrzeug eine neue Haltestelle hinzugefügt wird, oder mit einer Aktualisierungsanfrage, mit der einer vorhandenen Haltestelle eine neue Aufgabe hinzugefügt wird.
- Reihenfolge vorhandener Aufgaben für einen bestimmten Fahrzeugstopp aktualisieren.
- Den Ort ändern, an dem die Aufgabe erledigt wird Standardmäßig markiert Fleet Engine den Ort, an dem die Aufgabe abgeschlossen wurde, als denselben Ort wie den Fahrzeugstopp, der mit der Aufgabe verknüpft ist. Sie können auch bestimmte Orte für einzelne Aufgaben angeben. Ein Fahrzeug hält beispielsweise an einem großen Komplex, um mehrere Pakete zuzustellen, die jeweils einem bestimmten Postzustellraum zugewiesen sind.
- Schließen Sie alle zuvor zugewiesenen Aufgaben, damit sie nicht in der aktualisierten Reihenfolge enthalten sind. Weitere Informationen finden Sie unter Aufgaben abschließen.
Lieferaufgaben planen oder ändern
Sie können Aufgaben, die einem Fahrzeug zugewiesen sind, entweder über eine Serverumgebung planen oder ändern. Alternativ können Sie das Driver SDK verwenden, wenn Sie dem Fahrer die Möglichkeit geben, Aufgaben über ein vertrauenswürdiges Gerät zu verwalten. Verwenden Sie nur eine Methode, um Race Conditions zu vermeiden und eine Single Source of Truth beizubehalten.
Wenn Sie eine Sendung von einem Fahrzeug in ein anderes verlagern möchten, schließen Sie die ursprüngliche Aufgabe und erstellen Sie sie neu, bevor Sie sie einem anderen Fahrzeug zuweisen. Wenn Sie ein Lieferfahrzeug aktualisieren, um eine Aufgabe hinzuzufügen, die bereits einem anderen Fahrzeug zugewiesen ist, erhalten Sie eine Fehlermeldung.
Pflichtfelder zum Aktualisieren von Aufgaben
In diesem Abschnitt werden die erforderlichen Felder beschrieben, die beim Aktualisieren einer Aufgabe für ein Fahrzeug festgelegt werden müssen. Es werden keine optionalen Felder angegeben. Alle anderen Felder in der Aktualisierung werden von Fleet Engine ignoriert.
Pflichtfeld | Wert |
---|---|
remainingVehicleJourneySegments |
Eine Liste mit Journey-Segmenten für Aufgaben in der Reihenfolge, in der sie ausgeführt werden sollen. Die erste Aufgabe in der Liste wird zuerst ausgeführt. |
remainingVehicleJourneySegments[i].stop |
Der Stopp für Aufgabe i in der Liste. |
remainingVehicleJourneySegments[i].stop.plannedLocation |
Der geplante Ort für den Stopp. |
remainingVehicleJourneySegments[i].stop.tasks |
Eine Liste der Aufgaben, die an diesem Fahrzeugstopp ausgeführt werden sollen. |
remainingVehicleJourneySegments[i].stop.state |
State.NEW |
Beispiel für das Zuweisen von Aufgaben
Die folgenden Beispiele zeigen, wie Sie die Java-gRPC-Bibliothek und einen HTTP-REST-Aufruf an UpdateDeliveryVehicle
verwenden, um dem Fahrzeug zwei neue Aufgaben hinzuzufügen.
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> ist eine eindeutige Kennung für ein Lieferfahrzeug in Ihrer Flotte, für das Sie die Aufgabenreihenfolge aktualisieren möchten. Das ist die Kennung, die Sie beim Erstellen des Fahrzeugs angegeben haben.
Der Anfrageheader muss ein Feld Authorization mit dem Wert Bearer <token> enthalten, wobei <token> von Ihrem Server gemäß den Richtlinien in Dienstkontorollen und JSON Web Tokens ausgestellt wird.
Der Anfragetext muss ein
DeliveryVehicle
-Objekt enthalten.
Beispiel eines curl
-Befehls:
# 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