更新车辆字段

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

  • vehicle_state:确定车辆的可用性 以搜索新的行程。
  • vehicle_type:创建车辆时的必填字段。 该字段还可用作车辆匹配的过滤条件。 请参阅 创建车辆
  • attributes[]:类型的可选数组 VehicleAttribute。使用 以便指定自定义条件 搜索或列出车辆信息时的过滤行为。
 

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

车辆状态字段

您的系统可以将车辆状态设置为 OFFLINEONLINE。例如,您 可能在每天上午 9 点和 OFFLINE 将车辆状态设为“ONLINE” 下午 5 点。

离线模式 在线模式
使用 OFFLINE 表示车辆不接受 新的行程。请注意,车辆仍可完成分配的行程, 状态
  • ONLINE 状态下创建的 Vehicle 可能会立即返回 对 SearchVehicles 查询的响应。 请参阅搜索车辆 了解详情 。
  • ONLINE 状态下创建的车辆应使用 last_location CreateVehicle 调用中的字段。

车辆属性字段

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

例如,您可以声明一个名为 class 的自定义属性, 针对不同等级的拼车车辆提供不同的信息。您应该使用 以下字符串值表示车辆类别:ECONOMYSTANDARDLUXURY

但是,自定义属性值不必互斥。您可能会 使用允许带宠物无烟以及可以接受更长时间的条件 行程。这些属性都可以是采用布尔值的单独自定义属性 值。可以为给定车辆分配这三个自定义属性 并将 class 自定义属性设置为相应的字符串值。

以这种方式使用属性可为您提供多种实用功能, 为有特定需求的行程寻找车辆。如需关于如何 将自定义属性用作查询过滤条件,请参阅搜索车辆

更新车辆属性

您可以使用 UpdateVehicleUpdateVehicleAttributes。对于每个 attributes 键,只能有一个值 车辆。您可以使用 attributes 声明自定义车辆属性 ,然后根据以下方法提供值。

UpdateVehicle UpdateVehicleAttributes
此 API 不允许仅更新单个属性。使用 此方法,任何使用 attributes 字段会得到以下整个数据集: 为车辆重新声明车辆属性。这会导致 可覆盖未明确包含在 字段掩码。如果您使用此方法声明新的自定义属性, 您还必须重新声明您希望车辆声明的每个自定义属性 保留。如果您在字段掩码中排除 attributes, 此方法会按之前定义的方式保留现有的自定义属性 。如果您在字段掩码中使用 attributes, 但不设置任何值 属性。 此方法接受特定的属性列表, 更新。该请求只会更新或添加指定的属性 。原有未指定的属性仍会保留 更改。

更新车辆字段示例

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

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

示例:启用新的行程类型和自定义属性

此示例为车辆启用了 back_to_back 行程,并指定了 新属性:class。如前面的更新车辆属性中所述, 如果使用此方法更新 attributes 字段,则需要 您想保留的自定义属性。因此,该示例显示了一个 cash_only 写入,以防止其在更新操作期间被覆盖 (用于指定 attributes 字段)。

要仅更新一个键值对属性对的值,请使用 UpdateVehicleAttributes 方法,且不包含 attribute 字段 UpdateVehicle 请求的字段掩码中的值。

请参阅 gRPCRESTproviders.vehicles.update 参考文档。

gRPC

static final String PROJECT_ID = "project-id";
static final String VEHICLE_ID = "vid-8241890";

VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);

String vehicleName = "providers/" + PROJECT_ID + "/vehicles/" + VEHICLE_ID;
Vehicle updatedVehicle = Vehicle.newBuilder()
    .setVehicleState(VehicleState.ONLINE)
    .addAllAttributes(ImmutableList.of(
        VehicleAttribute.newBuilder().setKey("class").setValue("ECONOMY").build(),
        VehicleAttribute.newBuilder().setKey("cash_only").setValue("false").build()))
    .setBackToBackEnabled(true)
    .build();

UpdateVehicleRequest updateVehicleRequest = UpdateVehicleRequest.newBuilder()
    .setName(vehicleName)
    .setVehicle(updatedVehicle)
    .setUpdateMask(FieldMask.newBuilder()
        .addPaths("vehicle_state")
        .addPaths("attributes")
        .addPaths("back_to_back_enabled"))
    .build();

try {
  Vehicle updatedVehicle =
      vehicleService.updateVehicle(updateVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:
      // Most implementations will call CreateVehicle in this case
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}
// If no Exception, Vehicle updated successfully.

REST

curl -X PUT \
  "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=vehicle_state,attributes,back_to_back_enabled" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  --data-binary @- << EOM
{
    "vehicleState": "ONLINE",
    "attributes": [
      {"key": "class", "value": "LUXURY"},
      {"key": "cash_only", "value": "false"}
    ],
    "backToBackEnabled": true
}
EOM

后续步骤