Finalizowanie zadań

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 lub FAILED. 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

  • &lt;id&gt; 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 albo FAILED
  • 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 opcjonalneWartość
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

  • &lt;id&gt; 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

Co dalej?