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