Đị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 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 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 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 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 đó bạn phải hoàn thành việc cần làm. 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 trước đây.

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 mọi loại việc cần làm. 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 cách sử dụng Thư viện gRPC Java hoặc cách đưa ra 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 khung 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 của tác vụ. Tiêu đề của yêu cầu phải chứa một trường Authorization có giá trị Bearer <token>, trong đó <token> do máy chủ của bạn phát hành theo các nguyên tắc được mô tả trong Vai trò 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 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:

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

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

Fleet Engine hiển thị điểm đánh dấu vị trí cho địa điểm giao hàng được hiển thị 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 về nhiệm vụ. 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ụ đón và trả khách 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 trình
  • Việc cần làm về tình trạng không còn phòng
  • Việc cần làm liên quan đến xe không hoạt động

Quy tắc về khả năng hiển thị của việc cần làm khi không có thời gian

Theo mặc định, xe sẽ không xuất hiện trên bản đồ nếu bạn chỉ định ít nhất một thao tác không có sẵn cho thao tác đang được theo dõi. Ví dụ: nếu tài xế đang nghỉ ngơi 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 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ị các việc cần làm liên quan đế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 Thư viện theo dõi lô hàng. Theo mặc định, các trường này sẽ xuất hiện khi việc cần làm được giao cho xe và khi xe cách việc cần làm 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 những 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 đối với 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 ước tính để hoàn thành việc cần làm
  • Quãng đường lái xe còn lại để đến địa điểm thực hiện nhiệm vụ
  • Số lần dừng còn lại
  • Vị trí của xe

Bảng này cho biết các lựa chọn về 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ần dừng còn lại
  • Thời gian 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 nhiều đường

Đối với một tuyến đường được theo dõi, chế độ hiển thị của hình nhiều đường trên tuyến đường sẽ phụ thuộc vào chế độ hiển thị của xe. Nếu một hình nhiều đường của tuyến đường xuất hiện trên một tuyến đường đang hoạt động mà xe không xuất hiện, thì vị trí của xe vẫn có thể được suy luận theo điểm cuối của hình nhiều đường xuất hiện. Do đó, chế độ hiển thị đường nhiều đường phải hạn chế bằng 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 một tổ hợp hợp lệ giữa đường nhiều đoạ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 một 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 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 chế độ hiển thị đường đa tuyến 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 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 nhiệm vụ 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 đa tuyến và vị trí của xe chỉ định các lựa chọn hiển thị

Khi đường đa tuyến của tuyến đường và vị trí của xe có các lựa chọn về khả năng hiển thị khác nhau, vị trí của xe chỉ xuất hiện khi cả hai lựa chọn về khả năng 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ị: 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ị: Hình nhiều đường 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à một ví dụ:

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

Trong ví dụ này, vị trí của xe chỉ xuất hiện nếu số điểm dừng còn lại ít nhất là 3 VÀ khoảng cách 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 minh hoạ cách thiết lập một tác vụ theo các quy tắc hiển thị sau:

  • Hiện các đường nhiều đoạn của tuyến đường nếu xe nằm trong phạm vi 3 điểm dừng.
  • Hiện thời gian đến dự kiến nếu khoảng cách 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ữ chế độ hiển thị mặc định là xuất hiện khi xe cách điểm dừng của nhiệm vụ 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 tác vụ bằng HTTP, hãy gọi PATCH và 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