Z dokumentu wynika, że wiesz, jak tworzyć zadania i z nich korzystać. Zawiera ona konkretne przykłady sposobów na dokończenie zadań związanych z dostawą:
Zamknij zadanie: zamknięcie zadania dotyczącego dostawy powoduje zmianę jego stanu na
CLOSED
i wskazuje, że zadanie nie jest już aktywne.Ustaw wynik zadania: po zamknięciu zadania możesz je ukończyć, ustawiając jego wynik na
SUCCEEDED
lubFAILED
. Jest to ważny element finalizowania zadania, który pozwala wyświetlić wynik dostawy w ramach udostępniania trasy i zapewnić prawidłowe rozliczenie usługi Fleet Engine.
Zamykanie zadania
Zadania możesz zamykać na te sposoby:
- Zaktualizuj stan zatrzymania pojazdu. usuwasz przystanek z pojazdu, co z kolei powoduje zamknięcie wszystkich zadań powiązanych z tym przystankiem; Więcej informacji znajdziesz w artykule o zmianie stanu.
- Usuń zadanie z listy przystanków pojazdu. Obejmuje to zaktualizowanie listy zadań dla przystanku, ale zamknięte zadanie nie będzie już na tej liście. Aby dowiedzieć się, jak zaktualizować kolejność zadań, zapoznaj się z artykułem Aktualizowanie zadań.
- Ustaw stan zadania na
CLOSED
. Możesz to zrobić tylko w przypadku zadań nieprzypisanych do pojazdów. Ta sekcja pokazuje to podejście.
Po zamknięciu zadania nie można go ponownie otworzyć.
Zamknięcie zadania nie oznacza jego powodzenia lub niepowodzenia. Oznacza to, że zadanie nie jest już w toku. Aby wskazać rzeczywisty wynik zadania i wyświetlić go na potrzeby śledzenia floty i udostępniania przejazdów, musisz wskazać rzeczywisty wynik zadania. Poniżej znajdziesz informacje o ustawianiu wyniku zadania.
Pola zadania dotyczące zamykania zadań
W tej sekcji znajdziesz informacje o wymaganych polach, które należy ustawić podczas zamykania zadania. Silnik floty ignoruje wszystkie inne pola w danym elemencie.
Pole wymagane | Wartość |
---|---|
state |
State.CLOSED |
Zamknij zadanie bezpośrednio
Poniższe przykłady pokazują, jak ustawić nieprzypisane zadanie jako zamknięte (w gRPC lub za pomocą wywołania żądania HTTP REST do UpdateTask
).
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> to unikalny identyfikator zadania.
- Nagłówek żądania musi zawierać pole Authorization o wartości Bearer <token>, gdzie <token> jest wydawany przez serwer zgodnie z wytycznymi opisanymi w artykule Role na kontach usługi i tokeny sieciowe JSON.
- W treści żądania musisz uwzględnić element
Task
.
Przykład polecenia curl
:
# 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")"
}
EOM
Ustaw wynik zadania
Aby wskazać rzeczywisty wynik zadania, dla zamkniętych zadań ustawiasz wynik na SUCCEEDED
lub FAILED
. Zanim określisz wynik zadania, musi ono zostać zamknięte. Fleet Engine pobiera opłaty tylko za zadania dostawy o stanie SUCCEEDED
.
Szczegóły wyniku zadania
Zadania zawierają też dodatkowe informacje o wyniku. Możesz je ustawić bezpośrednio, a silnik floty będzie ich przestrzegać:
- Lokalizacja zakończenia zadania: Fleet Engine automatycznie wypełnia lokalizację zakończenia zadania ostatnią znaną lokalizacją pojazdu. Jeśli wolisz, możesz podać je w innej formie.
- Czas zakończenia zadania: Fleet Engine nie wypełnia tego pola, ale możesz go ustawić.
Aby ustawić wartości task_outcome_location
i task_outcome_time
, możesz użyć dowolnej z tych metod:
- Zaktualizuj je w tym samym żądaniu, które określa wynik zadania.
- Zaktualizuj je później, gdy określisz wynik zadania.
- Zmodyfikuj je ponownie po ich ustawieniu.
Fleet Engine uniemożliwia wprowadzanie tych zmian związanych z wynikami zadań:
- Nie możesz zmienić wyniku zadania po ustawieniu wartości
SUCCEEDED
lubFAILED
. - W przypadku zadań bez określonego wyniku nie możesz ustawić lokalizacji ani czasu wyniku.
Pola zadania do ustawiania wyniku
W tej sekcji znajdziesz informacje o wymaganych i opcjonalnych polach, które należy ustawić podczas konfigurowania wyniku zadania. Podczas aktualizacji Fleet Engine ignoruje inne pola w danym elemencie.
Pole wymagane | Wartość |
---|---|
taskOutcome |
Outcome.SUCCEEDED lub Outcome.FAILED |
Pole opcjonalne | Wartość |
---|---|
taskOutcomeLocation |
Miejsce, w którym zostało ukończone zadanie. Jeśli nie jest ustawiona, Fleet Engine przyjmuje domyślnie ostatnią lokalizację pojazdu. |
taskOutcomeTime |
Sygnatura czasowa określająca, kiedy zadanie zostało ukończone. |
Przykłady wyników zadań
Ten przykład pokazuje, jak użyć biblioteki Java gRPC i wywołania HTTP REST do UpdateTask
, aby ustawić wynik zadania na SUCCEEDED
i ustawić lokalizację, w której zostało ono ukończone.
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> to unikalny identyfikator zadania.
- Nagłówek żądania musi zawierać pole Authorization o wartości Bearer <token>, gdzie <token> jest wydawany przez serwer zgodnie z wytycznymi opisanymi w artykule Role na kontach usługi i tokeny sieciowe JSON.
- Treść żądania musi zawierać element
Task
.
# 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