In diesem Dokument wird davon ausgegangen, dass Sie wissen, wie Sie Aufgaben erstellen und verwenden. Es enthält konkrete Beispiele für das Abschließen von Versandaufgaben:
Aufgabe schließen: Wenn Sie eine Versandaufgabe schließen, wird ihr Status in
CLOSEDgeändert und die Aufgabe ist nicht mehr aktiv.Aufgabenergebnis festlegen: Nachdem eine Aufgabe geschlossen wurde, schließen Sie sie ab, indem Sie das Ergebnis entweder auf
SUCCEEDEDoderFAILEDfestlegen. Dies ist ein wichtiger Teil des Abschlusses einer Aufgabe, um das Lieferergebnis in der Fahrtenfreigabe anzuzeigen und eine korrekte Abrechnung für den Fleet Engine-Dienst zu gewährleisten.
Aufgaben schließen
Sie haben folgende Möglichkeiten, eine Aufgabe zu schließen:
- Aktualisieren Sie den Haltestellenstatus für das Fahrzeug. Sie entfernen den Stopp aus dem Fahrzeug, wodurch alle mit dem Stopp verknüpften Aufgaben geschlossen werden. Weitere Informationen finden Sie unter Stoppstatus aktualisieren.
- Entfernen Sie die Aufgabe aus der Liste der Fahrzeugstopps. Dazu wird die Liste der Aufgaben für den Halt aktualisiert, wobei die abgeschlossene Aufgabe nicht mehr Teil der Liste ist. Weitere Informationen finden Sie unter Aufgaben aktualisieren im Abschnitt „Reihenfolge von Aufgaben aktualisieren“.
- Setzen Sie den Aufgabenstatus auf
CLOSED. Dies ist nur bei Aufgaben möglich, die keinen Fahrzeugen zugewiesen sind. In diesem Abschnitt wird dieser Ansatz beschrieben.
Sobald Sie eine Aufgabe geschlossen haben, können Sie sie nicht mehr öffnen.
Das Schließen einer Aufgabe gibt nicht an, ob sie erfolgreich war oder fehlgeschlagen ist. Sie gibt an, dass die Aufgabe nicht mehr als in Bearbeitung gilt. Wenn Sie das tatsächliche Ergebnis einer Aufgabe angeben und für das Flottentracking und die Fahrtenfreigabe anzeigen lassen möchten, müssen Sie das tatsächliche Ergebnis einer Aufgabe angeben. Weitere Informationen finden Sie unten unter Aufgabenergebnis festlegen.
Aufgabenfelder zum Schließen von Aufgaben
In diesem Abschnitt werden die Pflichtfelder beschrieben, die beim Schließen einer Aufgabe festgelegt werden müssen. Die Fleet Engine ignoriert alle anderen Felder in der Entität für die Aktualisierung.
| Pflichtfeld | Wert |
|---|---|
state |
State.CLOSED |
Aufgabe direkt schließen
In den folgenden Beispielen wird gezeigt, wie Sie eine nicht zugewiesene Aufgabe entweder in gRPC oder mit einem HTTP-REST-Anfrageaufruf an UpdateTask auf den Status „Geschlossen“ setzen.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
.setName(taskName)
.setState(Task.State.CLOSED) // You can only directly CLOSE a
.build(); // task that is NOT assigned to a vehicle.
// Task request
UpdateTaskRequest updateTaskRequest =
UpdateTaskRequest.newBuilder() // No need for the header
.setTask(task)
.setUpdateMask(FieldMask.newBuilder().addPaths("state"))
.build();
try {
Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} 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>/tasks/<id>?updateMask=state
- <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.
- Sie müssen im Anfragetext eine
Task-Entität angeben.
Beispiel eines curl-Befehls:
# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"state": "CLOSED",
"taskOutcome": "SUCCEEDED",
"taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
}
EOMAufgabenergebnis festlegen
Um das tatsächliche Ergebnis einer Aufgabe anzugeben, legen Sie das Ergebnis für geschlossene Aufgaben entweder auf SUCCEEDED oder FAILED fest. Eine Aufgabe muss geschlossen werden, bevor Sie ihr Ergebnis festlegen. Die Fleet Engine berechnet nur Lieferaufgaben mit dem Status SUCCEEDED.
Details zum Aufgabenergebnis
Außerdem werden zusätzliche Details zum Ergebnis der Aufgabe angezeigt. Sie können diese direkt festlegen und die Fleet Engine berücksichtigt Ihre Einstellungen:
- Ort des Aufgabenergebnisses: Die Fleet Engine füllt den Ort des Aufgabenergebnisses automatisch mit dem letzten bekannten Fahrzeugstandort aus. Sie können stattdessen diese angeben, wenn Sie möchten.
- Zeitpunkt des Aufgabenergebnisses: Die Fleet Engine füllt dieses Feld nicht aus, Sie können es aber festlegen.
Sie können einen der folgenden Ansätze verwenden, um task_outcome_location und task_outcome_time festzulegen:
- Aktualisieren Sie sie in derselben Anfrage, in der das Ergebnis der Aufgabe festgelegt wird.
- Aktualisieren Sie sie später, nachdem Sie das Aufgabenergebnis festgelegt haben.
- Sie können sie nach dem Festlegen noch einmal ändern.
Fleet Engine verhindert die folgenden Aktualisierungen im Zusammenhang mit Aufgabenergebnissen:
- Sie können das Ergebnis einer Aufgabe nicht mehr ändern, nachdem es auf
SUCCEEDEDoderFAILEDfestgelegt wurde. - Sie können für Aufgaben ohne festgelegtes Ergebnis keinen Ergebnisort oder keine Ergebniszeit festlegen.
Aufgabenfelder zum Festlegen des Ergebnisses
In diesem Abschnitt werden die erforderlichen und optionalen Felder beschrieben, die beim Festlegen eines Aufgabenergebnisses festgelegt werden müssen. Andere Felder in der Entität werden von Fleet Engine bei der Aktualisierung ignoriert.
| Pflichtfeld | Wert |
|---|---|
taskOutcome |
Outcome.SUCCEEDED oder Outcome.FAILED |
| Optionales Feld | Wert |
|---|---|
taskOutcomeLocation |
Der Ort, an dem die Aufgabe abgeschlossen wurde. Wenn nichts festgelegt ist, verwendet die Fleet Engine standardmäßig den letzten Fahrzeugstandort. |
taskOutcomeTime |
Der Zeitstempel, der angibt, wann die Aufgabe abgeschlossen wurde. |
Beispiele für Aufgabenergebnisse
Im folgenden Beispiel wird gezeigt, wie Sie die Java-gRPC-Bibliothek und einen HTTP-REST-Aufruf an UpdateTask verwenden, um ein Aufgabenergebnis auf SUCCEEDED und den Ort festzulegen, an dem die Aufgabe abgeschlossen wurde.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
.setName(taskName)
.setTaskOutcome(TaskOutcome.SUCCEEDED)
.setTaskOutcomeTime(now())
.setTaskOutcomeLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.build();
// Task request
UpdateTaskRequest updateTaskRequest =
UpdateTaskRequest.newBuilder() // No need for the header
.setTask(task)
.setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
.build();
try {
Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} 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>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation
- <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-Entität enthalten.
# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"taskOutcome": "SUCCEEDED",
"taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
"taskOutcomeLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
}
}
EOM