작업 완료

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

  • 할 일 닫기: 배송 할 일을 닫으면 상태가 CLOSED로 변경되고 해당 할 일이 더 이상 활성 상태가 아님을 나타냅니다.

  • 작업 결과 설정: 작업이 종료되면 결과를 SUCCEEDED 또는 FAILED로 설정하여 작업을 완료합니다. 이는 여정 공유에 배송 결과를 표시하고 Fleet Engine 서비스에 대한 올바른 청구를 보장하기 위해 작업을 완료하는 데 중요한 부분입니다.

작업 닫기

다음과 같은 방법으로 할 일을 닫을 수 있습니다.

  • 차량의 정지 상태를 업데이트합니다. 차량에서 정류장을 삭제하면 정류장과 연결된 모든 작업이 닫힙니다. 자세한 내용은 업데이트 중지 상태를 참고하세요.
  • 차량 정류장 목록에서 작업을 삭제합니다. 여기에는 중지된 작업의 목록을 업데이트하는 작업이 포함되지만 닫힌 작업은 더 이상 목록에 포함되지 않습니다. 할 일 업데이트의 할 일 순서 업데이트를 참고하세요.
  • 작업 상태를 CLOSED로 설정합니다. 이 작업은 차량에 할당되지 않은 작업에 대해서만 수행할 수 있습니다. 이 섹션에서는 이 접근 방식을 보여줍니다.

작업을 닫으면 다시 열 수 없습니다.

작업을 종료해도 성공 또는 실패가 표시되지 않습니다. 작업이 더 이상 진행 중으로 간주되지 않음을 나타냅니다. 작업의 실제 결과를 나타내고 이를 차량 추적 및 여정 공유 목적으로 표시하려면 작업의 실제 결과를 나타내야 합니다. 아래의 작업 결과 설정을 참고하세요.

작업을 종료하기 위한 작업 필드

이 섹션에서는 작업을 종료할 때 설정해야 하는 필수 필드를 설명합니다. Fleet Engine은 업데이트를 위해 엔티티의 다른 모든 필드를 무시합니다.

필수 입력란
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&quot;,
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
 }
 EOM

태스크 결과 설정

작업의 실제 결과를 나타내려면 종료된 작업의 결과를 SUCCEEDED 또는 FAILED로 설정합니다. 결과를 설정하기 전에 작업을 종료해야 합니다. Fleet Engine은 상태가 SUCCEEDED인 배송 작업에 대해서만 요금을 청구합니다.

태스크 결과 세부정보

작업은 작업 결과에 관한 추가 세부정보도 제공합니다. 이러한 설정을 직접 지정할 수 있으며 Fleet Engine은 설정을 준수합니다.

  • 작업 결과 위치: Fleet Engine은 마지막으로 알려진 차량 위치로 작업 결과 위치를 자동으로 채웁니다. 원하는 경우 대신 이를 제공할 수 있습니다.
  • 작업 결과 시간: Fleet Engine에서 이 필드를 채우지는 않지만 설정할 수 있습니다.

다음 방법 중 하나를 사용하여 task_outcome_locationtask_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;
 }

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": {
     &quot;point": {
       "latitude": -6.195139,
       "longitude": 106.820826
     }
   }
 }
 EOM

다음 단계