更新送货车辆字段

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

  • 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

后续步骤