更新送货车辆字段

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

  • 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

后续步骤