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

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

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ộcGiá 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

Bước tiếp theo