Cập nhật các trường về xe giao hàng

Tài liệu này trình bày các trường quan trọng về xe mà bạn có thể cập nhật khi tạo và quản lý xe.

  • type: Loại xe giao hàng này. Điều này ảnh hưởng đến các tuyến đường được tạo cho xe này.
  • attributes[]: Một mảng tuỳ chọn thuộc loại DeliveryVehicleAttribute. Sử dụng các tiêu chí này để xác định tiêu chí tuỳ chỉnh cho xe trong dịch vụ của bạn nhằm nâng cao hành vi lọc khi tìm kiếm hoặc đăng xe.
 

Để xem danh sách đầy đủ các trường của xe, hãy xem:

Trường thuộc tính xe

Sử dụng trường attributes của xe để tạo tiêu chí tuỳ chỉnh cho phép người tiêu dùng hoặc người vận hành đội xe tìm thấy xe trong đội xe của bạn theo nhiều tiêu chí tìm kiếm hơn. Điều này giúp nâng cao khả năng của ứng dụng để cung cấp kết quả khớp xe tốt hơn so với khi bạn chỉ sử dụng tiêu chí tìm kiếm dựa trên các trường xe khác. Mỗi xe có thể có tối đa 100 thuộc tính và mỗi xe phải có một khoá riêng biệt. Giá trị có thể là chuỗi, boolean hoặc số.

Ví dụ: bạn có thể khai báo một thuộc tính tuỳ chỉnh có tên là zone để phân biệt khu vực nào của thành phố mà xe giao hàng của bạn hoạt động. Bạn sẽ sử dụng các giá trị chuỗi như sau để biểu thị các vùng khác nhau: 1B, 2C3A. Sau đó, bạn có thể sử dụng bộ lọc trong tính năng Theo dõi đội xe để chỉ hiển thị những xe hoạt động trong một khu vực cụ thể cho người vận hành chịu trách nhiệm về khu vực đó.

Tuy nhiên, các giá trị thuộc tính tuỳ chỉnh không nhất thiết phải loại trừ lẫn nhau. Bạn có thể sử dụng các tiêu chí như available-at-night (có phục vụ vào ban đêm) và has-refrigeration (có tủ lạnh). Mỗi thuộc tính trong số này có thể là một thuộc tính tuỳ chỉnh riêng biệt sử dụng giá trị boolean. Một xe cụ thể có thể được chỉ định cả ba thuộc tính tuỳ chỉnh này cùng với thuộc tính tuỳ chỉnh zone được đặt thành giá trị chuỗi thích hợp.

Cập nhật thuộc tính xe

Mỗi khoá attributes chỉ có thể có một giá trị cho mỗi xe. Bạn khai báo các thuộc tính xe tuỳ chỉnh bằng cách sử dụng attributes trong mặt nạ trường, sau đó cung cấp các giá trị dựa trên phương thức bên dưới.

API UpdateDeliveryVehicle này không cho phép chỉ cập nhật một thuộc tính. Khi sử dụng phương thức này, mọi hoạt động sử dụng trường attributes trong mặt nạ trường sẽ dẫn đến việc toàn bộ tập hợp các thuộc tính của xe được khai báo lại cho xe. Điều này sẽ dẫn đến việc ghi đè mọi thuộc tính có sẵn không được đưa vào mặt nạ trường một cách rõ ràng. Nếu sử dụng phương thức này để khai báo một thuộc tính tuỳ chỉnh mới, bạn cũng phải khai báo lại mọi thuộc tính tuỳ chỉnh mà bạn muốn giữ lại cho xe. Nếu bạn loại trừ attributes trong mặt nạ trường, thì phương thức này sẽ để lại các thuộc tính tuỳ chỉnh hiện có như đã xác định trước đó cho xe. Nếu bạn sử dụng attributes trong mặt nạ trường nhưng không đặt giá trị, thì điều đó tương đương với việc xoá tất cả thuộc tính tuỳ chỉnh khỏi xe.

Ví dụ về cách cập nhật các trường xe

Phần này cho biết cách cập nhật các trường xe bằng UpdateDeliveryVehicleRequest, trong đó có update_mask để cho biết trường nào cần cập nhật. Hãy xem tài liệu về Vùng đệm giao thức về mặt nạ trường để biết thông tin chi tiết.

Bạn cần có đặc quyền Quản trị viên phân phối công cụ của đội xe để cập nhật các trường khác ngoài last_location.

Ví dụ: đặt thuộc tính tuỳ chỉnh

Ví dụ này chỉ định một thuộc tính mới: zone. Như đã lưu ý trong phần Cập nhật thuộc tính xe trước đó, việc cập nhật trường attributes bằng phương pháp này yêu cầu bạn phải chỉ định tất cả thuộc tính tuỳ chỉnh mà bạn muốn giữ lại. Do đó, ví dụ này cho thấy một giá trị available-at-night được ghi để bảo toàn giá trị đó khỏi bị ghi đè trong một thao tác cập nhật chỉ định trường attributes.

Xem tham chiếu providers.deliveryVehicles.patch.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";
  static final String VEHICLE_ID = "vehicle-8241890";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Vehicle settings
  String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
  DeliveryVehicle myDeliveryVehicle = DeliveryVehicle.newBuilder()
      .addAllAttributes(ImmutableList.of(
          DeliveryVehicleAttribute.newBuilder().setKey("zone").setValue("1B").build(),
          DeliveryVehicleAttribute.newBuilder().setKey("available-at-night").setValue("true").build()))
      .build();

  // DeliveryVehicle request
  UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
    UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
        .setName(vehicleName)
        .setDeliveryVehicle(myDeliveryVehicle)
        .setUpdateMask(FieldMask.newBuilder()
            .addPaths("attributes"))
        .build();

  try {
    DeliveryVehicle updatedDeliveryVehicle =
        deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case NOT_FOUND:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

REST

  # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
  # environment
  curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=attributes" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
      "attributes": [
        {"key": "zone", "value": "1B"},
        {"key": "available-at-night", "value": "true"}
      ]
  }
  EOM

Bước tiếp theo