Создание задач по отправке

В этом документе предполагается, что вы ознакомились с вводным руководством по планируемым задачам в разделе «Введение в 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 Список пользовательских атрибутов задачи. Каждый атрибут должен иметь уникальный ключ.

Создать задачу по приему груза

Чтобы использовать Fleet Engine для отслеживания действий водителя при получении груза, создайте задачу по получению груза. Для этого установите атрибут типа задачи в значение PICKUP . Следующий пример иллюстрирует получение груза из торгового центра Grand Indonesia East Mall.

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

ОТДЫХ

Для создания задачи по приему груза из серверной среды выполните 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, $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

Создайте задачу доставки груза.

Чтобы использовать Fleet Engine для отслеживания действий водителя при доставке груза, создайте задачу доставки груза. Для этого установите атрибут типа задачи в значение DELIVERY . Следующий пример иллюстрирует доставку груза в торговый центр Grand Indonesia East Mall.

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

ОТДЫХ

Для создания задачи по приему груза из серверной среды выполните 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, $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
 ```

Что дальше?