|
本文档介绍了在创建和管理车辆时可以 更新的重要车辆字段。
|
如需查看完整的车辆字段列表,请参阅:
|
车辆状态字段
您的系统可以将车辆状态设置为 OFFLINE 或 ONLINE。例如,您可以将车辆状态设置为每天上午 9 点为 ONLINE,每天下午 5 点为 OFFLINE。
| 离线模式 | 在线模式 |
|---|---|
使用 OFFLINE 表示车辆不接受
新行程。请注意,车辆在此状态下仍可以完成已分配的行程。 |
|
车辆属性字段
您可以使用车辆 attributes 字段创建自定义条件,以便您的消费者或车队运营商能够根据更多搜索条件在您的车队中查找车辆。这样可以增强应用的功能,以便提供比仅使用基于其他车辆字段的搜索条件更好的车辆匹配结果。每辆车最多可以有 100 个属性,并且每个属性都必须有一个唯一键。值可以是字符串、布尔值或数字。
例如,您可以声明一个名为 class 的自定义属性,以区分不同等级的网约车。您可以使用以下字符串值来表示车辆等级:ECONOMY、STANDARD 和 LUXURY。
不过,自定义属性值不必互斥。您可以使用 pet-friendly、non-smoking和able to take longer trips等条件。这些条件中的每一个都可以是使用布尔值的单独自定义属性。您可以为给定的车辆分配所有这三个自定义属性,并将 class 自定义属性设置为相应的字符串值。
以这种方式使用属性可以为您提供各种有用的功能,以便查找满足特定需求的行程的车辆。如需了解如何 将自定义属性用作查询过滤条件,请参阅搜索车辆。
更新车辆属性
您可以使用 UpdateVehicle 或
UpdateVehicleAttributes 更新车辆属性。每个 attributes 键每辆车 只能有一个值。您可以使用字段掩码中的 attributes 声明自定义车辆属性,然后根据以下方法提供值。
UpdateVehicle |
UpdateVehicleAttributes |
|
|---|---|---|
此 API 不允许仅更新单个属性。使用此方法时,在字段掩码中使用 attributes 字段会导致为车辆重新声明 整套 车辆属性。这会导致覆盖字段掩码中未明确包含的任何预先存在的属性。如果您使用此方法声明新的自定义属性,
您还必须重新声明您希望车辆保留的每个自定义属性。如果您在字段掩码中排除 attributes,则此方法会将现有自定义属性保留为之前为车辆定义的属性。如果您在字段掩码中使用 attributes,但未设置值,则相当于从车辆中移除所有自定义属性。 |
此方法接受要更新的属性的特定列表 。请求仅更新或添加字段掩码中指定的属性。未指定的预先存在的属性保持不变。 |
更新车辆字段示例
本部分展示了如何使用 UpdateVehicleRequest 更新车辆字段,其中包括一个 update_mask 来指示要更新的字段。如需了解详情,请参阅有关字段掩码的
Protocol Buffers 文档。
对 last_location 以外的字段进行更新需要 Fleet Engine On-demand Admin 权限。
示例:启用新行程类型和自定义属性
此示例为车辆启用了 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