In diesem Dokument wird davon ausgegangen, dass Sie den Einführungsleitfaden zu Geplanten Aufgaben im Abschnitt Einführung in Fleet Engine sowie Was ist eine geplante Aufgabe? in diesem Abschnitt gelesen haben.
Fleet Engine für geplante Aufgaben bietet verschiedene allgemeine Kategorien von Aufgaben:
- Versandaufgaben: Für Fahraufgaben, einschließlich Abholung und Lieferung von Sendungen.
- Nichtverfügbarkeitsaufgaben: Verwenden Sie diese für Zeiten, in denen Fahrer nicht verfügbar sind, z. B. für vorgeschriebene Pausen.
- Aufgaben für geplante Stopps: Für Aufgaben, die nicht mit dem Fahren zusammenhängen, z. B. das Betreten eines Gebäudes oder das Suchen eines Zustellpunkts.
In diesem Dokument wird beschrieben, wie Sie auf Ihrem Server Versand-Aufgaben erstellen. Informationen zu anderen Aufgabentypen finden Sie unter Andere Aufgabentypen erstellen.
Felder für Versandaufgaben
In diesem Abschnitt werden die Aufgabenfelder dokumentiert, die sowohl für Abhol- als auch für Zustellaufgaben erforderlich sind.
Erforderliche Aufgabenfelder
Für jede Aufgabe, die Sie in Fleet Engine erstellen, müssen Sie die erforderlichen Felder angeben. Sie können auch optionale Felder angeben. Fleet Engine ignoriert alle anderen Felder und löst eine Ausnahme aus, wenn in einer Anfrage zum Erstellen einer Aufgabe ein zugewiesenes deliveryVehicleId
angegeben ist. Verwenden Sie UpdateDeliveryVehicleRequest
, um einem Fahrzeug Aufgaben zuzuweisen. Weitere Informationen finden Sie unter Aufgaben aktualisieren.
Feld | Wert |
---|---|
type |
Legen Sie den Typ fest, der dem Aufgabentyp entspricht. Das ist einer der folgenden Werte:
|
state |
State.OPEN |
task_id |
Eindeutige Aufgaben-ID. Dies darf nicht die Tracking-Nummer für die Sendung sein. Wenn Sie in Ihrem System keine Aufgaben-IDs haben, können Sie eine universell eindeutige Kennung (Universally Unique Identifier, UUID) generieren. Weitere Informationen finden Sie unter Aufgaben-IDs. |
tracking_id |
Nur PICKUP - oder DELIVERY -Aufgaben: Die Nummer oder Kennung, die Sie zum Nachverfolgen einer Sendung verwenden. Geben Sie dieses Feld nicht für Aufgaben an, die sich nicht auf den Versand beziehen. |
planned_location |
PICKUP , DELIVERY oder SCHEDULED_STOP -Aufgaben: Der Ort, an dem die Aufgabe erledigt werden soll. Nicht erforderlich für UNAVAILABLE -Aufgaben. |
task_duration |
Die geschätzte Zeit, die für die Ausführung der Aufgabe benötigt wird. Zum Beispiel, um einen Parkplatz zu suchen oder zum Übergabeort zu gehen. |
Optionale Felder für Versandaufgaben
Feld | Wert |
---|---|
target_time_window |
Das Zeitfenster, in dem die Aufgabe erledigt werden soll. Dieses Feld hat keinen Einfluss auf das Routingverhalten. |
task_tracking_view_config |
Nur PICKUP - oder DELIVERY -Aufgaben: Die Konfiguration für die Aufgabenverfolgung, in der angegeben wird, welche Datenelemente unter welchen Umständen für die Endnutzer sichtbar sind. |
attributes |
Eine Liste benutzerdefinierter Aufgabenattribute. Jedes Attribut muss einen eindeutigen Schlüssel haben. |
Abholaufgabe für Sendung erstellen
Wenn Sie Fleet Engine verwenden möchten, um die Aktivität eines Fahrers zu verfolgen, der eine Sendung abholt, erstellen Sie eine Aufgabe zum Abholen der Sendung. Dazu müssen Sie das Attribut „Aufgabentyp“ auf PICKUP
festlegen. Das folgende Beispiel zeigt die Abholung einer Sendung in der Grand Indonesia East Mall.
Die folgenden Beispiele zeigen, wie Sie mit der Java-gRPC-Bibliothek eine Aufgabe zum Abholen von Sendungen erstellen oder eine HTTP-REST-Anfrage an CreateTask
senden.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
.setType(Task.Type.PICKUP)
.setState(Task.State.OPEN)
.setTrackingId("my-tracking-id")
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
.addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
.addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent) // Avoid using auto-incrementing IDs for the taskId
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTask(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have a task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
So erstellen Sie einen Abholauftrag für den Versand über eine Serverumgebung: Führen Sie einen HTTP-REST-Aufruf an CreateTask
aus:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>
<id> ist eine eindeutige Kennung für die Aufgabe.
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 eine Task
-Einheit mit den entsprechenden Feldern enthalten, die unter Felder für Versandaufgaben beschrieben sind.
Beispiel eines curl
-Befehls:
# Set $JWT, $PROJECT_ID, $TRACKING_ID, and $TASK_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"type": "PICKUP",
"state": "OPEN",
"trackingId": "${TRACKING_ID}",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "90s",
"targetTimeWindow": {
"startTime": "2023-03-29T21:00:00Z",
"endTime": "2023-03-29T23:00:00Z"
}
}
EOM
Aufgabe für die Lieferung einer Sendung erstellen
Wenn Sie Fleet Engine verwenden möchten, um die Aktivität eines Fahrers zu verfolgen, der eine Sendung ausliefert, erstellen Sie eine Aufgabe für die Auslieferung der Sendung. Dazu müssen Sie das Attribut „Aufgabentyp“ auf DELIVERY
festlegen. Das folgende Beispiel veranschaulicht die Lieferung einer Sendung an die Grand Indonesia East Mall.
Die folgenden Beispiele zeigen, wie Sie mit der Java-gRPC-Bibliothek eine Aufgabe zum Abholen von Sendungen erstellen oder eine HTTP-REST-Anfrage an CreateTask
senden.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
.setType(Task.Type.DELIVERY)
.setState(Task.State.OPEN)
.setTrackingId("my-tracking-id")
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
.addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
.addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent) // Avoid using auto-incrementing IDs for the taskId
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTask(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
So erstellen Sie einen Abholauftrag für den Versand über eine Serverumgebung: Führen Sie einen HTTP-REST-Aufruf an CreateTask
aus:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>
<id> ist eine eindeutige Kennung für die Aufgabe.
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 eine Task
-Einheit enthalten:
Beispiel eines curl
-Befehls:
# Set $JWT, $PROJECT_ID, $TRACKING_ID, and $TASK_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"type": "DELIVERY",
"state": "OPEN",
"trackingId": "${TRACKING_ID}",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "90s",
"targetTimeWindow": {
"startTime": "2023-03-29T21:00:00Z",
"endTime": "2023-03-29T23:00:00Z"
}
}
EOM
```