Konfigurowanie zadań

W tym dokumencie zakładamy, że wiesz, jak tworzyć zadania i z nich korzystać. Przewodnik zawiera konkretne przykłady konfigurowania zadań dotyczących dostawy na te sposoby:

  • Ustaw docelowy przedział czasu dla zadania dotyczącego dostawy: ustaw przedział czasu. aby można było wykonać zadanie.

  • 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, oprócz pól, które aktualizujesz, musisz też podać odpowiedni identyfikator zadania.

Ustaw docelowy przedział czasu

Docelowy przedział czasu to okno czasowe, w którym zadanie powinno zostać wykonane. Na przykład jeśli podajesz przedział czasu dostawy odbiorców, możesz użyć przedziału czasu docelowego zadania, aby zarejestrować ten przedział czasu i generować alerty. Możesz też użyć tej funkcji, aby przeanalizować wyniki wcześniejszych podróży.

Przedział czasu docelowego składa się z godziny rozpoczęcia i godziny zakończenia. Można go ustawić dowolnego typu. Okno docelowe nie ma wpływu na zachowanie kierowania.

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ć przedział czasu zadania za pomocą HTTP, wywołaj PATCH i użyj narzędzia updateMask, by 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 o wartości Bearer <token>, gdzie &lt;token&gt; jest wydawany przez serwer zgodnie z wytycznymi opisane w sekcjach Role konta usługi i Tokeny 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 dla poszczególnych zadań, aby lepiej pasowały do Twoich potrzeb do 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 widoczności znacznika lokalizacji

Fleet Engine wyświetla znaczniki lokalizacji miejsca dostawy widoczne na mapie niezależnie od stanu dostawy.

Reguły widoczności danych zadań

W tej sekcji opisano domyślne reguły widoczności obowiązujące w przypadku danych zadań. Możesz dostosowywać tylko aktywne zadania związane z pojazdem, co oznacza, że Zadania związane z odbiorem i dostarczeniem mogą stosować niestandardowe reguły dotyczące widoczności.

Tych zadań nie można dostosować:

  • 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 pojawia się na mapie, jeśli co najmniej jeden zadanie niedostępności jest przypisane do śledzonego zadania; Na przykład, jeśli plik kierowca robi sobie przerwę lub uzupełnia paliwo w drodze do śledzonej przesyłki. Szacowany czas przybycia i szacowany czas wykonania zadania są nadal dostępne. Tu również nie można 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 kiedy pojazd znajduje się w odległości do 5 przystanków od zadania. Widoczność kończy się, gdy zadanie zostanie ukończone lub anulowane.

Konfigurację widoczności możesz dostosować dla poszczególnych zadań za pomocą: TaskTrackingViewConfig przy zadaniu podczas tworzenia lub aktualizowania zadania w ramach Fleet Engine. Tworzy to reguły, według których poszczególne elementy danych i dostępności informacji.

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

Pola zadań dotyczących pojazdów na potrzeby reguł widoczności
  • Linie łamane tras
  • Szacowany czas dotarcia
  • Szacowany czas ukończenia zadania
  • Pozostała odległość do przejechania do miejsca wykonania zadania
  • Pozostała liczba zatrzymania
  • Lokalizacja pojazdu

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

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

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

W przypadku śledzonej trasy widoczność linii łamanych zależy od samochodu. Jeśli linia łamana trasy jest widoczna na aktywnej trasie jeśli pojazd nie jest widoczny, jego lokalizacja może być nadal wywnioskowane na podstawie końca widocznej linii łamanej. Dlatego też linia łamana trasy widoczność musi być tak samo restrykcyjna jak widoczność pojazdu.

Aby podać prawidłowe linie łamane trasy lub lokalizację pojazdu, przestrzegaj tych zasad co do kombinacji widoczności.

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, takie jak:

  • liczba pozostałych przystanków
  • czas do szacowanego czasu dotarcia
  • pozostała odległość samochodem

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 podczas śledzenia trasa osiąga 5 przesiadek od miejsca wykonania zadania, pojazd pojawia się, ale trasa takiego pojazdu pojawi się dopiero po 3 przystankach.

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

Linie łamane na trasie i lokalizacja pojazdu określają różne opcje widoczności.

Jeśli linie wygięte na mapie 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 ścieżek obowiązują zasady widoczności pojazdu:

  • Zawsze widoczne: linia łamana trasy musi korzystać z opcji zawsze widoczne. gdy lokalizacja pojazdu zapewnia zawsze taki sam efekt widoczności.
  • Nigdy niewidoczne: linia łamana trasy musi mieć widoczność nigdy niewidoczna. gdy lokalizacja pojazdu ma opcję widoczności nigdy niewidoczny.

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 ścieżki wielokątów, jeśli pojazd znajduje się w odległości 3 przystanków.
  • Pokaż szacowany czas dotarcia, jeśli pozostała długość trasy 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 PATCH i użyj narzędzia updateMask, by 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?