이 문서에서는 태스크를 만들고 사용하는 방법을 알고 있다고 가정합니다. 다음과 같이 배송 작업을 완료하는 방법에 관한 구체적인 예시를 제공합니다.
할 일 닫기: 배송 작업을 닫으면 상태가
CLOSED
로 변경되고 해당 작업이 더 이상 활성 상태가 아님을 나타냅니다.작업 결과 설정: 작업이 종료되면 결과를
SUCCEEDED
또는FAILED
로 설정하여 완료합니다. 이는 여정 공유에서 전송 결과를 표시하고 Fleet Engine 서비스에 대해 올바르게 청구하기 위해 작업을 완료하는 데 중요한 부분입니다.
할 일 닫기
다음과 같은 방법으로 할 일을 닫을 수 있습니다.
- 차량의 정차 상태를 업데이트합니다. 차량에서 정류장을 삭제하면 정류장과 연결된 모든 작업이 종료됩니다. 자세한 내용은 업데이트 중지 상태를 참고하세요.
- 차량 정류장 목록에서 할 일 삭제 이렇게 하면 정지의 작업 목록이 업데이트되지만 종료된 작업은 더 이상 목록에 포함되지 않습니다. 할 일 업데이트에서 할 일 순서 업데이트를 참고하세요.
- 작업 상태를
CLOSED
로 설정합니다. 차량에 할당되지 않은 작업에서만 이 작업을 할 수 있습니다. 이 섹션에서는 이 접근 방식을 보여줍니다.
작업을 닫으면 다시 열 수 없습니다.
태스크를 닫는다고 해서 태스크의 성공 또는 실패를 나타내는 것은 아닙니다. 작업이 더 이상 진행 중으로 간주되지 않음을 나타냅니다. 태스크의 실제 결과를 표시하고 차량 추적 및 경로 공유 목적으로 이를 표시하려면 태스크의 실제 결과를 표시해야 합니다. 아래의 작업 결과 설정을 참고하세요.
작업 종료용 작업 필드
이 섹션에서는 작업을 종료할 때 설정해야 하는 필드에 대해 설명합니다. Fleet 엔진은 업데이트할 때 항목의 다른 모든 필드를 무시합니다.
필수 입력란 | 값 |
---|---|
state |
State.CLOSED |
할 일 직접 닫기
다음 예에서는 gRPC 또는 UpdateTask
에 대한 HTTP REST 요청 호출을 사용하여 할당되지 않은 태스크를 종료 상태로 설정하는 방법을 보여줍니다.
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;
}
REST
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=state
- <id>는 태스크의 고유 식별자입니다.
- 요청 헤더에는 값이 Bearer <token>인 Authorization 필드가 포함되어야 합니다. 여기서 <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은 작업 결과 위치를 마지막으로 알려진 차량 위치로 자동으로 채웁니다. 원하는 경우 이 값을 대신 제공할 수 있습니다.
- Task outcome time: 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 라이브러리와 UpdateTask
에 대한 HTTP REST 호출을 사용하여 태스크 결과를 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;
}
REST
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation
- <id>는 태스크의 고유 식별자입니다.
- 요청 헤더에는 값이 Bearer <token>인 Authorization 필드가 포함되어야 합니다. 여기서 <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