Konfigurowanie zadań

Z dokumentu wynika, że wiesz, jak tworzyć zadania i z nich korzystać. Zawiera ona konkretne przykłady konfigurowania zadań dotyczących dostawy na te sposoby:

  • Ustaw docelowy przedział czasu dla zadania związanego z przesyłką: ustaw przedział czasu na ukończenie zadania.

  • Dostosowywanie widoczności zadań: możesz dostosować widoczność zadań do wyświetlania klientom lub operatorom floty.

Szczegółowe informacje o polach związanych z zadaniami dotyczącymi dostawy znajdziesz w artykule Tworzenie zadań dotyczących dostawy. Gdy aktualizujesz dodatkowe informacje o dotychczasowych zadaniach, musisz podać odpowiedni identyfikator zadania oprócz pól, które aktualizujesz.

Ustaw okno docelowe

Docelowy przedział czasu to TimeWindow, w którym zadanie powinno zostać wykonane. Jeśli na przykład przekazujesz odbiorcom okno dostawy, możesz użyć okna docelowego zadania, aby rejestrować to okno i generować alerty, lub analizować wyniki poprzednich przejazdów.

Okno czasowe docelowe obejmuje czas rozpoczęcia i zakończenia oraz może być ustawiane dla dowolnego typu zadania. Okno docelowe nie ma wpływu na kierowanie.

Poniższe przykłady pokazują, jak ustawić okno czasowe za pomocą biblioteki Java gRPC lub jak wysłać żądanie HTTP REST do UpdateTask. Możesz też ustawić to pole podczas tworzenia zadania.

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)
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .build();

  // Task request
  UpdateTaskRequest updateTaskRequest =
    UpdateTaskRequest.newBuilder()  // No need for the header
        .setTask(task)
        .setUpdateMask(FieldMask.newBuilder().addPaths("targetTimeWindow"))
        .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

Aby ustawić okno czasowe zadania za pomocą protokołu HTTP, wywołaj funkcję PATCH i użyj parametru updateMask, aby zaktualizować parametr targetTimeWindow:

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow

Tutaj <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 na koncie usługiTokeny sieciowe JSON.

# 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=targetTimeWindow" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
    "targetTimeWindow": {
      "startTime": "2023-03-29T21:00:00Z",
      "endTime": "2023-03-29T23:00:00Z"
    }
  }
  EOM

Dostosowywanie widoczności zadań

Domyślnie Fleet Engine zapewnia widoczność działań związanych z zadaniami, które mogą być wyświetlane zarówno klientom odbierającym przesyłkę, jak i operatorom floty śledzącym przesyłki. Obejmuje to informacje takie jak liczba przystanków przed wysłaniem powiadomienia o stanie dostawy przesyłki. Możesz dostosować te informacje w ramach poszczególnych zadań, aby lepiej dopasować je do swojego modelu biznesowego.

W tej sekcji opisujemy reguły widoczności obiektów śledzonych na mapie. Te reguły dotyczą 2 kategorii obiektów:

  • Widoczność znacznika lokalizacji
  • widoczność danych dotyczących zadań aktywnych pojazdów, takich jak linie łamane i szacowany czas dojazdu;

Reguły dotyczące widoczności znacznika lokalizacji

Silnik floty wyświetla znaczniki lokalizacji miejsca dostawy przesyłki na mapie, niezależnie od stanu dostawy.

Reguły dotyczące widoczności danych zadań

W tej sekcji opisano domyślne reguły widoczności, które mają zastosowanie do danych zadań. Możesz dostosować tylko aktywne zadania związane z pojazdem, co oznacza, że niestandardowe reguły widoczności mogą dotyczyć tylko zadań odbioru i dostarczania.

Nie można dostosować tych zadań:

  • Zaplanowane przystanki
  • Zadania dotyczące niedostępności
  • Zadania dotyczące nieaktywnych pojazdów

Reguły widoczności zadań niedostępności

Domyślnie pojazd nie jest widoczny na mapie, jeśli do śledzonego zadania przypisana jest co najmniej 1 zawartość zadania dotycząca niedostępności. Może to być na przykład przerwa kierowcy lub tankowanie pojazdu na trasie do śledzonego przesyłki. Szacowany czas przybycia i szacowany czas wykonania zadania są nadal dostępne. Ponownie: nie możesz dostosowywać tej reguły.

Widoczność aktywnych zadań związanych z pojazdem

Obiekt TaskTrackingInfo zawiera wiele elementów danych, które możesz wyświetlić za pomocą biblioteki śledzenia przesyłek. Domyślnie te pola są widoczne, gdy zadanie jest przypisane do pojazdu i pojazd znajduje się w odległości 5 przystanków od zadania. Widoczność kończy się, gdy zadanie zostanie ukończone lub anulowane.

Konfigurację widoczności możesz dostosować w przypadku poszczególnych zadań, ustawiając wartość TaskTrackingViewConfig w Fleet Engine podczas tworzenia lub aktualizowania zadania. W ten sposób tworzysz reguły dotyczące poszczególnych dostępnych elementów danych.

W tabeli poniżej znajdziesz pola, do których możesz stosować reguły widoczności.

Pola zadań dotyczących pojazdów w regułach widoczności
  • Linie łamane tras
  • Szacowany czas przybycia
  • Szacowany czas ukończenia zadania
  • Pozostała odległość do przejechania do miejsca wykonania zadania
  • Pozostały licznik przystanków
  • Lokalizacja pojazdu

Ta tabela zawiera opcje widoczności dostępne dla wymienionych powyżej pól.

Opcje widoczności
  • Pozostały licznik przystanków
  • Czas do szacowanego czasu przyjazdu
  • Pozostała odległość do przejechania
  • Zawsze widoczne
  • Nigdy nie widoczne

Linie brzegowe tras i reguły dotyczące widoczności lokalizacji pojazdu

W przypadku śledzenia trasy widoczność linii łamanych zależy od widoczności pojazdu. Jeśli na aktywnej trasie widoczna jest linia złożona, a pojazd nie jest widoczny, lokalizację pojazdu można nadal określić na podstawie końca widocznej linii złożonej. Dlatego widoczność polilinii trasy musi być tak restrykcyjna jak widoczność pojazdu lub bardziej restrykcyjna.

Aby podać prawidłową kombinację widoczności i polilinii trasy / lokalizacji pojazdu, postępuj zgodnie z tymi zasadami.

Odcinki trasy i lokalizacja pojazdu mają te same opcje widoczności.

W tym scenariuszu zarówno linia wielokąta, jak i lokalizacja pojazdu mają te same opcje, w tym:

  • liczba pozostałych przystanków
  • czas do ETA
  • pozostały dystans do przejechania

Aby przestrzegać zasad, wartość widoczności ścieżek wielokątów musi być mniejsza lub równa wartości ustawionej dla widoczności pojazdu. W tym przykładzie próg pozostałych przystanków dla polilinii jest ustawiony na 3, co jest mniejsze niż wartość 5 określona dla pojazdu. Oznacza to, że gdy śledzenie przejazdu znajduje się w odległości 5 przystanków od lokalizacji zadania, pojazd jest widoczny, ale trasa dla tego pojazdu nie pojawia się, dopóki przejazd nie jest w odległości 3 przystanków od celu.

```js
"taskTrackingViewConfig": {
  "routePolylinePointsVisibility": {
    "remainingStopCountThreshold": 3
  },
  "vehicleLocationVisibility": {
    "remainingStopCountThreshold": 5
  },
}
```

Ścieżki wielokątów i lokalizacja pojazdu określają różne opcje widoczności.

Jeśli linie wygięte trasy i położenie pojazdu mają różne opcje widoczności, położenie pojazdu jest widoczne tylko wtedy, gdy oba te opcje są spełnione. Podobnie jak w przypadku widoczności łańcucha punktów widoczność pojazdu podlega następującym regułom:

  • Zawsze widoczne: linia złożona z punktów na trasie musi używać opcji zawsze widoczne, gdy lokalizacja pojazdu również korzysta z tej samej opcji zawsze widoczne.
  • Nigdy nie widoczny: linia brzegowa trasy musi używać opcji nigdy nie widoczny, gdy lokalizacja pojazdu używa opcji nigdy nie widoczny.

Oto przykład:

  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "vehicleLocationVisibility": {
      "remainingDrivingDistanceMetersThreshold": 3000
    },
  }

W tym przykładzie lokalizacja pojazdu jest widoczna tylko wtedy, gdy liczba pozostałych przystanków wynosi co najmniej 3 I odległość do przejechania wynosi co najmniej 3000 metrów.

Przykładowe dostosowywanie widoczności zadań

Z poniższych przykładów dowiesz się, jak ustawić zadanie z tymi regułami widoczności:

  • Pokazuj linie złożone trasy, jeśli pojazd znajduje się w odległości 3 przystanków.
  • Wyświetlanie czasu dojazdu, jeśli pozostała odległość do przejechania jest krótsza niż 5000 metrów.
  • Nigdy nie wyświetlaj liczby pozostałych przystanków.
  • Pozostałe pola mają domyślną widoczność, która jest wyświetlana, gdy pojazd znajduje się w odległości 5 przystanków od zadania.

Aby uzyskać informacje o gRPC lub interfejsie REST, zobacz TaskTrackingViewConfig.

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)
  .setTaskTrackingViewConfig(
    TaskTrackingViewConfig.newBuilder()
      .setRoutePolylinePointsVisibility(
        VisibilityOption.newBuilder().setRemainingStopCountThreshold(3))
      .setEstimatedArrivalTimeVisibility(
        VisibilityOption.newBuilder().remainingDrivingDistanceMetersThreshold(5000))
      .setRemainingStopCountVisibility(
        VisibilityOption.newBuilder().setNever(true)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("taskTrackingViewConfig"))
      .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

Aby ustawić okno konfiguracji widoku śledzenia zadań za pomocą protokołu HTTP, wywołaj funkcję PATCH i użyj parametru updateMask, aby zaktualizować parametr taskTrackingViewConfig:

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig

Na przykład:

# 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=taskTrackingViewConfig" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "estimatedArrivalTimeVisibility": {
      "remainingDrivingDistanceMetersThreshold": 5000
    },
    "remainingStopCountVisibility": {
      "never": true
    }
  }
}
EOM

Co dalej?