Tworzenie innych typów zadań

W tym dokumencie zakładamy, że znasz już przewodnik Zaplanowane zadania w sekcji Wprowadzenie do Fleet Engine. jako Co to jest zaplanowane zadanie? w tej sekcji.

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

  • Zadania związane z dostawą: używaj do zadań związanych z kierowaniem, takich jak odbiór i dostawa przesyłek.
  • Zadania związane z niedostępnością: użyj w sytuacjach, gdy kierowcy nie są dostępni, na przykład: tak jak w przypadku wymaganych 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.

W tym dokumencie opisujemy, jak tworzyć na serwerze zadania niezwiązane z wysyłką. Dla: typy zadań związanych z dostawą znajdziesz w artykule Tworzenie zadań związanych z dostawą.

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

W tej sekcji znajdziesz informacje o polach zadań wymaganych w obu przypadkach. i zaplanowanego zatrzymania.

Wymagane pola zadań

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 pozostałe pola i zgłasza wyjątek, jeśli utworzenie zadania żądanie dostarcza przypisanego elementu deliveryVehicleId. Aby przypisać zadania do pojazdu: użyj funkcji UpdateDeliveryVehicleRequest. Więcej informacji: Aktualizowanie zadań

PoleWartość
type

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

  • 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 systemie nie ma identyfikatorów zadań, możesz wygenerować uniwersalny (UUID). Szczegółowe informacje znajdziesz w sekcji Identyfikatory zadań.
tracking_id Tylko zadania PICKUP lub DELIVERY: Numer lub identyfikator, którego używasz do śledzenia przesyłki. Nie wolno wpisz to pole w przypadku zadań niezwiązanych z wysyłką.
plannedLocation PICKUP, DELIVERY lub SCHEDULED_STOP tylko zadania: lokalizacja, w której ma zostać wykonane zadanie. Niewymagane w przypadku UNAVAILABLE zadań.
taskDuration Szacowany czas potrzebny na ukończenie zadania. Aby na przykład sprawdzić, aby zaparkować pojazd, lub przejść do miejsca przekazania.

Opcjonalne pola zadania dotyczące przesyłki

PoleWartość
targetTimeWindow Okno czasowe, w którym należy wykonać zadanie. To pole nie ma wpływu na routing.
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 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ść. na przykład w przypadku 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.
  • W przypadku zadania dotyczącego niedostępności nie musisz podawać lokalizacji, Dzięki temu w ciągu dnia będą mogli obliczać szacowany czas dotarcia na miejsce.

Do lokalizacji pojazdu obowiązują specjalne zasady dotyczące widoczności, gdy jest ona UNAVAILABLE zadanie do udostępniania podróży.

  • Aplikacje konsumenckie zintegrowane z biblioteką śledzenia przesyłki: gdy tag jeśli pojazd ma uruchomione zadanie związane z niedostępnością, użytkownicy aplikacji lokalizacji pojazdu, chociaż nadal mogą zobaczyć informacje o jej stanie przesyłki.
  • Aplikacje do śledzenia floty zintegrowane z biblioteką śledzenia floty: gdy pojazd jest objęty zadaniem niedostępności, menedżerowie floty korzystają z floty aplikacja śledząca będzie mogła wyświetlić lokalizację pojazdu w przypadku zadań związanych z niedostępnością.

Poniższe przykłady pokazują, jak utworzyć zaplanowane zadanie dotyczące niedostępności za pomocą bibliotekę gRPC Java lub sposób tworzenia żądania HTTP REST, 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, utwórz żądanie HTTP typu REST połączenie do CreateTask:

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

&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 z odpowiednimi polami opisane w sekcji Pola zadań w przypadku zadań nieprowadzących.

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 samochodu w punktach obsługi klienta, na postojach na paliwo lub gdy kierowca otrzymuje przesyłek z pojazdu zbiorczego. Tworząc zaplanowane zatrzymywanie, użyj z tymi wytycznymi:

  • Ustaw typ zadania na
  • Nie podawaj identyfikatora śledzenia.
  • Możesz opcjonalnie 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 w środowisku serwera, utwórz żądanie HTTP typu REST połączenie 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 artykule Role na koncie usługi oraz Tokeny internetowe 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?