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 związane z brakiem dostępności: używaj go, gdy kierowcy nie są dostępni, np. w sytuacjach, gdy wymagane są przerwy.
- Zadania zaplanowanych zatrzymania: używaj w przypadku zadań niezwiązanych z prowadzeniem samochodu w skrzynkach referencyjnych lub lokalizacjach klientów, np. dotyczących czasu wejścia do budynku lub zlokalizowania punktu dostawy.
Z tego dokumentu dowiesz się, jak tworzyć na serwerze zadania dostawy. Informacje o innych typach zadań znajdziesz w artykule Tworzenie innych typów zadań.
Pola zadania dostawy
W tej sekcji znajdziesz opis pól zadań, które są potrzebne do wykonania zarówno zadań odbioru, jak i dostawy.
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 wyrzuca wyjątek, jeśli żądanie utworzenia zadania zawiera przypisane deliveryVehicleId
. Aby przypisać zadania do pojazdu, użyj funkcji UpdateDeliveryVehicleRequest
. Więcej informacji znajdziesz w artykule Aktualizowanie zadań.
Pole | Wartość |
---|---|
type |
Ustaw typ zgodny z typem zadania, który może być jeden z tych:
|
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 artykule o identyfikatorach zadań. |
tracking_id |
Tylko zadania PICKUP lub DELIVERY : numer lub identyfikator, którego używasz do śledzenia przesyłki. Nie podawaj tego pola w przypadku zadań niezwiązanych z wysyłką. |
plannedLocation |
PICKUP , DELIVERY lub SCHEDULED_STOP tylko zadania: lokalizacja, w której ma zostać wykonane zadanie. Nie jest wymagane w przypadku UNAVAILABLE zadań. |
taskDuration |
Szacowany czas potrzebny na ukończenie zadania. Możesz na przykład poszukać parkingu lub przejść do miejsca, w którym zawrzesz zamówienie. |
Opcjonalne pola zadania związanego z wysyłką
Pole | Wartość |
---|---|
targetTimeWindow |
Okno czasowe, w którym należy wykonać zadanie. To pole nie ma wpływu na sposób kierowania. |
task_tracking_view_config |
Tylko zadania PICKUP lub DELIVERY : konfiguracja śledzenia zadań określająca, które elementy danych są widoczne dla użytkowników w konkretnych okolicznościach. |
attributes |
Lista atrybutów niestandardowych zadań. Każdy atrybut musi mieć unikalny klucz. |
Tworzenie zadania odbioru przesyłki
Aby używać Fleet Engine do śledzenia aktywności kierowcy podczas odbioru przesyłki, utwórz zadanie odbioru przesyłki. Wymaga to ustawienia atrybutu typu zadania na PICKUP
. Poniższy przykład ilustruje odbiór przesyłki z Grand Indonesia East Mall.
Poniższe przykłady pokazują, jak utworzyć zadanie odbioru przesyłki 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.PICKUP)
.setState(Task.State.OPEN)
.setTrackingId("my-tracking-id")
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
.addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
.addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
.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 a 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 odbioru przesyłki w środowisku 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 o wartości Bearer <token>, gdzie <token> jest wydawany przez serwer zgodnie z wytycznymi opisanymi w artykułach Role kont usługi i Kody dostępu JSON.
Treść żądania musi zawierać element Task
z odpowiednimi polami opisanymi w sekcji Pola zadania dotyczącego dostawy.
Przykład polecenia curl
:
# Set $JWT, $PROJECT_ID, $TRACKING_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": "PICKUP",
"state": "OPEN",
"trackingId": "${TRACKING_ID}",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "90s",
"targetTimeWindow": {
"startTime": "2023-03-29T21:00:00Z",
"endTime": "2023-03-29T23:00:00Z"
}
}
EOM
Tworzenie zadania dostawy przesyłki
Aby wykorzystać Fleet Engine do śledzenia aktywności kierowcy dostarczającego przesyłkę, utwórz zadanie dostarczenia przesyłki. Polega to na ustawieniu atrybutu typu zadania na DELIVERY
. Poniższy przykład przedstawia dostawę do centrum handlowego GrandIndonesia East Mall.
Poniższe przykłady pokazują, jak utworzyć zadanie odbioru przesyłki 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.DELIVERY)
.setState(Task.State.OPEN)
.setTrackingId("my-tracking-id")
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.setTargetTimeWindow(
TimeWindow.newBuilder()
.setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
.setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
.addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
.addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
.addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
.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 odbioru przesyłki w środowisku 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 artykule Role konta usługi i tokeny sieciowe JSON.
Treść żądania musi zawierać element Task
:
Przykładowe polecenie curl
:
# Set $JWT, $PROJECT_ID, $TRACKING_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": "DELIVERY",
"state": "OPEN",
"trackingId": "${TRACKING_ID}",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "90s",
"targetTimeWindow": {
"startTime": "2023-03-29T21:00:00Z",
"endTime": "2023-03-29T23:00:00Z"
}
}
EOM
```