Обновление полей транспортного средства доставки

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

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

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

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

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

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

Однако значения настраиваемых атрибутов не обязательно должны быть взаимоисключающими. Например, вы можете использовать такие критерии, как available-at-night и has-refrigeration. Каждый из этих вариантов можно представить в виде отдельного настраиваемого атрибута, использующего логические значения. Для одного автомобиля можно задать все три настраиваемых атрибута, а также настраиваемый атрибут zone с подходящим строковым значением.

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

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

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

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

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

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

Пример: настройка настраиваемого атрибута

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

Дальнейшие действия