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 đưa ra 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 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ặcFAILED
. Đâ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 tác vụ 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á việc cần làm khỏi danh sách điểm dừng xe. Việc này liên quan đến 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 của 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ể không mở lại việc cần làm đó.
Việc đóng một nhiệm vụ không biểu thị được việc đó thành công hay không thành công. Nó cho biết rằng tác vụ không còn được xem xét là đang diễn ra. Để 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.
Trường tác vụ để đóng tác vụ
Phần này ghi lại các trường bắt buộc cần đặt khi đóng một tác vụ. Công cụ Fleet sẽ bỏ qua mọi trường khác trong thực thể để cập nhật.
Trường bắt buộc | Giá trị |
---|---|
state |
State.CLOSED |
Trực tiếp đóng việc cần làm
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 một trường Uỷ quyền với giá trị Bearer <token>, trong đó <token> do máy chủ của bạn cấp theo nguyên tắc đã mô tả trong phần Vai trò tài khoản dịch vụ và Mã thông báo web JSON.
- Bạn phải thêm 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 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ụ của đội xe chỉ tính phí cho các nhiệm vụ phân phối có trạng thái là SUCCEEDED
.
Thông tin chi tiết về kết quả nhiệm vụ
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ả nhiệm vụ: Fleet Engine tự động điền vị trí kết quả 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ả tác vụ: Fleet Engine không điền vào trường này, nhưng bạn có thể đặt thời gian này.
Bạn có thể sử dụng bất kỳ phương pháp nào sau đây để thiết lập task_outcome_location
và task_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ông việc.
- Cập nhật sau, sau khi bạn đặt kết quả của nhiệm vụ.
- Sửa đổi lại các giá trị này sau khi thiết lập.
Fleet Engine ngăn chặn những 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 tác vụ sau khi đặt thành
SUCCEEDED
hoặcFAILED
. - Bạn không thể đặt vị trí kết quả của nhiệm vụ hoặc thời gian kết quả cho các nhiệm vụ mà không có kết quả đặt trước.
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 đặt khi đặt kết quả 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ộc | Giá trị |
---|---|
taskOutcomeLocation |
Vị trí nơi việc cần làm đã hoàn thành. Nếu bạn không đặt chính sách này, thì Fleet Engine sẽ mặc định đặt giá trị này là vị trí của chiếc xe gần đây nhất. |
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 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ông việc thành SUCCEEDED
và đặt vị trí hoàn thành công việc.
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ụ 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