Tworzenie innych typów zadań

W tym dokumencie zakładamy, że znasz już przewodnik wprowadzający do zaplanowanych zadań w sekcji Wprowadzenie do Fleet Engine oraz artykuł Czym jest zaplanowane zadanie? w tej sekcji.

Fleet Engine do zaplanowanych zadań udostępnia różne ogólne kategorie zadań:

  • Zadania związane z przesyłkami: używaj do zadań związanych z jazdą, w tym do odbioru i dostawy przesyłek.
  • Zadania związane z niedostępnością: używaj ich, gdy kierowcy są niedostępni, np. podczas wymaganych przerw.
  • Zaplanowane zadania związane z zatrzymaniem: używaj do zadań niezwiązanych z jazdą, takich jak czas na wejście do budynku lub zlokalizowanie punktu dostawy.

Z tego dokumentu dowiesz się, jak tworzyć na serwerze zadania niezwiązane z dostawą. Informacje o typach zadań związanych z dostawą znajdziesz w artykule Tworzenie zadań związanych z dostawą.

Pola zadań niezwiązanych z prowadzeniem pojazdu

W tej sekcji opisano pola zadań wymagane w przypadku zadań związanych z niedostępnością i zaplanowanym zatrzymaniem.

Wymagane pola zadania

W przypadku każdego zadania tworzonego we Fleet Engine musisz podać wymagane pola. Możesz też podać dowolne pola opcjonalne. Fleet Engine ignoruje wszystkie pozostałe pola i zgłasza wyjątek, jeśli żądanie utworzenia zadania zawiera przypisany identyfikator deliveryVehicleId. Aby przypisać zadania do pojazdu, użyj UpdateDeliveryVehicleRequest. Więcej informacji znajdziesz w artykule Aktualizowanie zadań.

PoleWartość
type

Ustaw typ, który odpowiada typowi zadania, czyli jeden z tych:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id Unikalny identyfikator zadania. Nie może to być numer śledzenia przesyłki. Jeśli nie masz w systemie identyfikatorów zadań, możesz wygenerować unikalny identyfikator uniwersalny (UUID). Szczegółowe informacje znajdziesz w sekcji Identyfikatory zadań.
tracking_id Tylko zadania PICKUP lub DELIVERY: numer lub identyfikator używany do śledzenia przesyłki. Nie podawaj tego pola w przypadku zadań innych niż dostawa.
planned_location Tylko zadania PICKUP, DELIVERY lub SCHEDULED_STOP: lokalizacja, w której zadanie ma zostać wykonane. Nie jest wymagane w przypadku zadań UNAVAILABLE.
task_duration Oczekiwany czas potrzebny na wykonanie zadania. Na przykład aby poszukać parkingu lub dojść do miejsca przekazania.

Opcjonalne pola zadania przesyłki

PoleWartość
target_time_window Przedział czasu, w którym zadanie powinno zostać ukończone. To pole nie wpływa na działanie routingu.
task_tracking_view_config Tylko zadania PICKUP lub DELIVERY: konfiguracja śledzenia zadań, która określa, które elementy danych są widoczne dla użytkowników i w jakich okolicznościach.
attributes Lista niestandardowych atrybutów zadań. Każdy atrybut musi mieć unikalny klucz.

Tworzenie zadania dotyczącego niedostępności

Możesz utworzyć zadanie wskazujące niedostępność, np. na czas przerw kierowcy. Aby utworzyć zadanie niedostępności, postępuj zgodnie z tymi wskazówkami:

  • Ustaw typ zadania na UNAVAILABLE.
  • Nie podawaj identyfikatora śledzenia.
  • Chociaż nie musisz podawać lokalizacji zadania niedostępności, zrobienie tego zapewnia lepsze obliczenia szacowanego czasu dotarcia na miejsce w ciągu dnia.

W przypadku lokalizacji pojazdu obowiązują specjalne reguły widoczności, gdy jest on w trakcie zadania UNAVAILABLE związanego z udostępnianiem przejazdu.

  • Aplikacje użytkownika zintegrowane z biblioteką śledzenia przesyłek: gdy pojazd wykonuje zadanie niedostępności, użytkownicy aplikacji użytkownika nie widzą jego lokalizacji, ale nadal mogą wyświetlać informacje o stanie przesyłki.
  • Aplikacje do śledzenia floty zintegrowane z biblioteką śledzenia floty: gdy pojazd wykonuje zadanie niedostępności, menedżerowie floty, którzy korzystają z aplikacji do śledzenia floty, mogą zobaczyć lokalizację pojazdu w przypadku zadań niedostępności.

Poniższe przykłady pokazują, jak utworzyć zaplanowane zadanie niedostępności za pomocą biblioteki gRPC w języku Java lub jak wysłać żądanie HTTP REST do CreateTask.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String parent = "providers/" + PROJECT_ID;
  Task task = Task.newBuilder()
    .setType(Task.Type.UNAVAILABLE)
    .setState(Task.State.OPEN)
    .setTaskDuration(
      Duration.newBuilder().setSeconds(60 * 60))  // 1hr break
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)          // Avoid using auto-incrementing IDs for the taskId
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTask(task)              // Initial state
        .build();

  // Error handling
  // If Fleet Engine does not have task with that ID and the credentials of the
  // requestor pass, the service creates the task successfully.

  try {
    Task createdTask = deliveryService.createTask(createTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case ALREADY_EXISTS:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }
  ```

REST

Aby utworzyć zadanie niedostępności ze środowiska serwera, wykonaj wywołanie HTTP REST do CreateTask:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

<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 artykułach Role kont usługi i Tokeny sieciowe JSON.

Treść żądania musi zawierać element Task z odpowiednimi polami opisanymi w sekcji Pola zadań niezwiązanych z jazdą.

Przykładowe polecenie curl:

 # Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
 curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "type": "UNAVAILABLE",
   "state": "OPEN",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "300s"
 }
 EOM

Tworzenie zaplanowanego zadania zatrzymania

Możesz utworzyć zadanie dla zaplanowanego przystanku, np. zadania niezwiązane z jazdą w lokalizacjach klientów, przystanki na tankowanie lub odbiór przesyłek przez kierowcę z pojazdu dostawczego. Podczas tworzenia zadania zaplanowanego zatrzymania postępuj zgodnie z tymi wskazówkami:

  • Ustaw typ zadania na
  • Nie podawaj identyfikatora śledzenia.
  • Możesz też podać lokalizację.

Poniższe przykłady pokazują, jak utworzyć zaplanowane zadanie niedostępności za pomocą biblioteki gRPC w języku Java lub jak wysłać żądanie HTTP REST do CreateTask.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String parent = "providers/" + PROJECT_ID;
  Task task = Task.newBuilder()
    .setType(Task.Type.SCHEDULED_STOP)
    .setState(Task.State.OPEN)
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTrip(task)              // Initial state
        .build();

  // Error handling
  // If Fleet Engine does not have task with that ID and the credentials of the
  // requestor pass, the service creates the task successfully.

  try {
    Task createdTask = deliveryService.createTask(createTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case ALREADY_EXISTS:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }
  ```

REST

Aby utworzyć zaplanowane zadanie zatrzymania ze środowiska serwera, wyślij wywołanie HTTP REST do CreateTask:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

<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 artykułach Role kont usługi i Tokeny sieciowe JSON.

Treść żądania musi zawierać encję Task:

Przykładowe polecenie curl:

# Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
 curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "type": "SCHEDULED_STOP",
   "state": "OPEN",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "600s"
 }
 EOM

Co dalej?