更新送货车辆字段

本文档介绍了您在创建和管理车辆时可以更新的重要车辆字段。

  • 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 Admin 权限。

示例:设置自定义属性

以下示例指定了一个新属性: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

后续步骤