Завершить задачи

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

  • Закрытие задачи : Закрытие задачи по отгрузке изменяет ее состояние на CLOSED и указывает на то, что эта задача больше не активна.

  • Установите результат задачи : После закрытия задачи вы можете завершить ее, установив результат либо SUCCEEDED , либо FAILED . Это важная часть завершения задачи, позволяющая отобразить результат доставки в системе планирования поездок и обеспечить корректное выставление счетов за услугу Fleet Engine.

Закрыть задачу

Завершить задачу можно следующими способами:

  • Обновите статус остановки для транспортного средства . Вы удаляете остановку из транспортного средства, что, в свою очередь, закрывает все задачи, связанные с остановкой. Подробнее см. раздел «Обновление статуса остановки» .
  • Удалите задачу из списка остановок транспортных средств . Это включает в себя обновление списка задач для остановки, но при этом закрытая задача больше не будет частью списка. См. раздел «Обновление порядка задач» в разделе «Обновление задач» .
  • Установите статус задачи в CLOSED . Это можно сделать только для задач, не назначенных транспортным средствам. В этом разделе показан именно такой подход.

После закрытия задачи вы не сможете открыть её повторно.

Завершение задачи не означает ее успех или неудачу . Это означает, что задача больше не считается выполняемой. Чтобы указать фактический результат задачи и отобразить его для целей отслеживания автопарка и совместного использования маршрутов, необходимо указать фактический результат задачи. См. раздел «Установка результата задачи» ниже.

Поля задач для закрытия задач

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

Обязательное поле Ценить
state State.CLOSED

Закрыть задачу напрямую

В следующих примерах показано, как перевести неназначенную задачу в закрытое состояние либо с помощью gRPC, либо с помощью HTTP REST-запроса к UpdateTask

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)
   .setState(Task.State.CLOSED) // You can only directly CLOSE a
   .build();                    // task that is NOT assigned to a vehicle.

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
       .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;
 }

ОТДЫХ

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=state

  • <id> — это уникальный идентификатор задачи.
  • В заголовке запроса должно содержаться поле Authorization со значением Bearer <token> , где <token> выдается вашим сервером в соответствии с рекомендациями, описанными в разделах «Роли учетных записей служб» и «JSON Web tokens» .
  • В тело запроса необходимо включить сущность Task .

Пример команды curl :

 # 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=state,taskOutcome,taskOutcomeTime" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "state": "CLOSED",
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
 }
 EOM

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

Чтобы указать фактический результат выполнения задачи, для закрытых задач установите результат либо SUCCEEDED , либо FAILED . Задача должна быть закрыта до того, как вы установите ее результат. Fleet Engine взимает плату только за задачи доставки со статусом SUCCEEDED .

Подробности результатов выполнения задания

Задачи также предоставляют дополнительную информацию о результате выполнения задачи. Вы можете задать эти параметры напрямую, и Fleet Engine будет учитывать ваши настройки:

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

Для установки task_outcome_location и task_outcome_time можно использовать любой из следующих подходов:

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

Fleet Engine блокирует следующие обновления, связанные с результатами выполнения задач:

  • Изменить результат выполнения задачи, если для нее установлено значение SUCCEEDED или FAILED , невозможно .
  • Для задач, не заданных в задании , невозможно указать место или время выполнения .

Поля задач для определения результата

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

Обязательное поле Ценить
taskOutcome Outcome.SUCCEEDED или Outcome.FAILED

Необязательное поле Ценить
taskOutcomeLocation Место, где была выполнена задача. Если не указано, Fleet Engine по умолчанию использует последнее местоположение транспортного средства.
taskOutcomeTime Отметка времени завершения задачи.

Примеры результатов выполнения задания

В следующем примере показано, как использовать библиотеку Java gRPC и HTTP REST-запрос к UpdateTask для установки результата задачи в значение SUCCEEDED и указания места, где задача была завершена.

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)
   .setTaskOutcome(TaskOutcome.SUCCEEDED)
   .setTaskOutcomeTime(now())
   .setTaskOutcomeLocation(               // Grand Indonesia East Mall
     LocationInfo.newBuilder().setPoint(
       LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
   .build();

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
       .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;
 }

ОТДЫХ

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation

  • <id> — это уникальный идентификатор задачи.
  • В заголовке запроса должно содержаться поле Authorization со значением Bearer <token> , где <token> выдается вашим сервером в соответствии с рекомендациями, описанными в разделах «Роли учетных записей служб» и «JSON Web tokens» .
  • В теле запроса должна содержаться сущность Task .
 # 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=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
   "taskOutcomeLocation": {
     "point": {
       "latitude": -6.195139,
       "longitude": 106.820826
     }
   }
 }
 EOM

Что дальше?