Tài liệu này giả định rằng bạn đã nắm rõ những nội dung sau:
- Tạo việc cần làm về lô hàng
- Giới thiệu về Việc cần làm định kỳ, trong đó trình bày chi tiết mối quan hệ giữa việc cần làm, điểm dừng và xe.
Trong trường hợp giao hàng thực tế, doanh nghiệp sẽ giao nhiệm vụ giao 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à riêng hoặc phòng giao hàng trong một khu phức hợp toà nhà. Bạn mô hình hoá việc này trong Fleet Engine bằng cách tạo một việc cần làm và đưa ra yêu cầu cập nhật xe giao hàng. Sau đó, yêu cầu này sẽ cập nhật thực thể xe bằng danh sách các điểm dừng cần di chuyển. Bạn chỉ định cho mỗi điểm dừng một danh sách các việc cần làm tại điểm dừng đó.
Bạn có thể cập nhật nhiệm vụ 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ác việc cần làm để hoàn thành cho một chiếc xe. Bạn có thể thực hiện việc này bằng 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 yêu cầu cập nhật để thêm một việc cần làm 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ó liên quan đến một điểm dừng cụ thể của xe.
- Thay đổi vị trí hoàn thành nhiệm vụ. Theo mặc định, Công cụ quản lý đội xe sẽ đánh dấu vị trí hoàn thành nhiệm vụ giống với vị trí điểm dừng của xe liên kết với nhiệm vụ. Nếu muốn, bạn có thể chỉ định vị trí cụ thể cho từng việc cần làm. Ví dụ: bạn có thể cho một xe dừng 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 nhiệm vụ đã chỉ định trước đó để loại bỏ chúng khỏi thứ tự cập nhật. Hãy xem phần Hoàn tất việc cần làm để biết thông tin chi tiết.
Lên lịch hoặc thay đổi nhiệm vụ giao hàng
Bạn có thể lên lịch hoặc thay đổi các nhiệm vụ được giao cho một xe từ môi trường máy chủ hoặc bằng cách sử dụng SDK Trình điều khiển nếu bạn cung cấp cho tài xế khả năng quản lý nhiệm vụ bằng một thiết bị tin cậy. Chỉ sử dụng một phương thức để tránh tình huống tương tranh và duy trì một nguồn đáng tin cậy duy nhất.
Để thay đổi chuyến giao hàng từ xe này sang xe khác, hãy đóng nhiệm vụ ban đầu và tạo lại nhiệm vụ đó trước khi chỉ định cho một xe khác. Nếu cập nhật một xe giao hàng để thêm một nhiệm vụ đã được chỉ định 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 việc cần làm cho xe. Không có trường tuỳ chọn nào được cung cấp. Công cụ quản lý đội xe sẽ 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ị |
|---|---|
remainingVehicleJourneySegments |
Danh sách các phân đoạn hành trình cho các nhiệm vụ theo thứ tự cần thực hiện. Việc cần làm đầu tiên trong danh sách sẽ được thực hiện trước. |
remainingVehicleJourneySegments[i].stop |
Điểm dừng cho việc cần làm 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 này của xe. |
remainingVehicleJourneySegments[i].stop.state |
State.NEW |
Ví dụ về cách giao việc cần làm
Các ví dụ sau đây cho thấy cách sử dụng thư viện gRPC Java và lệnh gọi REST HTTP đến UpdateDeliveryVehicle để thêm hai 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;
}
REST
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
<id> là giá trị nhận dạng riêng biệt của một xe giao hàng trong đội xe mà bạn dự định cập nhật thứ tự thực hiện nhiệm vụ. Đây là giá trị nhận dạng mà bạn đã chỉ định khi tạo xe.
Tiêu đề của yêu cầu phải chứa một trường Authorization 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 Vai trò 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