Tài liệu này giả định rằng bạn đã nắm rõ những nội dung sau:
- Tạo nhiệm vụ vận chuyển
- Giới thiệu về Việc cần làm đã lên lịch, trong đó trình bày mối quan hệ giữa các nhiệm vụ, trạm dừng và xe.
Trong tình huống giao hàng thực tế, doanh nghiệp giao nhiệm vụ vận chuyển hàng cho người lái xe, sau đó sử dụng một chiếc xe để giao hàng cho người nhận theo kế hoạch một địa điểm, chẳng hạn như nhà ở hoặc phòng giao hàng trong một khu phức hợp toà nhà. Bạn lập mô hình trong Fleet Engine bằng cách tạo một nhiệm vụ và điều khiển phương tiện giao hàng yêu cầu cập nhật, sau đó cập nhật thực thể xe với danh sách điểm dừng thành khi đi du lịch. Bạn giao cho mỗi điểm dừng danh sách các công việc cần hoàn thành tại điểm dừng đó.
Bạn có thể cập nhật các nhiệm vụ trên xe bất cứ lúc nào, nhưng thông thường bạn làm việc này cho mục đích sau đây:
- Lên lịch nhiệm vụ để xe hoàn thành. Bạn cũng có thể thực hiện việc này kèm theo yêu cầu cập nhật để thêm một điểm dừng mới vào xe, hoặc bằng cách cập nhật thêm một nhiệm vụ mới vào một điểm dừng hiện có.
- Cập nhật thứ tự của các nhiệm vụ hiện có được liên kết với một điểm dừng xe cụ thể.
- Thay đổi vị trí hoàn thành việc cần làm. Theo mặc định, Fleet Engine đánh dấu vị trí hoàn thành nhiệm vụ giống với vị trí dừng xe liên kết với tác vụ. Nếu muốn, bạn có thể chỉ định các vị trí cụ thể cho từng tác vụ riêng lẻ. Ví dụ: bạn có thể dừng xe ở phức tạp để phân phối một số gói, mỗi gói được gán một một phòng gửi thư cụ thể.
- Đóng mọi việc cần làm đã giao trước đó để không cập nhật chúng đặt hàng. Hãy xem phần Hoàn tất công việc để biết thông tin chi tiết.
Lên lịch hoặc thay đổi tác vụ phân phối
Bạn có thể lên lịch hoặc thay đổi việc cần làm được giao cho xe thông qua một máy chủ môi trường xung quanh hoặc bằng cách sử dụng SDK trình điều khiển, nếu bạn cho phép trình điều khiển quản lý công việc bằng thiết bị tin cậy. Chỉ dùng một phương thức để tránh chủng tộc và duy trì một nguồn đáng tin cậy duy nhất.
Để thay đổi một kiện hàng từ xe này sang xe khác, hãy đóng việc cần làm ban đầu rồi tạo lại thiết bị đó trước khi chỉ định cho một chiếc xe khác. Nếu bạn cập nhật một xe giao hàng để bao gồm một nhiệm vụ đã được giao cho một nhiệm vụ khác xe, bạn sẽ gặp lỗi.
Các trường bắt buộc để cập nhật 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 cập nhật công việc cho một chiếc xe. Không có trường tuỳ chọn nào được cung cấp. Công cụ Fleet bỏ qua mọi trường khác trong thực thể cập nhật.
Trường bắt buộc | Giá trị |
---|---|
remainingVehicleJourneySegments |
Danh sách phân đoạn hành trình cho các tác vụ theo thứ tự thực thi. Công việc đầu tiên trong danh sách sẽ được thực thi trước. |
remainingVehicleJourneySegments[i].stop |
Điểm dừng của tác vụ i trong danh sách. |
remainingVehicleJourneySegments[i].stop.plannedLocation |
Vị trí đã lên kế hoạch cho điểm dừng. |
remainingVehicleJourneySegments[i].stop.tasks |
Danh sách những việc cần làm tại trạm xe này. |
remainingVehicleJourneySegments[i].stop.state |
State.NEW |
Ví dụ về việc giao việc cần làm
Các ví dụ sau đây minh hoạ cách sử dụng thư viện Java gRPC và một HTTP
Lệnh gọi REST đến UpdateDeliveryVehicle
để thêm 2 nhiệm vụ mới cho xe.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
static final String TASK1_ID = "task-756390";
static final String TASK2_ID = "task-849263";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // 1st stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.7749)
.setLongitude(122.4194)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
.setState(VehicleStop.State.NEW)))
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // 2nd stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.3382)
.setLongitude(121.8863)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
.setState(VehicleStop.State.NEW)))
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryRequest =
UpdateDeliveryVehicleRequest.newBuilder() // No need for the header
.setName(vehicleName)
.setDeliveryVehicle(deliveryVehicle)
.setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
.build();
try {
DeliveryVehicle updatedDeliveryVehicle =
deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
Kiến trúc chuyển trạng thái đại diện (REST)
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
<id> là giá trị nhận dạng duy nhất cho xe giao hàng trong hệ thống thiết bị của bạn mà bạn dự định cập nhật thứ tự tác vụ. Đây chính là giá trị nhận dạng bạn đã chỉ định khi tạo xe.
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ể
DeliveryVehicle
Ví dụ về lệnh curl
:
# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"remainingVehicleJourneySegments": [
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.7749,
"longitude": -122.084061
}
},
"tasks": [
{
"taskId": "${TASK1_ID}"
}
]
}
},
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM