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

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

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

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

В этом документе описано, как создавать задачи, не связанные с отгрузкой, на вашем сервере. Информацию о типах задач, связанных с отгрузкой, см. в разделе «Создание задач, связанных с отгрузкой» .

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

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

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

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

Поле Ценить
type

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

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

Дополнительные поля для задач отгрузки

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

Создайте задачу, отобразившую недоступность.

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

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

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

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

В следующих примерах показано, как создать запланированную задачу на случай недоступности с помощью библиотеки 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 Web tokens» .

В теле запроса должна содержаться сущность 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 Web tokens» .

В теле запроса должна содержаться сущность 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

Что дальше?