更新送货车辆字段

本文档介绍了一些重要的车辆字段, 在创建和管理车辆时更新。

  • type:此送货车辆的类型。这会影响 为此车辆生成的路线。
  • attributes[]:类型为 DeliveryVehicleAttribute 的选项数组。您可以使用这些属性为服务中的车辆定义自定义条件,以便在搜索或列出车辆时增强过滤行为。
 

如需查看车辆字段的完整列表,请参阅:

“车辆属性”字段

使用车辆的 attributes 字段创建自定义条件,以启用 消费者或车队运营商在更广泛的范围内查找车辆 各种搜索条件。这有助于增强应用的功能 与使用搜索条件相比,可以提供更好的车辆匹配度 进行衡量。每辆车最多可以有 100 个属性,每个属性都必须具有唯一的键。值可以是字符串 例如布尔值或数字

例如,您可以声明一个名为 zone 的自定义属性,以区分配送车辆在城市中的哪个区域运营。您会 使用如下字符串值来表示不同的可用区:1B2C3A。然后,您可以在车队跟踪中使用过滤条件,仅向负责相应区域的运营商显示在该区域工作的车辆。

但是,自定义属性值不必互斥。您可以使用available-at-nighthas-refrigeration 等条件。以上每一个 可能是使用布尔值的单独自定义属性。指定车辆 可以同时分配这三个自定义属性以及 zone 设置为适当的字符串值。

更新车辆属性

每辆车的每个 attributes 键只能有一个值。您声明 在字段掩码中使用 attributes 的自定义车辆属性,然后 根据以下方法提供值。

UpdateDeliveryVehicle API 不允许仅更新单个属性。使用此方法时,如果在字段掩码中使用 attributes 字段,系统会为车辆重新声明整个集的车辆属性。这会覆盖字段掩码中未明确包含的任何现有属性。如果您使用此方法声明新的 自定义属性,因此您还必须重新声明您想要添加的每个自定义属性, 保留这辆车。如果您在字段掩码中排除 attributes,则 方法保留之前为车辆定义的现有自定义属性。 如果您在字段掩码中使用 attributes,但未设置值,则相当于从车辆中移除所有自定义属性。

更新车辆字段示例

本部分介绍如何使用 UpdateDeliveryVehicleRequest,其中包含一个 update_mask,用于指示 要更新的字段如需了解详情,请参阅 Protocol Buffers 文档中的字段掩码部分。

last_location 以外的字段进行的更新需要 Fleet Engine Delivery 管理员权限。

示例:设置自定义属性

以下示例指定了一个新属性:zone。如前面更新车辆属性中所述,若要使用此方法更新 attributes 字段,您需要指明要保留的所有自定义属性。因此,该示例显示了为保留该值而写入的 available-at-night 值 更新操作期间, attributes 字段。

请参阅 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

后续步骤