Cập nhật nhiệm vụ xe giao hàng

Tài liệu này giả định rằng bạn đã làm quen với những nội dung sau:

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 chỉ định cho mỗi điểm dừng một danh sách các nhiệm vụ 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 cho các tác vụ cần hoàn thành đối với 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ó liên quan đến một điểm dừng xe nhất định.
  • 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ể cho xe dừng tại một khu phức hợp lớn để phân phối một số gói hàng, mỗi gói hàng được chỉ định một phòng phân phối 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 việc cần làm để 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 tác vụ được chỉ định 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 cho phép trình điều khiển quản lý các tác vụ bằng một thiết bị đáng 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 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 xe tải để thêm một nhiệm vụ đã được chỉ định cho một xe tải 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 phải đặt khi cập nhật một công việc cho một xe. Không có trường không bắt buộc nào được cung cấp. Công cụ Fleet sẽ bỏ qua tất cả các trường khác trong thực thể để cập nhật.

Trường bắt buộcGiá trị
remainingVehicleJourneySegments Danh sách các phân đoạn hành trình cho các tác vụ theo thứ tự thực thi. 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 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ụ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

Bước tiếp theo