Tworzenie innych typów zadań

W tym dokumencie zakładamy, że przeczytałeś/przeczytałaś przewodnik wprowadzający Zaplanowane zadania w sekcji Wprowadzenie do Fleet Engine oraz Co to jest zaplanowane zadanie? w tej sekcji.

Silnik floty do zadań zaplanowanych obejmuje różne ogólne kategorie zadań:

  • Zadania związane z dostawami: służą do wykonywania zadań związanych z prowadzeniem pojazdu, w tym odbierania i dostarczania przesyłek.
  • Zadania dotyczące niedostępności: używaj ich, gdy kierowcy są niedostępni, na przykład podczas przerw.
  • Zadania związane z planowanymi postojami: używaj ich do wykonywania zadań niezwiązanych z prowadzeniem pojazdu w miejscach odbioru przesyłek lub w miejscach docelowych klientów, takich jak czas na wejście do budynku lub znalezienie punktu dostawy.

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

Pola zadania dotyczące zadań niezwiązanych z prowadzeniem

W tej sekcji opisano pola zadania wymagane w przypadku zadań niedostępności i zaplanowanych zadań zatrzymania.

Wymagane pola zadania

W przypadku każdego zadania utworzonego w Fleet Engine musisz podać wymagane pola, a także możesz podać dowolne pola opcjonalne. Fleet Engine ignoruje wszystkie inne pola i zgłasza wyjątek, jeśli żądanie utworzenia zadania zawiera przypisane deliveryVehicleId. Aby przypisać zadania do pojazdu, użyj elementu UpdateDeliveryVehicleRequest. Więcej informacji znajdziesz w artykule Aktualizowanie zadań.

PoleWartość
type

Ustaw typ zgodny z typem zadania, który może być 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 w Twoim systemie nie ma identyfikatorów zadań, możesz wygenerować unikalny identyfikator uniwersalny (UUID). Szczegółowe informacje znajdziesz w sekcji Identyfikatory zadań.
tracking_id PICKUP lub DELIVERY tylko zadania: Numer lub identyfikator używany do śledzenia przesyłki. Nie podawaj tego pola w przypadku zadań, które nie dotyczą wysyłki.
plannedLocation PICKUP, DELIVERY lub SCHEDULED_STOP tylko zadania: lokalizacja, w której ma zostać wykonane zadanie. Nie jest wymagane w przypadku zadań UNAVAILABLE.
taskDuration Przewidywany czas potrzebny na wykonanie zadania. Na przykład aby znaleźć miejsce parkingowe lub dotrzeć do miejsca przekazania.

Opcjonalne pola zadania związanego z wysyłką

PoleWartość
targetTimeWindow Okno czasowe, w którym należy wykonać zadanie. To pole nie ma wpływu na sposób kierowania.
task_tracking_view_config PICKUP lub DELIVERY tylko zadania: konfiguracja śledzenia zadań, która określa, które elementy danych są widoczne dla użytkowników i w jakich okolicznościach.
attributes Lista atrybutów niestandardowych zadań. Każdy atrybut musi mieć unikalny klucz.

Tworzenie zadania dotyczącego niedostępności

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

  • Ustaw typ zadania na UNAVAILABLE.
  • Nie podawaj identyfikatora śledzenia.
  • Nie musisz podawać lokalizacji w przypadku zadania dotyczącego niedostępności, ale dzięki temu możesz uzyskać ulepszone obliczenia czasu dojazdu w ciągu dnia.

Do lokalizacji pojazdu, gdy jest ona przypisana do zadania UNAVAILABLE polegającego na udostępnianiu trasy, mają zastosowanie specjalne reguły widoczności.

  • Aplikacje dla konsumentów zintegrowane z biblioteką śledzenia przesyłek: gdy pojazd jest niedostępny, użytkownicy aplikacji dla konsumentów nie mogą zobaczyć jego lokalizacji, ale nadal mogą sprawdzać informacje o stanie przesyłki.
  • Aplikacje do śledzenia floty zintegrowane z biblioteką śledzenia floty: gdy pojazd jest w trybie niedostępności, menedżerowie floty, którzy korzystają z aplikacji do śledzenia floty, będą mogli zobaczyć lokalizację pojazdu w przypadku zadań niedostępności.

Poniższe przykłady pokazują, jak utworzyć zaplanowane zadanie dotyczące niedostępności za pomocą biblioteki Java gRPC 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 dotyczące niedostępności w środowisku 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 o wartości Bearer <token>, gdzie <token> jest wydawany przez serwer zgodnie z wytycznymi opisanymi w artykule Role na kontach usługitokeny sieciowe JSON.

Treść żądania musi zawierać kwalifikowaną encję Task z odpowiednimi polami opisanymi w sekcji Pola zadania dotyczące zadań nieobejmujących jazdy.

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, na przykład w przypadku zadań niezwiązanych z prowadzeniem pojazdu w miejscach obsługi klienta, przystanków na tankowanie lub w przypadku odbioru przesyłek z pojazdów zasilających. Podczas tworzenia zaplanowanego zadania zatrzymania postępuj zgodnie z tymi wskazówkami:

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

Poniższe przykłady pokazują, jak utworzyć zaplanowane zadanie dotyczące niedostępności za pomocą biblioteki Java gRPC 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 z poziomu ś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 o wartości Bearer <token>, gdzie <token> jest wydawany przez serwer zgodnie z wytycznymi opisanymi w artykule Role na kontach usługitokeny sieciowe JSON.

Treść żądania musi zawierać element 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?