Tài liệu này giả định rằng bạn đã quen thuộc với những nội dung sau:
- Tạo nhiệm vụ vận chuyển
- Phần giới thiệu về Việc cần làm theo lịch, 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 lập mô hình này trong Fleet Engine bằng cách tạo một nhiệm vụ và đưa ra yêu cầu cập nhật xe giao hàng, sau đó 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 cho xe hoàn thành nhiệm vụ. 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 cho xe hoặc bằng yêu cầu cập nhật để thêm một nhiệm vụ mới cho 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ý hoạt động của độ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 quan đến 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 phương tiện 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 nhiệm vụ để 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.
Để chuyển một lô hàng từ xe này sang xe khác, hãy đóng nhiệm vụ ban đầu rồi 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 trình bày các trường bắt buộc cần đặt khi cập nhật nhiệm vụ cho một 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. Tác vụ đầu tiên trong danh sách sẽ được thực thi trước. |
remainingVehicleJourneySegments[i].stop |
Điểm dừng cho nhiệm 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 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ề việc 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 HTTP REST đế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 cho một xe giao hàng trong đội xe của bạn mà bạn muốn cập nhật thứ tự 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 trường Authorization có giá trị Bearer <token>, trong đó <token> do máy chủ của bạn cấp theo 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