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