Đị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. Chiến dịch này cung cấp ví dụ cụ thể về cách thiết lập công việc vận chuyển theo những cách sau:

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

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

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

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

Khoảng thời gian mục tiêu là TimeWindow mà trong đó tác vụ sẽ được thực hiện đã hoàn tất. Ví dụ: nếu bạn thông báo về khoảng thời gian giao hàng người nhận, bạn có thể sử dụng cửa sổ thời gian mục tiêu của công việc để ghi lại khoảng thời gian này để tạo cảnh báo hoặc bạn có thể sử dụng tính năng 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 bạn có thể đặt khoảng thời gian trên mọi loại tác vụ. Khoảng thời gian mục tiêu không ảnh hưởng đến việc định tuyến hành vi.

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

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;
  }

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

Để đặt khoảng thời gian cho tác vụ 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

Đây &lt;id&gt; là giá trị nhận dạng duy nhất của công việc. Tiêu đề của yêu cầu phải chứa trường Uỷ quyền có giá trị Bearer <token>, nơi &lt;token&gt; do máy chủ của bạn cấp theo nguyên tắc như mô tả trong các vai trò đối với 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ị việc cần làm

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

Phần này mô tả các quy tắc hiển thị cho đố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:

  • Khả năng hiển thị điểm đánh dấu vị trí
  • Chế độ xem dữ liệu về công việc cho các nhiệm vụ trên 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ị điểm đánh dấu vị trí

Fleet Engine hiển thị các điểm đánh dấu vị trí cho vị trí giao hàng 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ô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 tác vụ xe đang hoạt động, tức là chỉ công việc đến lấy hàng và trả xe có thể áp dụng các quy tắc tuỳ chỉnh về chế độ hiển thị.

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

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

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

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

Chế độ hiển thị các nhiệm vụ trên xe đang hoạt động

Đố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 vận chuyển. Theo mặc định, các trường này đều xuất hiện khi bạn giao nhiệm vụ cho xe và khi xe đó trong vòng 5 điểm dừng của tác vụ. Chế độ hiển thị kết thúc khi việc cần làm được hoàn thành hoặc đã huỷ.

Bạn có thể tuỳ chỉnh cấu hình chế độ hiển thị theo từng tác vụ bằng cách cài đặt TaskTrackingViewConfig trên 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 để các phần tử dữ liệu riêng lẻ sẵn có.

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

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

Bảng này hiển thị các tùy chọn 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 gian cho đến thời gian đến ước tính
  • 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 về chế độ hiển thị hình nhiều đường và vị trí của xe

Đối với tuyến đường được theo dõi, tầm nhìn của hình nhiều đường phải tuân theo tầm nhìn của xe. Nếu có hình nhiều đường trên tuyến đường đang hoạt động khi xe không hiển thị, thì vị trí của xe vẫn có thể suy ra ở cuối hình nhiều đường nhìn thấy được. Do đó, định tuyến hình nhiều đường tầm nhìn phải hạn chế hoặc hạn chế hơn tầm nhìn của xe.

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

Hình nhiều đường 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 được đặt giống nhau các lựa chọn, bao gồm:

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

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

Hình nhiều đường của tuyến đường và vị trí của xe chỉ định các chế độ hiển thị khác nhau

Khi nhiều tuyến đường và vị trí của xe có các lựa chọn hiển thị khác nhau, vị trí của xe chỉ xuất hiện khi cả hai chế độ hiển thị của xe đều xuất hiện hài lòng. Một lần nữa, mức độ hiển thị hình nhiều đường phải tuân theo các quy tắc hiển thị của chiếc xe:

  • Luôn hiển thị: Hình nhiều đường phải sử dụng thuộc tính luôn hiển thị chế độ hiển thị khi vị trí của xe cũng cung cấp lựa chọn luôn luôn hiển thị.
  • Không bao giờ hiển thị: Hình nhiều đường phải sử dụng chế độ hiển thị không bao giờ hiển thị khi vị trí của xe sử dụng 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 điểm dừng còn lại số lượng tối thiểu là 3 quãng đường lái xe còn lại tối thiểu là 3000 mét.

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

Các ví dụ sau đây minh hoạ cách đặt một tác vụ như sau quy tắc hiển thị:

  • Hiển thị hình nhiều đường nếu xe ở trong phạm vi 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 5.000 mét.
  • Không bao giờ hiển thị số đ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 khi được hiển thị khi xe cách nhiệm vụ 5 điểm dừng.

Hãy xem TaskTrackingViewConfig để biết 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;
}

Kiến trúc chuyển trạng thái đại diện (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

Các bước tiếp theo