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

Этот документ предполагает, что вы понимаете, как создавать и использовать задачи. Он предоставляет конкретные примеры того, как завершать задачи по отгрузке следующим образом:

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

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

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

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

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

Закрыв задачу, вы не сможете открыть ее снова.

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

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

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

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

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

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

гРПЦ

 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 .
  • Необходимо включить объект 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 и указать место, где задача была завершена.

гРПЦ

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

Что дальше?