Đị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 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 nhiệm vụ vận chuyển theo những 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ị nhiệm vụ: Tuỳ chỉnh chế độ hiển thị các hoạt động của nhiệm vụ để hiển thị cho khách hàng hoặc nhà điều 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 cho nhiệm vụ vận chuyển. Khi cập nhật thông tin bổ sung về các nhiệm vụ hiện có, bạn cũng phải thêm giá trị nhận dạng có liên quan cho nhiệm vụ, ngoài các trường bạn cập nhật cho nhiệm vụ.

Đặt khung thời gian mục tiêu

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

Khung 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 bất kỳ loại việc cần làm nào. Khung 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 gửi 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 tác vụ.

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 nhiệm 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

Trong đó, <id> là giá trị nhận dạng riêng biệt cho tác vụ. 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 phần Vai trò của tài khoản dịch vụ 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 thông tin về các hoạt động của nhiệm vụ, sau đó có thể hiển thị cho cả khách hàng nhận lô hàng và nhà điều hành đội xe theo dõi lô hàng. Thông tin này bao gồm cả việc cho biết số đ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 theo từng nhiệm vụ để 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 đố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:

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

Quy tắc về chế độ 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 địa điểm giao hàng trên bản đồ, bất kể trạng thái giao hàng.

Quy tắc về chế độ 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 việc cần làm. Bạn chỉ có thể tuỳ chỉnh nhiệm vụ đang hoạt động của xe, tức là chỉ nhiệm vụ đến lấy hàng và giao hàng mới có thể áp dụng 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 trình
  • Việc cần làm khi không có mặt
  • Việc cần làm không hoạt động của xe

Quy tắc hiển thị việc cần làm khi không rảnh

Theo mặc định, xe sẽ 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 chỉ định cho nhiệm vụ đang được theo dõi. Ví dụ: nếu tài xế đang nghỉ ngơi hoặc xe đang được nạ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 nhiệm vụ dự kiến vẫn được cung cấp. Xin nhắc lại, bạn không được tuỳ chỉnh quy tắc này.

Chế độ hiển thị nhiệm vụ đang thực hiện của 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 Thư viện theo dõi lô hàng. Theo mặc định, các trường này sẽ hiển thị khi nhiệm vụ được giao cho xe và khi xe cách nhiệm vụ trong vòng 5 điểm dừng. Trạng thái hiển thị sẽ kết thúc khi việc cần làm hoàn tất hoặc bị huỷ.

Bạn có thể tuỳ chỉnh cấu hình chế độ hiển thị theo từng nhiệm vụ bằng cách đặt TaskTrackingViewConfig cho một nhiệm vụ khi tạo hoặc cập nhật nhiệm vụ đó trong Fleet Engine. Thao tác này sẽ tạo quy tắc cho từng phần tử dữ liệu được cung cấp.

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

Các trường về việc cần làm liên quan đến xe cho quy tắc hiển thị
  • Hình nhiều đường thể hiện 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 nơi thực hiện nhiệm vụ
  • Số điểm dừng còn lại
  • Vị trí của xe

Bảng này cho biết các chế độ hiển thị có sẵn cho những trường nêu trên.

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

Hình nhiều đường thể hiện tuyến đường và quy tắc hiển thị vị trí của xe

Đối với tuyến đường được theo dõi, chế độ hiển thị của hình nhiều đường thể hiện tuyến đường phụ thuộc vào chế độ hiển thị của xe. Nếu một đường đa tuyến củ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 theo điểm cuối của đường đa tuyến hiển thị. Do đó, chế độ hiển thị của hình nhiều đường cho tuyến đường phải có mức độ hạn chế bằng hoặc cao hơn chế độ hiển thị của xe.

Hãy tuân thủ các quy tắc này để cung cấp một tổ hợp hợp lệ giữa đường đa tuyến của tuyến đường và chế độ hiển thị vị trí của xe.

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

Trong trường hợp này, cả hình nhiều đường và vị trí của xe đều đặt cùng một lựa chọn, bao gồm:

  • số điểm dừng còn lại
  • thời gian cho đến khi đến nơi
  • 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ị hình nhiều đường của tuyến đường phải nhỏ hơn hoặc bằng giá trị được đặt cho chế độ hiển thị của xe. Trong ví dụ này, ngưỡng điểm dừng còn lại cho hình nhiều đường được đặt thành 3, tức là 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òn cách vị trí 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òn cách 3 điểm dừng.

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

Đường đa tuyế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 lựa chọn hiển thị khác nhau, vị trí của xe chỉ hiển thị khi cả hai lựa chọn hiển thị đều được đáp ứng. Xin nhắc lại, chế độ hiển thị của hình nhiều đường tuân theo các quy tắc hiển thị của xe:

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

Ví dụ về cách 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 nhiệm vụ theo các quy tắc hiển thị sau:

  • Hiện hình nhiều đường của tuyến đường nếu xe còn cách điểm dừng tối đa 3 điểm.
  • Hiển thị ETA 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 giữ lại chế độ hiển thị mặc định là hiển thị khi xe còn cách nhiệm vụ 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 bảng theo dõi nhiệm vụ 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