작업 완료

이 문서에서는 태스크를 만들고 사용하는 방법을 알고 있다고 가정합니다. 다음과 같이 배송 작업을 완료하는 방법에 관한 구체적인 예시를 제공합니다.

  • 할 일 닫기: 배송 작업을 닫으면 상태가 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_locationtask_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

다음 단계