更新送货车辆字段

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

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

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

车辆属性字段

使用车辆的 attributes 字段创建自定义条件,以启用 消费者或车队运营者在更广泛的范围内查找车队中的车辆 各种搜索条件。与仅使用其他车辆字段的搜索条件相比,这可以增强应用提供更准确车辆匹配的能力。每辆车最多只能有 100 辆 属性,并且每个属性都必须具有唯一的键。值可以是字符串 例如布尔值或数字

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

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

更新车辆属性

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

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

更新车辆字段示例

本部分介绍如何使用 UpdateDeliveryVehicleRequest,其中包含一个 update_mask,用于指示 要更新的字段请参阅关于 字段掩码

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

后续步骤