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 việc cần làm. Tài liệu này cung cấp các ví dụ cụ thể về cách hoàn tất việc cần làm liên quan đến lô hàng như sau:

  • Đóng một việc cần làm: Khi bạn đóng một việc cần làm liên quan đến lô hàng, trạng thái của việc cần làm đó sẽ chuyển 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 việc cần làm: Sau khi đóng một việc cần làm, bạn sẽ hoàn tất việc cần làm đó bằng cách đặt kết quả thành SUCCEEDED hoặc FAILED. Đây là một phần quan trọng trong việc hoàn tất một việc cần làm để hiển thị kết quả giao hàng 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ụ Fleet Engine.

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

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

  • Cập nhật trạng thái điểm dừng cho xe. Bạn xoá điểm dừng khỏi xe, từ đó đóng tất cả các việc cần làm liên quan đến điểm dừng đó. Hãy xem bài viết Cập nhật trạng thái điểm dừng để biết thông tin chi tiết.
  • Xoá việc cần làm khỏi danh sách điểm dừng của xe. Thao tác này liên quan đến việc cập nhật danh sách việc cần làm cho điểm dừng, nhưng việc cần làm đã đóng không còn nằm trong danh sách nữa. Hãy xem bài viết Cập nhật thứ tự việc cần làm trong phần Cập nhật việc cần làm.
  • Đặt trạng thái của việc cần làm thành CLOSED. Bạn chỉ có thể thực hiện việc này đối với những việc cần làm 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 không thể mở lại việc cần làm đó.

Việc đóng một việc cần làm không cho biết việc cần làm đó thành công hay thất bại. Việc này cho biết rằng việc cần làm đó không còn được coi là đang tiến hành nữa. Để cho biết kết quả thực tế của một việc cần làm 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 việc cần làm đó. Hãy xem phần Đặt kết quả của việc cần làm bên dưới.

Các trường của việc cần làm để đóng việc cần làm

Phần này ghi lại các trường bắt buộc cần đặt khi đóng một việc cần làm. Fleet Engine 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 trực tiếp một việc cần làm

Các ví dụ sau đây cho biết cách đặt một việc cần làm chưa được chỉ định thành trạng thái đã đóng, trong gRPC hoặc bằng cách 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 việc cần làm.
  • Tiêu đề của yêu cầu phải chứa trường Authorization có giá trị Bearer <token>, trong đó <token> do máy chủ của bạn cấp theo nguyên tắc được mô tả trong bài viết Vai trò của tài khoản dịch vụmã thông báo JSON Web.
  • Bạn phải đưa thực thể Task vào 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 việc cần làm, bạn hãy đặt kết quả cho các việc cần làm đã đóng thành SUCCEEDED hoặc FAILED. Bạn phải đóng một việc cần làm trước khi đặt kết quả cho việc cần làm đó. Fleet Engine chỉ tính phí đối với các việc cần làm liên quan đến 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

Các việc cần làm cũng cung cấp thông tin chi tiết khác về kết quả của việc cần làm. Bạn có thể đặt trực tiếp các thông tin này và Fleet Engine sẽ tuân theo các chế độ cài đặt của bạn:

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

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 trường này trong cùng một yêu cầu đặt kết quả của việc cần làm.
  • Cập nhật các trường này sau khi bạn đã đặt kết quả của việc cần làm.
  • Sửa đổi lại các trường này sau khi bạn đã đặt.

Fleet Engine ngăn các bản cập nhật sau đây liên quan đến kết quả của việc cần làm:

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

Các trường của việc cần làm để đặ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 đặt khi đặt kết quả của một việc cần làm. Fleet Engine 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ẽ đặt giá trị mặc định là vị trí gần đây nhất của xe.
taskOutcomeTime Dấu thời gian khi hoàn thành việc cần làm.

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 một việc cần làm thành SUCCEEDED và đặt vị trí hoàn thành việc cần làm.

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 việc cần làm.
  • Tiêu đề của yêu cầu phải chứa trường Authorization có giá trị Bearer <token>, trong đó <token> do máy chủ của bạn cấp theo nguyên tắc được mô tả trong bài viết Vai trò của tài khoản dịch vụmã thông báo JSON Web.
  • Nội dung yêu cầu phải chứa 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