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ế, các doanh nghiệp giao nhiệm vụ giao hàng cho người lái xe, sau đó người lái xe 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ư nơi cư trú 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 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 việc cần làm tại điểm dừng đó.

Bạn có thể cập nhật các tác vụ liên quan đến xe bất cứ lúc nào, nhưng thường thì bạn thực hiện 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 tất 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ó được liên kết với một điểm dừng nhất định của xe.
  • 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ụ là vị trí giống với điểm dừng của xe được liên kết với nhiệm vụ. 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ụ: xe của bạn có thể 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 việc cần làm đã chỉ định trước đó để loại bỏ những việc đó 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 chiếc xe từ môi trường máy chủ hoặc bằng cách sử dụng Driver SDK nếu bạn cho phép tài xế quản lý các nhiệm 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 trạng tranh đua và duy trì một nguồn đáng tin cậy duy nhất.

Để thay đổi phương tiện vận chuyển một lô hàng, hãy đóng nhiệm vụ ban đầu và tạo lại nhiệm vụ đó trước khi chỉ định cho một phương tiện khác. Nếu cập nhật một xe giao hàng để thêm một việc đã được giao 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 phải đặt khi cập nhật một việc cần làm cho xe. Bạn chưa cung cấp trường không bắt buộc nào. Fleet Engine 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 việc cần làm theo thứ tự mà chúng phải được 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 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 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;
 }

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 đề 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ụMã thông báo web theo chuẩn 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