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

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

  • type : Тип данного транспортного средства для доставки. Это влияет на маршруты, создаваемые для этого транспортного средства.
  • attributes[] : Массив параметров типа DeliveryVehicleAttribute . Используйте их для определения пользовательских критериев для транспортных средств в вашем сервисе, чтобы улучшить поведение фильтрации при поиске или отображении транспортных средств.

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

Поле «Атрибуты транспортного средства»

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

Например, вы можете объявить пользовательский атрибут с именем zone , чтобы различать, в какой зоне города работают ваши транспортные средства доставки. Для обозначения разных зон можно использовать строковые значения, например, такие: 1B , 2C и 3A . Затем вы можете использовать фильтр в системе отслеживания автопарка, чтобы показывать оператору, ответственному за эту зону, только транспортные средства, работающие в определенной зоне.

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

Обновить характеристики транспортного средства

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

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

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

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

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

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

В этом примере задается новый атрибут: 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;
  }

ОТДЫХ

  # 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

Что дальше?