W tym dokumencie zakładamy, że wiesz, jak tworzyć zadania i z nich korzystać. Zawiera ona konkretne przykłady finalizowania zadań związanych z przesyłką:
Zamknij zadanie: zamknięcie zadania związanego z przesyłką zmienia jego stan na
CLOSED
i oznacza, że zadanie nie jest już aktywne.Ustaw wynik zadania: po zamknięciu zadania możesz je sfinalizować, ustawiając jego wynik jako
SUCCEEDED
lubFAILED
. Jest to ważny etap finalizowania zadania, który umożliwia wyświetlanie wyniku dostawy w udostępnianiu trasy i zapewnia prawidłowe rozliczenia za usługę Fleet Engine.
Zamykanie zadania
Zadanie możesz zamknąć na te sposoby:
- Zaktualizuj stan przystanku dla pojazdu. Usuwasz przystanek z pojazdu, co powoduje zamknięcie wszystkich zadań z nim powiązanych. Więcej informacji znajdziesz w artykule Aktualizowanie stanu przystanku.
- Usuń zadanie z listy przystanków pojazdu. Obejmuje to aktualizację listy zadań dla przystanku, ale zamknięte zadanie nie jest już częścią listy. Więcej informacji znajdziesz w sekcji Zmienianie kolejności zadań w artykule Aktualizowanie zadań.
- Ustaw stan zadania na
CLOSED
. Możesz to zrobić tylko w przypadku zadań, które nie są przypisane do pojazdów. W tej sekcji pokazujemy, jak to zrobić.
Po zamknięciu zadania nie można go ponownie otworzyć.
Zamknięcie zadania nie oznacza jego powodzenia ani niepowodzenia. Oznacza to, że zadanie nie jest już uznawane za zadanie w toku. Aby wskazać rzeczywisty wynik zadania i wyświetlić go na potrzeby śledzenia floty i udostępniania podróży, musisz podać rzeczywisty wynik zadania. Zobacz Ustawianie wyniku zadania poniżej.
Pola zadań do zamykania zadań
W tej sekcji znajdziesz informacje o polach, które musisz ustawić podczas zamykania zadania. Fleet Engine ignoruje wszystkie inne pola w obiekcie na potrzeby aktualizacji.
Pole wymagane | Wartość |
---|---|
state |
State.CLOSED |
Bezpośrednie zamykanie zadania
Poniższe przykłady pokazują, jak ustawić stan nieprzypisanego zadania na „zamknięty” 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 tokenem wydanym przez Twój serwer zgodnie z wytycznymi opisanymi w sekcjach Role kont usługi i Tokeny sieciowe JSON.
- W treści żądania musisz umieścić element
Task
.
Przykładowe polecenie 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
Ustawianie wyniku zadania
Aby wskazać rzeczywisty wynik zadania, ustaw wynik zamkniętych zadań na SUCCEEDED
lub FAILED
. Zanim ustawisz wynik zadania, musisz je zamknąć. Fleet Engine nalicza opłaty tylko za zadania dostawy w stanieSUCCEEDED
.
Szczegóły wyniku zadania
Zadania zawierają też dodatkowe informacje o wyniku zadania. Możesz ustawić te wartości bezpośrednio, a Fleet Engine będzie je uwzględniać:
- Lokalizacja wyniku zadania: Fleet Engine automatycznie wypełnia lokalizację wyniku zadania ostatnią znaną lokalizacją pojazdu. Jeśli wolisz, możesz podać ten adres.
- Czas wyniku zadania: Fleet Engine nie wypełnia tego pola, ale możesz je ustawić.
Aby ustawić wartości task_outcome_location
i task_outcome_time
, możesz zastosować dowolne z tych podejść:
- Zaktualizuj je w tym samym żądaniu, które ustawia wynik zadania.
- zaktualizować je później, po ustawieniu wyniku zadania.
- ponownie je zmodyfikować po ich ustawieniu.
Fleet Engine zapobiega tym aktualizacjom związanym z wynikami zadań:
- Po ustawieniu wyniku zadania na
SUCCEEDED
lubFAILED
nie możesz go zmienić. - Nie możesz ustawić lokalizacji ani czasu wyniku zadania w przypadku zadań bez ustawionego wyniku.
Pola zadania do ustawiania wyniku
W tej sekcji znajdziesz dokumentację dotyczącą wymaganych i opcjonalnych pól, które należy ustawić podczas określania wyniku zadania. Fleet Engine ignoruje inne pola w obiekcie podczas aktualizacji.
Pole wymagane | Wartość |
---|---|
taskOutcome |
Outcome.SUCCEEDED lub Outcome.FAILED |
Pole opcjonalne | Wartość |
---|---|
taskOutcomeLocation |
Lokalizacja, w której wykonano zadanie. Jeśli nie jest ustawiona, Fleet Engine domyślnie używa ostatniej lokalizacji pojazdu. |
taskOutcomeTime |
Sygnatura czasowa określająca, kiedy zadanie zostało wykonane. |
Przykłady wyników zadań
Poniższy przykład pokazuje, jak za pomocą biblioteki Java gRPC i wywołania HTTP REST do UpdateTask
ustawić wynik zadania na SUCCEEDED
i określić lokalizację, w której zostało ono wykonane.
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 tokenem wydanym przez Twój serwer zgodnie z wytycznymi opisanymi w sekcjach Role kont 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