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

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

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

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

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

Ваша система может устанавливать состояние автомобиля в положение OFFLINE или ONLINE . Например, вы можете устанавливать состояние автомобиля в ONLINE каждый день в 9:00 и 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 , указывающий, какие поля следует обновить. Более подробную информацию о масках полей см. в документации Protocol Buffers.

Для обновления полей, отличных от 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

Что дальше?