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, Haltestellen und Fahrzeugen ausführlich erläutert wird.
In einem realen Lieferszenario weisen Unternehmen Lieferaufgaben den Fahrern zu, die diese dann mit einem Fahrzeug an einem geplanten Ort wie einem Wohnhaus oder einem Lieferraum in einem Gebäudekomplex an den Empfänger liefern. Sie modellieren dies in Fleet Engine, indem Sie eine Aufgabe erstellen und eine Aktualisierungsanfrage für das Lieferfahrzeug senden. Dadurch wird die Fahrzeugentität mit einer Liste der Haltestellen aktualisiert, die angefahren werden müssen. Sie weisen jeder Haltestelle eine Liste von Aufgaben zu, die an dieser Haltestelle erledigt werden müssen.
Sie können Fahrzeugaufgaben jederzeit aktualisieren. In der Regel geschieht dies jedoch für folgende Zwecke:
- Aufgaben für ein Fahrzeug planen Dazu können Sie entweder eine Aktualisierungsanfrage verwenden, mit der dem Fahrzeug eine neue Haltestelle hinzugefügt wird, oder eine Aktualisierungsanfrage, mit der einer vorhandenen Haltestelle eine neue Aufgabe hinzugefügt wird.
- Ordnung der vorhandenen Aufgaben für eine bestimmte Haltestelle aktualisieren
- Ändern Sie den Ort, an dem die Aufgabe abgeschlossen wird. Standardmäßig markiert Fleet Engine den Ort für den Aufgabenabschluss als denselben Ort wie die Fahrzeughaltestelle, die der Aufgabe zugeordnet ist. Wenn Sie möchten, können Sie für einzelne Aufgaben bestimmte Standorte angeben. Beispiel: Sie haben eine große Fahrzeughaltestelle, die eine Reihe von Paketen zustellen soll, die jeweils einem bestimmten Postzustellungsraum zugewiesen sind.
- Schließen Sie alle zuvor zugewiesenen Aufgaben, damit sie nicht in die aktualisierte Reihenfolge aufgenommen werden. Weitere Informationen finden Sie unter Aufgaben abschließen.
Übermittlungsaufgaben planen oder ändern
Sie können Aufgaben, die einem Fahrzeug zugewiesen sind, entweder über eine Serverumgebung oder mit dem Driver SDK planen oder ändern, wenn Sie dem Fahrer die Möglichkeit geben, Aufgaben mit einem vertrauenswürdigen Gerät zu verwalten. Verwenden Sie nur eine Methode, um Race Conditions zu vermeiden und eine einzige zentrale Datenquelle zu haben.
Wenn Sie eine Sendung von einem Fahrzeug auf ein anderes umstellen 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 so aktualisieren, dass es eine Aufgabe enthält, die bereits einem anderen Fahrzeug zugewiesen ist, erhalten Sie eine Fehlermeldung.
Pflichtfelder für die Aktualisierung von Aufgaben
In diesem Abschnitt werden die erforderlichen Felder beschrieben, die beim Aktualisieren einer Aufgabe für ein Fahrzeug festgelegt werden müssen. Es sind keine optionalen Felder vorhanden. Die Fleet Engine ignoriert für die Aktualisierung alle anderen Felder in der Entität.
Pflichtfeld | Wert |
---|---|
remainingVehicleJourneySegments |
Eine Liste der einzelnen Schritte in der Reihenfolge, in der sie ausgeführt werden sollen. Die erste Aufgabe in der Liste wird zuerst ausgeführt. |
remainingVehicleJourneySegments[i].stop |
Haltestelle für Aufgabe i in der Liste. |
remainingVehicleJourneySegments[i].stop.plannedLocation |
Der geplante Standort der Haltestelle. |
remainingVehicleJourneySegments[i].stop.tasks |
Eine Liste der Aufgaben, die an dieser Haltestelle auszuführen sind. |
remainingVehicleJourneySegments[i].stop.state |
State.NEW |
Beispiel für das Zuweisen von Aufgaben
Die folgenden Beispiele zeigen, wie Sie mit der Java-gRPC-Bibliothek und einem HTTP-REST-Aufruf an UpdateDeliveryVehicle
zwei neue Aufgaben für das Fahrzeug hinzufü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. Dies ist die Kennung, die Sie beim Erstellen des Fahrzeugs angegeben haben.
Der Anfrageheader muss das Feld Authorization mit dem Wert Bearer <token> enthalten. Dabei wird <token> von deinem Server gemäß den in den Abschnitten Dienstkontorollen und JSON Web Tokens beschriebenen Richtlinien ausgestellt.
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