Tạo nhiệm vụ vận chuyển

Tài liệu này giả định bạn đã đọc hướng dẫn giới thiệu về Công việc đã lên lịch trong phần Giới thiệu về Fleet EngineCông việc đã lên lịch là gì? trong phần này.

Fleet Engine dành cho các nhiệm vụ theo lịch cung cấp nhiều loại nhiệm vụ:

  • Nhiệm vụ vận chuyển: Dùng để lái xe, bao gồm cả việc lấy hàng và giao hàng lô hàng.
  • Tác vụ không có mặt: Sử dụng cho những thời điểm người lái xe không thể sử dụng, chẳng hạn như như với các điểm ngắt bắt buộc.
  • Thao tác dừng theo lịch: Dùng cho các nhiệm vụ không phải lái xe tại hòm thư hoặc của khách hàng vị trí, chẳng hạn như thời gian để vào một toà nhà hoặc xác định điểm giao hàng.

Tài liệu này trình bày cách tạo nhiệm vụ giao hàng trên máy chủ của bạn. Đối với các sản phẩm khác loại công việc, hãy xem phần Tạo loại công việc khác.

Trường nhiệm vụ vận chuyển

Mục này ghi lại các trường nhiệm vụ cần thiết cho cả dịch vụ đến lấy hàng và giao hàng công việc.

Trường việc cần làm bắt buộc

Đối với mỗi nhiệm vụ bạn tạo trong Fleet Engine, bạn phải cung cấp những thông tin bắt buộc và cũng có thể cung cấp bất kỳ trường tuỳ chọn nào. Động cơ đội tàu bỏ qua mọi trường khác và trả về một ngoại lệ nếu việc tạo tác vụ yêu cầu cung cấp một deliveryVehicleId được chỉ định. Cách giao việc cần làm cho một chiếc xe: sử dụng UpdateDeliveryVehicleRequest. Để biết thêm thông tin, hãy xem Cập nhật việc cần làm.

TrườngGiá trị
type

Đặt thành loại phù hợp với loại tác vụ, là một trong các loại sau:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id Mã công việc duy nhất. Đây không được là số vận đơn cho lô hàng. Nếu bạn không có mã công việc trong hệ thống của mình, bạn có thể tạo một mã công việc duy nhất trên toàn cầu mã nhận dạng (UUID). Để biết thông tin cụ thể, hãy xem Mã việc cần làm.
tracking_id Chỉ áp dụng cho PICKUP hoặc DELIVERY việc cần làm: Số điện thoại hoặc mã nhận dạng bạn đang dùng để theo dõi quá trình vận chuyển. Không nên cung cấp trường này cho các nhiệm vụ không phải hàng vận chuyển.
plannedLocation PICKUP, DELIVERY hoặc Chỉ dành cho SCHEDULED_STOP công việc: vị trí nơi công việc cần hoàn thành. Không bắt buộc đối với UNAVAILABLE việc cần làm.
taskDuration Thời gian dự kiến cần thêm để hoàn tất việc cần làm. Ví dụ: để xem để đỗ xe hoặc đi bộ đến vị trí chuyển giao.

Trường nhiệm vụ vận chuyển không bắt buộc

TrườngGiá trị
targetTimeWindow Khoảng thời gian hoàn thành tác vụ. Trường này không ảnh hưởng đến hành vi định tuyến.
task_tracking_view_config Chỉ áp dụng cho PICKUP hoặc DELIVERY việc cần làm: Cấu hình để theo dõi công việc chỉ định những phần tử dữ liệu hiển thị cho người dùng cuối trong trường hợp nào.
attributes Danh sách các thuộc tính tuỳ chỉnh của nhiệm vụ. Mỗi thuộc tính phải có một khoá duy nhất.

Tạo nhiệm vụ đến lấy hàng để vận chuyển

Để sử dụng Fleet Engine nhằm theo dõi hoạt động của người lái xe để lấy hàng, tạo tác vụ lấy hàng để vận chuyển. Việc này bao gồm đặt thuộc tính loại tác vụ thành PICKUP. Ví dụ sau minh hoạ dịch vụ lấy hàng vận chuyển của Grand Khu mua sắm Đông Indonesia.

Các ví dụ sau đây minh hoạ cách tạo một nhiệm vụ đến lấy hàng để vận chuyển bằng cách sử dụng Thư viện Java gRPC hoặc cách tạo yêu cầu HTTP REST để CreateTask.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String parent = "providers/" + PROJECT_ID;
  Task task = Task.newBuilder()
    .setType(Task.Type.PICKUP)
    .setState(Task.State.OPEN)
    .setTrackingId("my-tracking-id")
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
    .addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
    .addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)          // Avoid using auto-incrementing IDs for the taskId
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTask(task)              // Initial state
        .build();

  // Error handling
  // If Fleet Engine does not have a task with that ID and the credentials of the
  // requestor pass, the service creates the task successfully.

  try {
    Task createdTask = deliveryService.createTask(createTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case ALREADY_EXISTS:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

Kiến trúc chuyển trạng thái đại diện (REST)

Để tạo tác vụ đến lấy hàng vận chuyển từ môi trường máy chủ, hãy tạo một HTTP REST gọi đến CreateTask:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

&lt;id&gt; là giá trị nhận dạng duy nhất của tác vụ.

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 theo các nguyên tắc nêu trong Các vai trò trong tài khoản dịch vụJSON Web .

Nội dung yêu cầu phải chứa thực thể Task có các trường thích hợp được mô tả trong các trường nhiệm vụ vận chuyển.

Ví dụ về lệnh curl:

 # Set $JWT, $PROJECT_ID, $TRACKING_ID, and $TASK_ID in the local
 # environment
 curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "type": "PICKUP",
   "state": "OPEN",
   "trackingId": "${TRACKING_ID}",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "90s",
   "targetTimeWindow": {
     "startTime": "2023-03-29T21:00:00Z",
     "endTime": "2023-03-29T23:00:00Z"
   }
 }
 EOM

Tạo nhiệm vụ giao hàng

Để sử dụng Fleet Engine để theo dõi hoạt động của người lái xe giao hàng, tạo nhiệm vụ giao hàng. Quá trình này bao gồm cả việc đặt thuộc tính loại tác vụ thành DELIVERY. Ví dụ sau đây minh hoạ việc giao hàng cho Grand Khu mua sắm Đông Indonesia.

Các ví dụ sau đây minh hoạ cách tạo một nhiệm vụ đến lấy hàng để vận chuyển bằng cách sử dụng Thư viện Java gRPC hoặc cách tạo yêu cầu HTTP REST để CreateTask.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String parent = "providers/" + PROJECT_ID;
  Task task = Task.newBuilder()
    .setType(Task.Type.DELIVERY)
    .setState(Task.State.OPEN)
    .setTrackingId("my-tracking-id")
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
    .addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
    .addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)          // Avoid using auto-incrementing IDs for the taskId
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTask(task)              // Initial state
        .build();

  // Error handling
  // If Fleet Engine does not have task with that ID and the credentials of the
  // requestor pass, the service creates the task successfully.

  try {
    Task createdTask = deliveryService.createTask(createTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case ALREADY_EXISTS:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

Kiến trúc chuyển trạng thái đại diện (REST)

Để tạo tác vụ đến lấy hàng vận chuyển từ môi trường máy chủ, hãy tạo một HTTP REST gọi đến CreateTask:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

&lt;id&gt; là giá trị nhận dạng duy nhất của tác vụ.

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 theo các nguyên tắc nêu trong Các vai trò đối với tài khoản dịch vụJSON Web .

Phần nội dung yêu cầu phải chứa thực thể Task:

Ví dụ về lệnh curl:

 # Set $JWT, $PROJECT_ID, $TRACKING_ID, and $TASK_ID in the local
 # environment
 curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "type": "DELIVERY",
   "state": "OPEN",
   "trackingId": "${TRACKING_ID}",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "90s",
   "targetTimeWindow": {
     "startTime": "2023-03-29T21:00:00Z",
     "endTime": "2023-03-29T23:00:00Z"
   }
 }
 EOM
 ```

Các bước tiếp theo