Đị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 việc cần làm. Tài liệu này cung cấp các ví dụ cụ thể về cách định cấu hình việc cần làm liên quan đến lô hàng theo những cách sau:

  • Đặt khoảng thời gian mục tiêu cho việc cần làm liên quan đến lô hàng: Đặt khoảng thời gian để hoàn thành việc cần làm.

  • Tuỳ chỉnh chế độ hiển thị của việc cần làm: Tuỳ chỉnh chế độ hiển thị của các hoạt động liên quan đến việc cần làm để hiển thị cho khách hàng hoặc người điều hành đội xe.

Hãy xem bài viết Tạo việc cần làm liên quan đến lô hàng để biết thông tin chi tiết về các trường cho việc cần làm liên quan đến lô hàng. 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 đưa giá trị nhận dạng có 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

Khoảng thời gian mục tiêu là TimeWindow trong đó việc cần làm phải được hoàn thành. Ví dụ: nếu bạn 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 việc cần làm để nắm bắt 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 trong quá khứ.

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 cho mọi loại việc cần làm. 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 thấy cách đặt khoảng thời gian bằng thư viện gRPC Java hoặc cách đưa ra yêu cầu HTTP REST tới 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 cho việc cần làm bằng HTTP, hãy gọi PATCH và sử dụng updateMask để cập nhật tham 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 cho việc cần làm. 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 các nguyên tắc được mô tả trong bài viết Vai trò tài khoản dịch vụMã thông báo 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ị của việc cần làm

Theo mặc định, Fleet Engine cung cấp khả năng hiển thị về các hoạt động liên quan đến việc cần làm. Khả năng hiển thị này có thể được hiển thị cho cả khách hàng nhận lô hàng và người điều hành đội xe theo dõi lô hàng. Thông tin này bao gồm thông tin cho biết số điểm dừng trước khi gửi thông báo cho khách hàng về trạng thái giao gói hàng của họ. Bạn có thể tuỳ chỉnh thông tin này trên cơ sở từng việc cần làm để 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ị cho các đối tượng được theo dõi trên bản đồ. Các quy tắc này áp dụng cho 2 danh mục đối tượng:

  • Chế độ hiển thị của điểm đánh dấu vị trí
  • Khả năng hiển thị dữ liệu cho các việc cần làm của xe đang hoạt động, chẳng hạn như hình nhiều đường và Giờ đến dự kiến

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

Fleet Engine hiển thị điểm đánh dấu vị trí cho vị trí giao lô hàng được hiển thị trên bản đồ, bất kể trạng thái giao hàng.

Quy tắc hiển thị dữ liệu của việc cần làm

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ủa việc cần làm. Bạn chỉ có thể tuỳ chỉnh các việc cần làm của xe đang hoạt động, tức là chỉ các việc cần làm liên quan đến việc lấy hàng và giao hàng 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 việc cần làm sau đây:

  • Điểm dừng theo lịch
  • Việc cần làm liên quan đến tình trạng không có sẵn
  • Việc cần làm của xe không hoạt động

Quy tắc hiển thị của việc cần làm liên quan đến tình trạng không có sẵn

Theo mặc định, xe không xuất hiện trên bản đồ nếu ít nhất một việc cần làm liên quan đến tình trạng không có sẵn được chỉ định cho việc cần làm đang được theo dõi. Ví dụ: nếu tài xế đang nghỉ giải lao hoặc xe đang được tiếp nhiên liệu trên tuyến đường đến lô hàng được theo dõi. Thời gian đến dự kiến và thời gian hoàn thành việc cần làm dự kiến vẫn có sẵn. Một lần nữa, bạn không thể tuỳ chỉnh quy tắc này.

Chế độ hiển thị của các việc cần làm của xe đang hoạt động

Đối tượng TaskTrackingInfo cung cấp một số thành phần dữ liệu mà bạn có thể hiển thị bằ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 việc cần làm được chỉ định cho xe và khi xe cách việc cần làm trong vòng 5 điểm dừng. Chế độ hiển thị kết thúc khi việc cần làm được hoàn thành hoặc bị huỷ.

Bạn có thể tuỳ chỉnh cấu hình hiển thị trên cơ sở từng việc cần làm bằng cách đặt TaskTrackingViewConfig cho một việc cần làm khi tạo hoặc cập nhật việc cần làm trong Fleet Engine. Thao tác này sẽ tạo ra các quy tắc để từng thành phần dữ liệu có sẵn.

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

Các trường của việc cần làm của xe cho quy tắc hiển thị
  • Đường nhiều đoạn của tuyến đường
  • Thời gian đến dự kiến
  • Thời gian hoàn thành việc cần làm dự kiến
  • Quãng đường lái xe còn lại đến việc cần làm
  • Số điểm dừng còn lại
  • Vị trí của xe

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

Các chế độ hiển thị
  • Số điể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ị của đường nhiều đoạn của tuyến đường và vị trí của xe

Đối với một tuyến đường được theo dõi, khả năng hiển thị của hình nhiều đường của tuyến đường phải tuân theo khả năng hiển thị của xe. Nếu hình nhiều đường của tuyến đường hiển thị trên một tuyến đường đang hoạt động mà không hiển thị xe, thì vị trí của xe vẫn có thể được suy luận bằng cách kết thúc hình nhiều đường hiển thị. Do đó, khả năng hiển thị của đường nhiều đoạn của tuyến đường phải hạn chế hoặc hạn chế hơn khả năng hiển thị của xe.

Hãy làm theo các quy tắc sau để cung cấp một tổ hợp hiển thị hợp lệ của đường nhiều đoạn của tuyến đường / vị trí của xe.

Đường nhiều đoạn của tuyến đường và vị trí của xe chỉ định các chế độ hiển thị giống nhau

Trong trường hợp này, cả hình nhiều đường và vị trí của xe đều đặt các chế độ giống nhau, bao gồm:

  • số điể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

Để tuân thủ các quy tắc, giá trị cho khả năng hiển thị của hình nhiều đường của tuyến đường phải nhỏ hơn hoặc bằng giá trị được đặt cho khả năng hiển thị của xe. Trong ví dụ này, ngưỡng điểm dừng còn lại cho đường nhiều đoạn được đặt thành 3, nhỏ 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í của việc cần làm 5 điểm dừng, xe sẽ xuất hiện, nhưng tuyến đường cho 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 nhiều đoạn của tuyến đường và vị trí của xe chỉ định các chế độ hiển thị khác nhau

Khi hình nhiều đường của tuyến đường và vị trí của xe có các tùy chọn khả năng hiển thị khác nhau , vị trí của xe chỉ hiển thị khi cả hai tùy chọn khả năng hiển thị đều được đáp ứng. Một lần nữa, khả năng hiển thị của đường nhiều đoạn phải tuân theo các quy tắc hiển thị của xe:

  • Luôn hiển thị: Hình nhiều đường của tuyến đường phải sử dụng tùy chọn khả năng hiển thị luôn hiển thị khi vị trí của xe cũng cung cấp tùy chọn khả năng hiển thị luôn hiển thị tương tự.
  • Không bao giờ hiển thị: Đường nhiều đoạn của tuyến đường phải sử dụng tùy chọn hiển thị không bao giờ hiển thị khi vị trí của xe sử dụng tùy chọn hiển thị không bao giờ hiển thị.

Sau đây là một 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ố đ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à 3000 mét.

Ví dụ về tuỳ chỉnh chế độ hiển thị của việc cần làm

Các ví dụ sau đây cho thấy cách đặt một việc cần làm theo các quy tắc hiển thị sau:

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

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 việc cần làm 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