本文档介绍了一些重要的车辆字段, 在创建和管理车辆时更新。
|
如需查看车辆字段的完整列表,请参阅:
|
车辆状态字段
您的系统可以将车辆状态设置为 OFFLINE
或 ONLINE
。例如,您
可能在每天上午 9 点和 OFFLINE
将车辆状态设为“ONLINE
”
下午 5 点。
离线模式 | 在线模式 |
---|---|
使用 OFFLINE 表示车辆不接受
新的行程。请注意,车辆仍可完成分配的行程,
状态 |
|
车辆属性字段
使用车辆的 attributes
字段创建自定义条件,以启用
消费者或车队运营者在更广泛的范围内查找车队中的车辆
各种搜索条件。与仅使用其他车辆字段的搜索条件相比,这可以增强应用提供更准确车辆匹配的能力。每辆车最多只能有 100 辆
属性,并且每个属性都必须具有唯一的键。值可以是字符串
例如布尔值或数字
例如,您可以声明一个名为 class 的自定义属性,以便区分不同类别的共享车辆。您应该使用
以下字符串值表示车辆类别:ECONOMY
、
STANDARD
和LUXURY
。
不过,自定义属性值不必互斥。您可能会 使用允许带宠物、无烟以及可以接受更长时间的条件 行程。这些属性都可以是采用布尔值的单独自定义属性 值。给定车辆可以分配这三个自定义属性,以及设置为适当字符串值的类自定义属性。
以这种方式使用属性可为您提供多种实用功能, 为有特定需求的行程寻找车辆。如需关于如何 将自定义属性用作查询过滤条件,请参阅搜索车辆。
更新车辆属性
您可以使用 UpdateVehicle
或
UpdateVehicleAttributes
。对于每个 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
请求的字段掩码中。
请参阅 providers.vehicles.update
参考文档,了解 gRPC 和 REST。
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