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

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

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 một 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ó 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, 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 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 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ộcGiá 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 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`
  • &lt;id&gt; 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ụ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

Các bước tiếp theo