Tài liệu này giả định bạn đã đọc hướng dẫn giới thiệu về Công việc đã lên lịch trong phần Giới thiệu về Fleet Engine là Công việc đã lên lịch là gì? trong phần này.
Fleet Engine dành cho các nhiệm vụ theo lịch cung cấp nhiều loại nhiệm vụ:
- Nhiệm vụ vận chuyển: Dùng để lái xe, bao gồm cả việc lấy hàng và giao hàng lô hàng.
- Tác vụ không có mặt: Sử dụng cho những thời điểm người lái xe không thể sử dụng, chẳng hạn như như với các điểm ngắt bắt buộc.
- Thao tác dừng theo lịch: Dùng cho các nhiệm vụ không phải lái xe tại hòm thư hoặc của khách hàng vị trí, chẳng hạn như thời gian để vào một toà nhà hoặc xác định điểm giao hàng.
Tài liệu này trình bày cách tạo nhiệm vụ không vận chuyển trên máy chủ của bạn. Để loại nhiệm vụ vận chuyển, hãy xem phần Tạo nhiệm vụ vận chuyển.
Trường tác vụ cho các nhiệm vụ không phải lái xe
Phần này ghi lại các trường tác vụ cần thiết cho cả hai trường hợp không hoạt động và các nhiệm vụ ngừng theo lịch đã lên lịch.
Trường việc cần làm bắt buộc
Đối với mỗi nhiệm vụ bạn tạo trong Fleet Engine, bạn phải cung cấp những thông tin bắt buộc
và cũng có thể cung cấp bất kỳ trường tuỳ chọn nào. Công cụ của Fleet bỏ qua tất cả các trường khác và gửi một ngoại lệ nếu yêu cầu tạo tác vụ cung cấp một deliveryVehicleId
được chỉ định. Cách giao việc cần làm cho một chiếc xe:
sử dụng UpdateDeliveryVehicleRequest
. Để biết thêm thông tin, hãy xem phần Cập nhật công việc.
Trường | Giá trị |
---|---|
type |
Đặt thành loại phù hợp với loại tác vụ, là một trong các loại sau:
|
state |
State.OPEN |
task_id |
Mã công việc duy nhất. Đây không được là số vận đơn cho lô hàng. Nếu bạn không có mã công việc trong hệ thống của mình, bạn có thể tạo một mã công việc duy nhất trên toàn cầu mã nhận dạng (UUID). Để biết thông tin cụ thể, hãy xem Mã việc cần làm. |
tracking_id |
Chỉ dành cho tác vụ PICKUP hoặc DELIVERY : Số hoặc mã nhận dạng mà bạn đang sử dụng để theo dõi một lô hàng. Không nên
cung cấp trường này cho các nhiệm vụ không phải hàng vận chuyển. |
plannedLocation |
Chỉ dành cho các tác vụ PICKUP , DELIVERY hoặc SCHEDULED_STOP : Địa điểm hoàn thành tác vụ. Không bắt buộc đối với
UNAVAILABLE việc cần làm. |
taskDuration |
Thời gian dự kiến cần thêm để hoàn tất việc cần làm. Ví dụ: để xem để đỗ xe hoặc đi bộ đến vị trí chuyển giao. |
Trường nhiệm vụ vận chuyển không bắt buộc
Trường | Giá trị |
---|---|
targetTimeWindow |
Khoảng thời gian hoàn thành tác vụ. Trường này không ảnh hưởng đến hành vi định tuyến. |
task_tracking_view_config |
Chỉ áp dụng cho PICKUP hoặc DELIVERY việc cần làm:
Cấu hình để theo dõi công việc chỉ định những phần tử dữ liệu
hiển thị cho người dùng cuối trong trường hợp nào. |
attributes |
Danh sách các thuộc tính tuỳ chỉnh của nhiệm vụ. Mỗi thuộc tính phải có một khoá duy nhất. |
Tạo việc cần làm khi không có mặt
Bạn có thể tạo một nhiệm vụ cho biết tình trạng không có sẵn; ví dụ như khi lái xe vào giờ nghỉ. Để tạo một tác vụ không có sẵn, hãy làm theo các nguyên tắc sau:
- Đặt loại tác vụ thành
UNAVAILABLE
. - Đừng thêm mã theo dõi.
- Mặc dù bạn không phải cung cấp vị trí cho tác vụ không khả dụng, làm như vậy sẽ cung cấp các phép tính ETA nâng cao trong cả ngày.
Các quy tắc hiển thị đặc biệt áp dụng cho vị trí của xe khi xe đang thực hiện một tác vụ UNAVAILABLE
để chia sẻ hành trình.
- Ứng dụng dành cho người tiêu dùng được tích hợp với thư viện Theo dõi lô hàng: Khi xe đang thực hiện một nhiệm vụ không có sẵn, người dùng ứng dụng dành cho người tiêu dùng sẽ không thể xem vị trí của xe, mặc dù họ vẫn có thể xem thông tin trạng thái của lô hàng.
- Ứng dụng theo dõi nhóm được tích hợp với thư viện Theo dõi nhóm: Khi xe đang không sử dụng được, người quản lý đội xe sử dụng đội xe ứng dụng theo dõi sẽ có thể xem thông tin vị trí của xe cho các nhiệm vụ không có sẵn.
Các ví dụ sau đây minh hoạ cách tạo một tác vụ đã lên lịch về việc không sử dụng được dịch vụ bằng cách sử dụng
thư viện Java gRPC hoặc cách tạo yêu cầu HTTP REST để
CreateTask
.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
.setType(Task.Type.UNAVAILABLE)
.setState(Task.State.OPEN)
.setTaskDuration(
Duration.newBuilder().setSeconds(60 * 60)) // 1hr break
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent) // Avoid using auto-incrementing IDs for the taskId
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTask(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
```
Kiến trúc chuyển trạng thái đại diện (REST)
Để tạo tác vụ không hoạt động từ môi trường máy chủ, hãy tạo một REST HTTP
gọi đến CreateTask
:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>
<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 có giá trị Mã <token>, trong đó <token> do máy chủ của bạn cấp theo nguyên tắc nêu trong phần Vai trò trong 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 thực thể Task
có các trường thích hợp
được mô tả trong Các trường nhiệm vụ cho các nhiệm vụ không phải lái xe.
Ví dụ về lệnh curl
:
# Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"type": "UNAVAILABLE",
"state": "OPEN",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "300s"
}
EOM
Tạo nhiệm vụ dừng theo lịch
Bạn có thể tạo một việc cần làm cho một thời điểm dừng theo lịch; ví dụ: đối với các nhiệm vụ không phải lái xe tại vị trí của khách hàng, đối với trạm tiếp nhiên liệu hoặc khi tài xế nhận được các gói hàng từ xe trung chuyển. Khi bạn tạo một tác vụ dừng theo lịch, hãy sử dụng các nguyên tắc sau:
- Đặt loại tác vụ thành
- Đừng thêm mã theo dõi.
- Bạn có thể cung cấp vị trí nếu muốn.
Các ví dụ sau đây cho biết cách tạo một tác vụ không có sẵn theo lịch bằng cách sử dụng thư viện gRPC Java hoặc cách tạo yêu cầu HTTP REST đến CreateTask
.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
.setType(Task.Type.SCHEDULED_STOP)
.setState(Task.State.OPEN)
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent)
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTrip(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
```
Kiến trúc chuyển trạng thái đại diện (REST)
Để tạo tác vụ dừng theo lịch từ môi trường máy chủ, hãy tạo một HTTP REST
gọi đến CreateTask
:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>
<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 có giá trị Mã <token>, trong đó <token> do máy chủ của bạn cấp theo nguyên tắc nêu trong phần Vai trò trong tài khoản dịch vụ và Mã thông báo web JSON.
Phần nội dung yêu cầu phải chứa thực thể Task
:
Ví dụ về lệnh curl
:
# Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"type": "SCHEDULED_STOP",
"state": "OPEN",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "600s"
}
EOM