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 tác vụ. Tài liệu này cung cấp các ví dụ cụ thể về cách hoàn tất các nhiệm vụ vận chuyển như sau:

  • Đóng một nhiệm vụ: Việc đóng một nhiệm vụ vận chuyển sẽ thay đổi trạng thái của nhiệm vụ đó thành CLOSED và cho biết nhiệm vụ đó không còn hoạt động nữa.

  • Đặt kết quả của nhiệm vụ: Sau khi đóng một nhiệm vụ, bạn sẽ hoàn tất nhiệm vụ đó 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 điểm dừng cho xe. Bạn xoá điểm dừng khỏi xe, từ đó đóng tất cả các nhiệm vụ liên quan đến điểm dừng. Hãy xem phần Cập nhật trạng thái điểm dừng để biết thông tin chi tiết.
  • Xoá nhiệm vụ khỏi danh sách điểm dừng của xe. Việc này bao gồm 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. Xem phần Cập nhật thứ tự việc cần làm trong mục 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 nhiệm vụ 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 nhiệm vụ, bạn không thể mở lại nhiệm vụ đó.

Việc đóng một tác vụ không cho biết tác vụ đó thành công hay không thành cô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à để kết quả đó hiển thị 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 việc cần làm để đóng việc cần làm

Phần này trình bày các trường bắt buộc cần đặt khi đóng một nhiệm vụ. Công cụ quản lý đội xe bỏ qua tất cả các trường khác trong thực thể cho bản 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 thấy cách đặt một nhiệm vụ chưa được chỉ định sang trạng thái đóng, bằng 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 đề 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 phần Vai trò của tài khoản dịch vụ và Mã thông báo web 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 nhiệm vụ, bạn đặt kết quả cho các nhiệm vụ đã đóng thành SUCCEEDED hoặc FAILED. Bạn phải đóng một nhiệm vụ trước khi đặt kết quả cho nhiệm vụ đó. Fleet Engine chỉ tính phí cho những 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 nhiệm vụ

Nhiệm vụ cũng cung cấp thêm thông tin chi tiết về kết quả của nhiệm vụ. Bạn có thể đặt các giá trị này trực tiếp và Fleet Engine sẽ tuân thủ 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 nếu muốn.
  • Thời gian kết quả nhiệm vụ: Fleet Engine không điền vào 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_location và task_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 nhiệm 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.

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 nhiệm vụ sau khi kết quả đó được đặt thành SUCCEEDED hoặc FAILED.
  • Bạn không thể đặt địa điểm hoặc thời gian hoàn thành nhiệm vụ cho những nhiệm vụ không có kết quả được đặt trước.

Các trường việc cần làm để đặt kết quả

Phần này trình bày các trường bắt buộc và không bắt buộc cần đặt khi thiết lập kết quả của nhiệm vụ. Fleet Engine bỏ qua các trường khác trong thực thể cho bản cập nhật.

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

Trường tuỳ chọnGiá 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í 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ả nhiệm vụ

Ví dụ sau đây cho thấy 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 nhiệm vụ thành SUCCEEDED và đặt vị trí hoàn thành nhiệm 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 đề 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 phần Vai trò của tài khoản dịch vụ 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