Обновить поля транспортного средства

В этом документе описаны важные поля транспортных средств, которые вы можете обновить при создании транспортных средств и управлении ими.

  • vehicle_state : определяет доступность автомобиля для новых поездок.
  • vehicle_type : обязательное поле при создании автомобиля. Поле также может служить критерием фильтра для совпадений транспортных средств. Подробную информацию о настройке этого поля см. в разделе Создание автомобиля .
  • attributes[] : необязательный массив типа VehicleAttribute . Используйте их, чтобы определить пользовательские критерии для улучшения фильтрации при поиске или выставлении списка транспортных средств.

Полный список полей для транспортных средств см. в разделе:

Поле состояния автомобиля

Ваша система может установить состояние автомобиля в OFFLINE или ONLINE . Например, вы можете установить состояние автомобиля ONLINE каждый день в 9 утра и OFFLINE каждый день в 17:00.

ОФЛАЙН-режим ОНЛАЙН-режим
Используйте OFFLINE чтобы указать, что транспортное средство не принимает новые поездки. Обратите внимание, что в этом состоянии автомобиль все еще может выполнять назначенные поездки.
  • Vehicle созданное в состоянии ONLINE , может быть немедленно возвращено в ответ на запросы SearchVehicles . Дополнительную информацию см. в разделе Поиск автомобилей .
  • Транспортные средства, созданные в состоянии ONLINE , должны использовать поле last_location в вызове CreateVehicle .

Поле атрибутов автомобиля

Используйте поле attributes транспортного средства, чтобы создать индивидуальные критерии, которые позволят вашим потребителям или операторам автопарка находить транспортные средства в вашем автопарке по более широкому спектру критериев поиска. Это расширяет возможности ваших приложений по обеспечению более точного соответствия транспортных средств по сравнению с использованием критериев поиска, основанных исключительно на других полях транспортных средств. Каждое транспортное средство может иметь не более 100 атрибутов, и каждый из них должен иметь уникальный ключ. Значения могут быть строками, логическими значениями или числами.

Например, вы можете объявить настраиваемый атрибут с именем class , чтобы различать ваши автомобили для совместного использования по уровням классов. Для представления уровней класса транспортного средства можно использовать следующие строковые значения: ECONOMY , STANDARD и LUXURY .

Однако значения пользовательских атрибутов не обязательно должны быть взаимоисключающими. Вы можете использовать такие критерии, как размещение с домашними животными , курение для некурящих и возможность совершать длительные поездки . Каждый из них может быть отдельным настраиваемым атрибутом, использующим логические значения. Данному транспортному средству могут быть назначены все три этих пользовательских атрибута вместе с пользовательским атрибутом класса , которому присвоено соответствующее строковое значение.

Использование атрибутов таким образом может предоставить вам широкий спектр функций, полезных для поиска транспортных средств для поездок с особыми потребностями. Инструкции по использованию настраиваемых атрибутов в качестве фильтров запросов см. в разделе Поиск автомобилей .

Обновить атрибуты автомобиля

Вы можете обновить атрибуты транспортного средства, используя UpdateVehicle или UpdateVehicleAttributes . Каждый ключ attributes может иметь только одно значение для каждого транспортного средства . Вы объявляете пользовательские атрибуты транспортного средства, используя attributes в маске поля, а затем предоставляете значения на основе метода, описанного ниже.

UpdateVehicle UpdateVehicleAttributes
Этот API не позволяет обновлять только один атрибут. При использовании этого метода любое использование поля attributes в маске поля приводит к переобъявлению всего набора атрибутов транспортного средства для транспортного средства. Это приводит к перезаписи любого ранее существовавшего атрибута, не включенного явно в маску поля. Если вы используете этот метод для объявления нового настраиваемого атрибута, вам также необходимо повторно объявить каждый настраиваемый атрибут, который вы хотите сохранить в автомобиле. Если вы исключите attributes из маски поля, этот метод оставит существующие пользовательские атрибуты такими, как они были определены ранее для автомобиля. Если вы используете attributes в маске поля, но не задавая значения, это эквивалентно удалению всех пользовательских атрибутов с автомобиля. Этот метод принимает определенный список атрибутов для обновления. Запрос обновляет или добавляет только те атрибуты, которые указаны в маске поля. Ранее существовавшие атрибуты, которые не указаны, остаются неизменными.

Пример обновления полей транспортного средства

В этом разделе показано, как обновить поля транспортного средства с помощью UpdateVehicleRequest , который включает в себя update_mask указывающий, какие поля нужно обновить. Подробности см. в документации по протокольным буферам о масках полей .

Для обновления полей, отличных от last_location требуются права администратора Fleet Engine по требованию .

Пример: включить новый тип поездки и настраиваемый атрибут

В этом примере разрешаются поездки 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.

ОТДЫХ

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

Что дальше