Этот документ предполагает, что вы понимаете, как создавать и использовать задачи. Он предоставляет конкретные примеры того, как завершать задачи по отгрузке следующим образом:
Закрытие задачи : Закрытие задачи по отгрузке изменяет ее состояние на
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