Zakładamy w nim, że wiesz, jak tworzyć zadania i ich używać. Zapewnia z konkretnych przykładów realizacji zadań związanych z dostawą:
Zamknięcie zadania: zamknięcie zadania dotyczącego dostawy zmienia jego stan 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
. To ważne, jest częścią finalizacji zadania, aby pokazać wyniki realizacji na ścieżce do zakupu. udostępnianie danych i zapewnienie prawidłowych rozliczeń za usługę Fleet Engine.
Zamykanie zadania
Zadania możesz zamykać na te sposoby:
- Aktualizowanie stanu zatrzymania pojazdu. Usuwasz przystanek z pojazdu, co z kolei spowoduje zamknięcie wszystkich zadań związanych z przystankiem. Więcej informacji znajdziesz w artykule o zmianie stanu.
- Usuń zadanie z listy postojów dla pojazdów. Polega to na zaktualizowaniu listy zadań dla przystanku, ale zamknięte zadanie nie jest już częścią listy. Zobacz sekcję Aktualizowanie kolejności zadań w artykule Aktualizowanie zadań.
- Ustaw stan zadania na
CLOSED
. Można to zrobić tylko na zadaniach niebędących przypisane do pojazdów. Informacje o tym podejściu znajdziesz w tej sekcji.
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ż w toku. Aby wskazać rzeczywisty wynik zadania, który będzie widoczny na potrzeby śledzenia floty. w celach związanych ze współpracą, należy wskazać rzeczywisty wynik zadania. Zobacz Określ wynik zadania poniżej.
Pola zadania dotyczące zamykania zadań
W tej sekcji znajdziesz informacje o wymaganych polach, które należy ustawić podczas zamykania zadania. Fleet Engine ignoruje wszystkie inne pola w jednostce na potrzeby aktualizacji.
Pole wymagane | Wartość |
---|---|
state |
State.CLOSED |
Bezpośrednie zamykanie zadania
W przykładach poniżej pokazujemy, jak ustawić nieprzypisane zadanie jako zamknięte.
w gRPC albo 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 z wartością Bearer <token>, gdzie <token> jest wydawany przez serwer zgodnie z wytycznymi opisanymi w artykule Role na koncie usługi oraz Tokeny internetowe 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
Wyznacz wynik zadania
Aby wskazać rzeczywisty wynik zadania, dla zamkniętych zadań ustawiasz wynik na SUCCEEDED
lub FAILED
. Zadanie musi zostać zamknięte, zanim ustawisz jego
wyniki. Fleet Engine pobiera opłaty tylko za zadania dostawy o stanie
SUCCEEDED
Szczegóły wyniku zadania
Zadania zawierają też dodatkowe informacje o wyniku działania. Możesz ustawić te wartości: bezpośrednio, a Fleet Engine będzie przestrzegać Twoich ustawień:
- Lokalizacja wyniku zadania: Fleet Engine automatycznie wypełnia zadanie. lokalizację wyniku z ostatnią znaną lokalizacją pojazdu. Jeśli wolisz, możesz podać je w innej formie.
- Czas wyniku zadania: Fleet Engine nie wypełnia tego pola, ale jest które można ustawić.
Możesz użyć dowolnej z poniższych metod, aby ustawić task_outcome_location
i task_outcome_time
:
- Zaktualizuj je w tym samym żądaniu, które określa wynik zadania.
- Zaktualizuj je później, gdy ustawisz wynik zadania.
- Zmień je ponownie po ustawieniu.
Fleet Engine uniemożliwia te aktualizacje związane z wynikami zadań:
- Nie można zmienić wyniku zadania, jeśli jest on ustawiony na
SUCCEEDED
alboFAILED
- Nie możesz ustawić lokalizacji ani czasu wyniku w przypadku zadań bez na określony wynik.
Pola zadania do ustawiania wyniku
W tej sekcji opisujemy pola wymagane i opcjonalne, które należy ustawić podczas konfigurowania w wyniku wykonania zadania. Podczas aktualizacji Fleet Engine ignoruje inne pola w jednostce.
Pole wymagane | Wartość |
---|---|
taskOutcome |
Outcome.SUCCEEDED lub Outcome.FAILED |
Pole opcjonalne | Wartość |
---|---|
taskOutcomeLocation |
Lokalizacja, w której zadanie zostało ukończone. Jeśli nie zostanie ustawiona, Fleet Engine domyślnie ustawiana jest ostatnia lokalizacja pojazdu. |
taskOutcomeTime |
Sygnatura czasowa określająca, kiedy zadanie zostało ukończone. |
Przykłady wyników zadania
Poniższy przykład pokazuje, jak korzystać z biblioteki gRPC Java oraz protokołu HTTP.
wywołanie REST do UpdateTask
w celu ustawienia wyniku zadania na SUCCEEDED
i ustawienia
miejsce, w którym zadanie zostało 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 z wartością Bearer <token>, gdzie <token> jest wydawany przez serwer zgodnie z wytycznymi opisanymi w artykule Role na koncie usługi oraz Tokeny internetowe 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