Создание других типов задач

В этом документе предполагается, что вы прочитали вводное руководство по запланированным задачам в разделе «Введение в Fleet Engine» , а также «Что такое запланированное задание?» в этом разделе.

Fleet Engine для запланированных задач предоставляет различные широкие категории задач:

  • Задачи по доставке : используйте для задач по вождению, включая получение и доставку грузов.
  • Задачи, связанные с недоступностью : используйте в случаях, когда водители недоступны, например, во время необходимых перерывов.
  • Запланированные остановки : используйте для задач, не связанных с вождением, в почтовых ящиках или местах расположения клиентов, например, время для входа в здание или местонахождение пункта доставки.

В этом документе описывается, как создавать на вашем сервере задачи , не связанные с доставкой . Типы задач по отправке см. в разделе Создание задач по отправке .

Поля задач для задач, не связанных с вождением

В этом разделе описаны поля задач, необходимые как для задач недоступности, так и для запланированной остановки.

Обязательные поля задачи

Для каждой задачи, которую вы создаете в Fleet Engine, вы должны предоставить ей обязательные поля, а также можете указать любые дополнительные поля. Fleet Engine игнорирует все остальные поля и выдает исключение, если запрос на создание задачи предоставляет назначенный deliveryVehicleId . Чтобы назначить задачи транспортному средству, используйте UpdateDeliveryVehicleRequest . Дополнительные сведения см. в разделе Задачи обновления .

Поле Ценить
type

Установите тип, соответствующий типу задачи, который является одним из:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id Уникальный идентификатор задачи. Это не должен быть номер отслеживания посылки. Если в вашей системе нет идентификаторов задач, вы можете создать универсальный уникальный идентификатор (UUID). Подробности см. в разделе «Идентификаторы задач» .
tracking_id Только задачи PICKUP или DELIVERY : номер или идентификатор, который вы используете для отслеживания отправления. Не указывайте это поле для задач, не связанных с отгрузкой.
plannedLocation Только задачи PICKUP , DELIVERY или SCHEDULED_STOP : место, где задача должна быть завершена. Не требуется для UNAVAILABLE задач.
taskDuration Ожидаемое время добавления для завершения задачи. Например, чтобы найти парковку или дойти до места передачи.

Дополнительные поля задачи по доставке

Поле Ценить
targetTimeWindow Временной интервал, в течение которого задача должна быть выполнена. Это поле не влияет на поведение маршрутизации.
task_tracking_view_config Только задачи PICKUP или DELIVERY : конфигурация для отслеживания задач, которая определяет, какие элементы данных видны конечным пользователям и при каких обстоятельствах.
attributes Список пользовательских атрибутов задачи. Каждый атрибут должен иметь уникальный ключ.

Создайте задачу недоступности

Вы можете создать задачу с указанием недоступности; например, для перерывов для водителя. Чтобы создать задачу недоступности, используйте следующие рекомендации:

  • Установите тип задачи UNAVAILABLE .
  • Не указывайте идентификатор отслеживания.
  • Хотя вам не нужно указывать местоположение для задачи недоступности, это обеспечивает расширенные расчеты расчетного времени прибытия в течение дня.

Особые правила видимости применяются к местоположению транспортного средства, когда оно находится в UNAVAILABLE задании для совместного путешествия.

  • Потребительские приложения, интегрированные с библиотекой отслеживания поставок . Когда автомобиль находится в состоянии недоступности, пользователи потребительского приложения не могут видеть местоположение автомобиля, хотя они все равно могут видеть информацию о состоянии своего груза.
  • Приложения для отслеживания автопарка, интегрированные с библиотекой отслеживания автопарка . Когда транспортное средство находится в режиме недоступности, менеджеры автопарка, использующие приложение для отслеживания автопарка, смогут видеть местоположение транспортного средства для выполнения задач по недоступности.

В следующих примерах показано, как создать запланированную задачу недоступности с помощью библиотеки Java gRPC или как выполнить запрос 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;
  }
  ```

ОТДЫХ

Чтобы создать задачу недоступности из серверной среды, выполните HTTP REST-вызов CreateTask :

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

<id> — уникальный идентификатор задачи.

Заголовок запроса должен содержать поле Authorization со значением Bearer <token> , где <token> выдается вашим сервером в соответствии с рекомендациями, описанными в разделе Роли учетной записи службы и веб-токены JSON .

Тело запроса должно содержать сущность Task с соответствующими полями, описанными в разделе Поля задачи для задач, не связанных с вождением .

Пример команды 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

Создать задачу плановой остановки

Вы можете создать задачу на плановую остановку; например, для задач, не связанных с вождением, в местах расположения клиентов, для остановок для заправки или для случаев, когда водитель получает груз от подвозящего транспортного средства. При создании задачи запланированной остановки используйте следующие рекомендации:

  • Установите тип задачи
  • Не указывайте идентификатор отслеживания.
  • При желании вы можете указать местоположение.

В следующих примерах показано, как создать запланированную задачу недоступности с помощью библиотеки Java gRPC или как выполнить запрос 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.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;
  }
  ```

ОТДЫХ

Чтобы создать задачу запланированной остановки из серверной среды, выполните HTTP REST-вызов CreateTask :

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

<id> — уникальный идентификатор задачи.

Заголовок запроса должен содержать поле Authorization со значением Bearer <token> , где <token> выдается вашим сервером в соответствии с рекомендациями, описанными в разделе Роли учетной записи службы и веб-токены JSON .

Тело запроса должно содержать сущность Task :

Пример команды 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

Что дальше