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ụ. Nó cung cấp các ví dụ cụ thể về cách hoàn tất các việc cần làm liên quan đến việc vận chuyển như sau:

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

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 nhiệm vụ. Xem phần Đặt kết quả của nhiệm vụ bên dưới.

Các trường nhiệm vụ để đóng nhiệm vụ

Phần này ghi lại các trường bắt buộc phải thiết lập khi đóng một tác vụ. Fleet Engine 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 thấy cách đặt một tác vụ 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 riêng biệt của nhiệm vụ.
  • Tiêu đề yêu cầu phải chứa một trường Authorization 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 Vai trò tài khoản dịch vụMã thông báo web theo chuẩn JSON.
  • Bạn phải thêm một 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 có thể đặt kết quả cho những việc cần làm đã đóng là SUCCEEDED hoặc FAILED. Bạn phải đóng một việc cần làm trước khi đặt kết quả của việc đó. Fleet Engine chỉ tính phí cho các nhiệm vụ giao hàng có trạng thái SUCCEEDED.

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

Các 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 trực tiếp các chế độ cài đặt 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 nhiệm vụ: Fleet Engine tự động điền vị trí kết quả của nhiệm vụ 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 thay thế nếu muốn.
  • Thời gian hoàn thành nhiệm vụ: Fleet Engine không điền sẵn trường này, nhưng bạn có thể thiết lập.

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

  • Cập nhật các tham số 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 bạn đã đặt.

Fleet Engine ngăn chặn các nội dung cập nhật sau đây liên quan đến kết quả của nhiệm vụ:

  • 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ả của việc cần làm 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 chưa có kết quả được đặt.

Các trường việc cần làm để thiết lập 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 tác vụ. Fleet Engine 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 Địa điểm 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í gần đây nhất của xe.
taskOutcomeTime Dấu thời gian khi việc cần làm được hoàn thành.

Ví dụ về kết quả của nhiệm vụ

Ví dụ sau đây cho biết cách sử dụng thư viện gRPC Java và lệnh gọi REST HTTP đến UpdateTask để đặt kết quả của một 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 riêng biệt của nhiệm vụ.
  • Tiêu đề yêu cầu phải chứa một trường Authorization 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 Vai trò tài khoản dịch vụMã thông báo web theo chuẩn 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