|
本文档介绍了在创建和管理车辆时可以 更新的重要车辆字段。
|
如需查看车辆字段的完整列表,请参阅: |
车辆属性字段
使用车辆 attributes 字段创建自定义条件,以便您的消费者或车队运营商能够根据更多搜索条件在车队中查找车辆。这可以增强应用的功能,以便提供比仅使用基于其他车辆字段的搜索条件更好的车辆匹配结果。每辆车最多可以有 100 个属性,并且每个属性都必须有一个唯一键。值可以是字符串、布尔值或数字。
例如,您可以声明一个名为“zone”的自定义属性,以区分送货车辆在城市中的哪个区域运营。 您可以使用字符串值(例如 1B、2C 和 3A)来表示不同的区域。然后,您可以在 Fleet Tracking 中使用过滤条件,仅向负责特定区域的运营商显示在该区域工作的车辆。
不过,自定义属性值不必互斥。您可以使用“available-at-night”和“has-refrigeration”等条件。这些条件中的每一个都可以是使用布尔值的单独自定义属性。给定车辆可以分配所有这三个自定义属性,以及设置为相应字符串值的“zone”自定义属性。
更新车辆属性
每个 attributes 键每辆车 只能有一个值。您可以使用字段掩码中的 attributes 声明自定义车辆属性,然后根据以下方法提供值。
此 UpdateDeliveryVehicle API 不允许仅更新单个属性。使用此方法时,在字段掩码中使用 attributes 字段会导致为车辆重新声明整套 车辆属性。这会导致覆盖字段掩码中未明确包含的任何预先存在的属性。如果您使用此方法声明新的自定义属性,还必须重新声明您希望车辆保留的每个自定义属性。如果您在字段掩码中排除 attributes,则此方法会将现有自定义属性保留为之前为车辆定义的属性。如果您在字段掩码中使用 attributes,但未设置值,则相当于从车辆中移除所有自定义属性。
更新车辆字段示例
本部分介绍了如何使用 UpdateDeliveryVehicleRequest 更新车辆字段,其中包括一个 update_mask 来指示要更新的字段。如需了解详情,请参阅有关
字段掩码的协议缓冲区文档。
对 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