Đị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ụ. Nó cung cấp các ví dụ cụ thể về cách định cấu hình các tác 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 về 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ị nhiệm vụ: Tuỳ chỉnh chế độ hiển thị của các hoạt động trong nhiệm vụ để hiển thị cho khách hàng hoặc người vận hành đội xe.

Hãy 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 việc cần làm hiện có, bạn cũng phải thêm mã 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 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 cho người nhận về khung thời gian giao hàng, bạn có thể 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ể 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 khoảng thời gian cho một tác vụ bằng HTTP, hãy gọi PATCH và 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 nhiệm vụ. Tiêu đề 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ụ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ị nhiệm vụ

Theo mặc định, Fleet Engine cung cấp thông tin về các hoạt động của nhiệm vụ mà sau đó có thể hiển thị cho cả khách hàng nhận lô hàng và cho các đơn vị vận 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 cho 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 đồ. Những quy tắc này áp dụng cho 2 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ị các điểm đánh dấu vị trí cho vị trí giao 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 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ụ 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 việc sau:

  • Điểm dừng theo lịch
  • Việc cần làm về tình trạng không còn phòng
  • Các việc không hoạt động liên quan đến xe

Quy tắc hiển thị 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 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 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 công việc dự kiến vẫn có sẵn. Xin lưu ý rằng bạn không thể tuỳ chỉnh quy tắc này.

Khả năng hiển thị các việc cần làm đang được thực hiện 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 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. 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ị cho 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 ra các quy tắc để từng phần tử dữ liệu có sẵn.

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 nhiệm vụ về 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 ước tính
  • Khoảng cách 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 biết các lựa chọn về chế độ hiển thị cho những trường được liệt kê ở trên.

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

Đối với một tuyến đường được theo dõi, chế độ hiển thị của các đường nhiều đường trên tuyến đường sẽ phụ thuộc vào chế độ hiển thị của xe. Nếu đường đa tuyến của tuyến đường xuất hiện trên một tuyến đường đang hoạt động mà không thấy xe, thì vị trí của xe vẫn có thể được suy ra từ cuối đường đa tuyến xuất hiện. Do đó, khả năng hiển thị đường nhiều đường phải hạn chế bằng hoặc hạn chế hơn khả năng 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 / vị trí xe.

Đường đa tuyến 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ả đường đa tuyến 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 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 nhiều đoạ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, phương tiện sẽ xuất hiện, nhưng tuyến đường cho phương tiện đó 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 của tuyến đường và vị trí của xe chỉ định các lựa chọn hiển thị

Khi đường nhiều đoạn 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 lựa chọn hiển thị đều được đáp ứng. Xin nhắc lại rằng chế độ hiển thị của đường nhiều đoạn tuân theo các quy tắc hiển thị của xe:

  • Luôn hiển thị: Đường nhiều đoạn của tuyến đường phải sử dụng lựa chọn chế độ hiển thị luôn hiển thị khi vị trí của xe cũng cung cấp lựa chọn chế độ hiển thị luôn hiển thị tương tự.
  • Không bao giờ hiển thị: Đường đa tuyến của tuyến đường phải sử dụng lựa chọn chế độ hiển thị không bao giờ hiển thị khi vị trí của xe sử dụng lựa chọn chế độ 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 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ị nhiệm vụ

Các ví dụ sau đây minh hoạ cách thiết lập một nhiệm 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 đang ở trong phạm vi 3 điểm dừng.
  • Hiện ETA 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 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 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