Tài liệu này giả định rằng bạn đã làm quen với những nội dung sau:
- Tạo việc cần làm về lô hàng
- Phần giới thiệu về Công việc theo lịch, trong đó trình bày chi tiết mối quan hệ giữa các công việc, điểm dừng và xe.
Trong trường hợp giao hàng thực tế, các doanh nghiệp sẽ giao nhiệm vụ vận chuyển hàng cho tài xế. Sau đó, tài xế sẽ sử dụng xe để giao hàng cho người nhận tại một địa điểm đã lên kế hoạch, chẳng hạn như nhà ở hoặc phòng giao hàng trong một khu phức hợp. Bạn mô hình hoá việc này trong Công cụ quản lý đội xe bằng cách tạo một tác vụ và đưa ra yêu cầu cập nhật xe tải, sau đó cập nhật thực thể xe bằng danh sách các điểm dừng để di chuyển. 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ông việc của xe bất cứ lúc nào, nhưng thường thì bạn làm việc này cho các mục đích sau:
- Lên lịch công việc để hoàn thành cho một xe. Bạn có thể thực hiện việc này bằng một yêu cầu cập nhật thêm điểm dừng mới vào xe hoặc bằng một yêu cầu cập nhật thêm tác vụ mới vào đ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, Công cụ quản lý đội xe sẽ đánh dấu vị trí hoàn thành công việc là cùng vị trí với điểm dừng xe được liên kết với công việc đó. Nếu muốn, bạn có thể chỉ định các vị trí cụ thể cho từng việc cần làm. Ví dụ: bạn có thể dừng xe tại một khu phức hợp lớn để giao một số gói hàng, mỗi gói hàng được chỉ định một phòng giao thư cụ thể.
- Đóng mọi việc cần làm đã giao trước đó để loại bỏ các việc đó khỏi thứ tự mới cập nhật. 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 các thao tác được chỉ định cho xe từ môi trường máy chủ hoặc sử dụng SDK Trình điều khiển nếu bạn cho phép người lái xe quản lý các thao tác bằng một thiết bị tin cậy. Chỉ sử dụng một phương thức để bạn tránh các điều kiện tranh đấu và duy trì một nguồn đáng tin cậy duy nhất.
Để thay đổi một lô hàng từ một xe sang một xe khác, hãy đóng tác vụ ban đầu rồi tạo lại tác vụ đó trước khi chỉ định cho một xe khác. Nếu cập nhật một xe giao hàng để đưa một nhiệm vụ đã được giao cho một xe khác, 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 một tác vụ cho xe. Không có trường tuỳ chọn nào được cung cấp. Công cụ Fleet sẽ bỏ qua mọi trường khác trong thực thể được 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 cho tác vụ i trong danh sách. |
remainingVehicleJourneySegments[i].stop.plannedLocation |
Vị trí dự kiến của điểm dừng. |
remainingVehicleJourneySegments[i].stop.tasks |
Danh sách các việc cần làm tại điểm dừng 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 cho biết cách sử dụng thư viện gRPC Java và lệnh gọi HTTP REST đến UpdateDeliveryVehicle
để thêm hai tác 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;
}
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 của một xe tải giao hàng trong đội xe mà bạn dự định cập nhật thứ tự công việc. Đây là giá trị nhận dạng mà bạn đã chỉ định khi tạo xe.
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ể
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