Hoàn tất việc cần làm

Tài liệu này giả định rằng bạn hiểu cách tạo và sử dụng các tác vụ. Phần này cung cấp các ví dụ cụ thể về cách hoàn tất các tác vụ vận chuyển như sau:

  • Đóng việc cần làm: Việc đóng một việc cần làm về lô hàng sẽ thay đổi trạng thái của việc cần làm đó thành CLOSED và cho biết rằng việc cần làm đó không còn hoạt động nữa.

  • Đặt kết quả của tác vụ: Sau khi đóng một tác vụ, bạn sẽ hoàn tất tác vụ đó bằng cách đặt kết quả của tác vụ thành SUCCEEDED hoặc FAILED. Đây là một phần quan trọng trong việc hoàn tất một tác vụ để hiển thị kết quả phân phối trong tính năng chia sẻ hành trình và đảm bảo tính phí chính xác cho dịch vụ Công cụ của đội xe.

Đóng việc cần làm

Bạn có thể đóng việc cần làm theo các cách sau:

  • Cập nhật trạng thái dừng của xe. Bạn xoá điểm dừng khỏi xe, do đó, tất cả các tác vụ liên kết với điểm dừng đó sẽ đóng lại. Hãy xem phần Cập nhật trạng thái dừng để biết thông tin chi tiết.
  • Xoá nhiệm vụ khỏi danh sách điểm dừng xe. Việc này bao gồm việc cập nhật danh sách tác vụ cho điểm dừng, nhưng tác vụ đã đóng không còn nằm trong danh sách nữa. Xem phần Cập nhật thứ tự việc cần làm trong bài viết Cập nhật việc cần làm.
  • Đặt trạng thái tác vụ thành CLOSED. Bạn chỉ có thể thực hiện việc này trên các công việc không được chỉ định cho xe. Phần này trình bày phương pháp này.

Sau khi đóng một việc cần làm, bạn có thể sẽ không mở lại được việc cần làm đó.

Việc đóng một tác vụ không cho biết tác vụ đó có thành công hay không. Điều này cho biết rằng tác vụ không còn được coi là đang diễn ra nữa. Để cho biết kết quả thực tế của một nhiệm vụ và để hiển thị kết quả đó cho mục đích Theo dõi đội xe và chia sẻ hành trình, bạn phải cho biết kết quả thực tế của một nhiệm vụ. Xem phần Đặt kết quả của tác vụ bên dưới.

Các trường tác vụ để đóng tác vụ

Phần này ghi lại các trường bắt buộc phải đặt khi đóng một tác vụ. Công cụ Fleet sẽ bỏ qua tất cả các trường khác trong thực thể để cập nhật.

Trường bắt buộc Giá trị
state State.CLOSED

Đóng việc cần làm ngay

Các ví dụ sau đây cho biết cách đặt một tác vụ chưa được chỉ định thành trạng thái đóng, trong gRPC hoặc sử dụng lệnh gọi yêu cầu HTTP REST đến 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;
 }

REST

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=state

  • <id> là giá trị nhận dạng duy nhất của tác vụ.
  • Tiêu đề yêu cầu phải chứa trường Authorization (Uỷ quyền) có giá trị Bearer <token>, trong đó <token> do máy chủ của bạn phát hành theo các nguyên tắc được mô tả trong phần Vai trò của tài khoản dịch vụMã thông báo web JSON.
  • Bạn phải thêm một thực thể Task vào phần nội dung yêu cầu

Ví dụ về lệnh 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

Đặt kết quả của việc cần làm

Để cho biết kết quả thực tế của một tác vụ, bạn đặt kết quả cho các tác vụ đã đóng thành SUCCEEDED hoặc FAILED. Bạn phải đóng một tác vụ trước khi đặt kết quả của tác vụ đó. Công cụ xe cộ chỉ tính phí cho các nhiệm vụ giao hàng có trạng thái là SUCCEEDED.

Thông tin chi tiết về kết quả của việc cần làm

Tác vụ cũng cung cấp thêm thông tin chi tiết về kết quả của tác vụ. Bạn có thể đặt các tuỳ chọn này trực tiếp và Công cụ của đội xe sẽ tuân theo chế độ cài đặt của bạn:

  • Vị trí kết quả công việc: Công cụ quản lý đội xe sẽ tự động điền vị trí kết quả công việc bằng vị trí xe đã biết gần đây nhất. Bạn có thể cung cấp giá trị này nếu muốn.
  • Thời gian kết quả tác vụ: Công cụ của Fleet không điền trường này nhưng bạn có thể đặt trường này.

Bạn có thể sử dụng bất kỳ phương pháp nào sau đây để đặt task_outcome_locationtask_outcome_time:

  • Cập nhật các giá trị này trong cùng một yêu cầu để đặt kết quả của tác vụ.
  • Cập nhật sau, sau khi bạn đặt kết quả của nhiệm vụ.
  • Sửa đổi lại sau khi đặt.

Công cụ của Fleet ngăn các bản cập nhật sau đây liên quan đến kết quả của tác vụ:

  • Bạn không thể sửa đổi kết quả của một nhiệm vụ sau khi đặt thành SUCCEEDED hoặc FAILED.
  • Bạn không thể đặt vị trí hoặc thời gian kết quả của việc cần làm cho những việc cần làm không có kết quả được đặt.

Các trường tác vụ để đặt kết quả

Phần này ghi lại các trường bắt buộc và không bắt buộc cần thiết để đặt khi đặt kết quả của tác vụ. Công cụ của Fleet sẽ bỏ qua các trường khác trong thực thể để cập nhật.

Trường bắt buộc Giá trị
taskOutcome Outcome.SUCCEEDED hoặc Outcome.FAILED

Trường không bắt buộcGiá trị
taskOutcomeLocation Vị trí hoàn thành việc cần làm. Nếu bạn không đặt, Fleet Engine sẽ mặc định đặt giá trị này thành vị trí xe gần đây nhất.
taskOutcomeTime Dấu thời gian khi tác vụ hoàn tất.

Ví dụ về kết quả của việc cần làm

Ví dụ sau đây cho biết cách sử dụng thư viện gRPC Java và lệnh gọi HTTP REST đến UpdateTask để đặt kết quả của tác vụ thành SUCCEEDED và đặt vị trí hoàn thành tác vụ.

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> là giá trị nhận dạng duy nhất của tác vụ.
  • Tiêu đề yêu cầu phải chứa trường Authorization (Uỷ quyền) có giá trị Bearer <token>, trong đó <token> do máy chủ của bạn phát hành theo các nguyên tắc được mô tả trong phần Vai trò của tài khoản dịch vụMã thông báo web JSON.
  • Nội dung yêu cầu phải chứa một thực thể 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

Bước tiếp theo