Định cấu hình việc cần làm

Tài liệu này giả định rằng bạn hiểu cách tạo và sử dụng các tác vụ. Tài liệu này cung cấp các ví dụ cụ thể về cách định cấu hình tác vụ vận chuyển theo các cách sau:

  • Đặt khoảng thời gian mục tiêu cho một nhiệm vụ vận chuyển: Đặt khoảng thời gian để hoàn thành nhiệm vụ.

  • Tuỳ chỉnh chế độ hiển thị công việc: Tuỳ chỉnh chế độ hiển thị các hoạt động của công việc để hiển thị cho khách hàng hoặc người vận hành đội xe.

Hãy xem bài viết Tạo nhiệm vụ vận chuyển để biết thông tin chi tiết về các trường cho nhiệm vụ vận chuyển. Khi cập nhật thông tin bổ sung về các việc cần làm hiện có, bạn cũng phải thêm giá trị nhận dạng liên quan cho việc cần làm, ngoài các trường mà bạn cập nhật cho việc cần làm.

Đặt khoảng thời gian mục tiêu

Khung thời gian mục tiêu là TimeWindow trong đó tác vụ sẽ được hoàn thành. Ví dụ: nếu thông báo khoảng thời gian giao hàng cho người nhận hàng, bạn có thể sử dụng khoảng thời gian mục tiêu của tác vụ để ghi lại khoảng thời gian này và tạo cảnh báo, hoặc bạn có thể sử dụng khoảng thời gian này để phân tích hiệu suất của chuyến đi trước đây.

Khoảng thời gian mục tiêu bao gồm thời gian bắt đầu và thời gian kết thúc, đồng thời có thể được đặt trên bất kỳ loại tác vụ nào. Khoảng thời gian mục tiêu không ảnh hưởng đến hành vi định tuyến.

Các ví dụ sau đây cho biết cách đặt khoảng thời gian bằng thư viện gRPC Java hoặc cách tạo yêu cầu HTTP REST đến UpdateTask. Bạn cũng có thể đặt trường này tại thời điểm tạo việc cần làm.

gRPC

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

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
  Task task = Task.newBuilder()
    .setName(taskName)
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .build();

  // Task request
  UpdateTaskRequest updateTaskRequest =
    UpdateTaskRequest.newBuilder()  // No need for the header
        .setTask(task)
        .setUpdateMask(FieldMask.newBuilder().addPaths("targetTimeWindow"))
        .build();

  try {
    Task updatedTask = deliveryService.updateTask(updateTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case NOT_FOUND:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

REST

Để đặt khoảng thời gian thực hiện tác vụ bằng HTTP, hãy gọi PATCH và sử dụng updateMask để cập nhật thông số targetTimeWindow:

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow

Trong đó, <id> 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 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 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 xác thực web JSON.

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
  curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=targetTimeWindow" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
    "targetTimeWindow": {
      "startTime": "2023-03-29T21:00:00Z",
      "endTime": "2023-03-29T23:00:00Z"
    }
  }
  EOM

Tuỳ chỉnh chế độ hiển thị việc cần làm

Theo mặc định, Công cụ quản lý đội xe cung cấp thông tin về các hoạt động của công việc. Sau đó, thông tin này có thể được hiển thị cho cả khách hàng nhận lô hàng và cho các nhà điều hành đội xe theo dõi lô hàng. Thông tin này bao gồm các thông tin như cho biết số lượng điểm dừng trước khi gửi cho khách hàng thông báo về trạng thái giao gói hàng. Bạn có thể tuỳ chỉnh thông tin này trên cơ sở từng công việc để phù hợp hơn với mô hình kinh doanh của mình.

Phần này mô tả các quy tắc hiển thị đối với các đối tượng được theo dõi trên bản đồ. Các quy tắc này áp dụng cho hai danh mục đối tượng:

  • Mức độ hiển thị điểm đánh dấu vị trí
  • Chế độ hiển thị dữ liệu tác vụ cho các tác vụ đang hoạt động của xe, chẳng hạn như đường đa tuyến và ETA

Quy tắc hiển thị điểm đánh dấu vị trí

Công cụ quản lý đội xe hiển thị điểm đánh dấu vị trí cho vị trí giao hàng xuất hiện trên bản đồ, bất kể trạng thái giao hàng.

Quy tắc hiển thị dữ liệu công việc

Phần này mô tả các quy tắc hiển thị mặc định áp dụng cho dữ liệu công việc. Bạn chỉ có thể tuỳ chỉnh các nhiệm vụ đang hoạt động của xe, tức là chỉ các nhiệm vụ nhận và trả xe mới có thể áp dụng các quy tắc hiển thị tuỳ chỉnh.

Bạn không thể tuỳ chỉnh các nhiệm vụ sau:

  • Điểm dừng theo lịch
  • Việc cần làm không có sẵn
  • Tác vụ không hoạt động trên xe

Quy tắc hiển thị việc cần làm không có sẵn

Theo mặc định, xe sẽ không xuất hiện trên bản đồ nếu ít nhất một nhiệm vụ không có sẵn được chỉ định cho nhiệm vụ đang được theo dõi. Ví dụ: nếu người lái xe đang nghỉ giải lao hoặc xe đang đổ xăng trên tuyến đường đến lô hàng được theo dõi. Bạn vẫn có thể xem thời gian đến dự kiến và thời gian hoàn thành tác vụ dự kiến. Xin nhắc lại rằng bạn không thể tuỳ chỉnh quy tắc này.

Mức độ hiển thị của các nhiệm vụ đang hoạt động trên xe

Đối tượng TaskTrackingInfo cung cấp một số phần tử dữ liệu mà bạn có thể hiển thị bằng cách sử dụng Thư viện theo dõi lô hàng. Theo mặc định, các trường này sẽ hiển thị khi công việc được giao cho xe và khi xe ở trong phạm vi 5 điểm dừng của công việc. Chế độ hiển thị sẽ kết thúc khi tác vụ hoàn tất hoặc bị huỷ.

Bạn có thể tuỳ chỉnh cấu hình chế độ hiển thị trên cơ sở từng tác vụ bằng cách đặt TaskTrackingViewConfig trên một tác vụ khi tạo hoặc cập nhật tác vụ trong Công cụ quản lý đội xe. Thao tác này sẽ tạo các quy tắc cho từng phần tử dữ liệu.

Bảng sau đây cho biết những trường mà bạn có thể áp dụng quy tắc hiển thị.

Các trường tác vụ của xe cho quy tắc hiển thị
  • Hình nhiều đường của tuyến đường
  • Thời gian đến dự kiến
  • Thời gian hoàn thành tác vụ ước tính
  • Khoảng cách còn lại để lái xe đến việc cần làm
  • Số lượng trạm dừng còn lại
  • Vị trí của xe

Bảng này cho thấy các tuỳ chọn chế độ hiển thị có sẵn cho các trường được liệt kê ở trên.

Tuỳ chọn hiển thị
  • Số lượng trạm dừng còn lại
  • Thời lượng cho đến thời gian đến dự kiến
  • Quãng đường lái xe còn lại
  • Luôn hiển thị
  • Không bao giờ hiển thị

Quy tắc hiển thị vị trí xe và đường đa tuyến

Đối với tuyến đường được theo dõi, chế độ hiển thị của các đường đa tuyến của tuyến đường phụ thuộc vào chế độ hiển thị của xe. Nếu một đa tuyến đường hiển thị trên một tuyến đường đang hoạt động mà xe không hiển thị, thì vị trí của xe vẫn có thể được suy luận ở cuối đa tuyến đường hiển thị. Do đó, chế độ hiển thị đường đa tuyến của tuyến đường phải hạn chế hoặc hạn chế hơn chế độ hiển thị xe.

Hãy tuân thủ các quy tắc sau để cung cấp tổ hợp đường đa tuyến của tuyến / khả năng hiển thị vị trí xe hợp lệ.

Đường đa tuyến của tuyến đường và vị trí của xe chỉ định cùng các tuỳ chọn chế độ hiển thị

Trong trường hợp này, cả đường đa tuyến và vị trí xe đều đặt các tuỳ chọn giống nhau, bao gồm:

  • số lượng trạm dừng còn lại
  • thời lượng cho đến ETA
  • quãng đường lái xe còn lại

Để tuân thủ các quy tắc, giá trị cho chế độ hiển thị đường đa tuyến của tuyến đường phải nhỏ hơn hoặc bằng giá trị được đặt cho chế độ hiển thị xe. Trong ví dụ này, ngưỡng điểm dừng còn lại cho đường đa tuyến được đặt thành 3, thấp hơn giá trị 5 được chỉ định cho xe. Điều này có nghĩa là khi hành trình được theo dõi cách vị trí thực hiện nhiệm vụ 5 điểm dừng, xe sẽ xuất hiện, nhưng tuyến đường của xe đó sẽ không xuất hiện cho đến khi hành trình cách 3 điểm dừng.

```js
"taskTrackingViewConfig": {
  "routePolylinePointsVisibility": {
    "remainingStopCountThreshold": 3
  },
  "vehicleLocationVisibility": {
    "remainingStopCountThreshold": 5
  },
}
```

Đường đa tuyến và vị trí xe chỉ định các chế độ hiển thị khác nhau

Khi đường đa tuyến của tuyến đường và vị trí xe có các tuỳ chọn hiển thị khác nhau, vị trí xe chỉ hiển thị khi cả hai tuỳ chọn hiển thị của chúng đều được đáp ứng. Xin nhắc lại rằng chế độ hiển thị của đường đa tuyến phải tuân theo các quy tắc hiển thị của xe:

  • Luôn hiển thị: Đường đa tuyến của tuyến đường phải sử dụng tuỳ chọn chế độ hiển thị luôn hiển thị khi vị trí của xe cũng cung cấp cùng một tuỳ chọn chế độ hiển thị luôn hiển thị.
  • Không bao giờ hiển thị: Đường đa tuyến của tuyến đường phải sử dụng tuỳ chọn chế độ hiển thị không bao giờ hiển thị khi vị trí của xe sử dụng tuỳ chọn chế độ hiển thị không bao giờ hiển thị.

Sau đây là ví dụ:

  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "vehicleLocationVisibility": {
      "remainingDrivingDistanceMetersThreshold": 3000
    },
  }

Trong ví dụ này, vị trí của xe chỉ hiển thị nếu số lượng điểm dừng còn lại ít nhất là 3 quãng đường lái xe còn lại ít nhất là 3.000 mét.

Ví dụ về tuỳ chỉnh chế độ hiển thị công việc

Các ví dụ sau đây cho thấy cách thiết lập một tác vụ bằng các quy tắc hiển thị sau:

  • Hiển thị các đường đa tuyến của tuyến đường nếu xe nằm trong phạm vi 3 điểm dừng.
  • Hiển thị thời gian đến dự kiến nếu quãng đường còn lại ngắn hơn 5.000 mét.
  • Không bao giờ hiển thị số lượng điểm dừng còn lại.
  • Mỗi trường khác vẫn giữ nguyên chế độ hiển thị mặc định là hiển thị khi xe nằm trong phạm vi 5 điểm dừng của nhiệm vụ.

Xem TaskTrackingViewConfig cho gRPC hoặc REST.

gRPC

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setTaskTrackingViewConfig(
    TaskTrackingViewConfig.newBuilder()
      .setRoutePolylinePointsVisibility(
        VisibilityOption.newBuilder().setRemainingStopCountThreshold(3))
      .setEstimatedArrivalTimeVisibility(
        VisibilityOption.newBuilder().remainingDrivingDistanceMetersThreshold(5000))
      .setRemainingStopCountVisibility(
        VisibilityOption.newBuilder().setNever(true)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("taskTrackingViewConfig"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
  }
  return;
}

REST

Để đặt cửa sổ cấu hình chế độ xem theo dõi công việc bằng HTTP, hãy gọi PATCH và sử dụng updateMask để cập nhật tham số taskTrackingViewConfig:

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig

Ví dụ:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskTrackingViewConfig" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "estimatedArrivalTimeVisibility": {
      "remainingDrivingDistanceMetersThreshold": 5000
    },
    "remainingStopCountVisibility": {
      "never": true
    }
  }
}
EOM

Bước tiếp theo