Aktualizowanie pól pojazdu dostawczego

Ten dokument zawiera ważne pola pojazdów, które możesz aktualizować podczas tworzenia pojazdów i zarządzania nimi.

  • type: typ pojazdu dostawczego. Ma to wpływ na trasy wygenerowane dla tego pojazdu.
  • attributes[]: tablica opcji typu DeliveryVehicleAttribute. Użyj ich, aby zdefiniować niestandardowe kryteria pojazdów w swojej usłudze i poprawić sposób filtrowania podczas wyszukiwania lub wyświetlania pojazdów.
 

Pełną listę pól pojazdu znajdziesz w:

Pole Atrybuty pojazdu

Użyj pola „Pojazd” attributes, aby utworzyć kryteria niestandardowe, które umożliwią klientom lub operatorom floty znajdowanie pojazdów w Twojej flocie na podstawie większej liczby kryteriów wyszukiwania. Dzięki temu aplikacje mogą lepiej dopasowywać pojazdy niż przy użyciu kryteriów wyszukiwania opartych wyłącznie na innych polach pojazdu. Każdy pojazd może mieć maksymalnie 100 atrybutów, a każdy z nich musi mieć unikalny klucz. Wartości mogą być ciągami tekstowymi, wartościami logicznymi lub liczbami.

Możesz na przykład zadeklarować atrybut niestandardowy o nazwie strefa, aby odróżnić strefy miasta, w których poruszają się Twoje pojazdy dostawcze. Do reprezentowania różnych stref używasz wartości ciągu znaków, takich jak 1B, 2C i 3A. Następnie możesz użyć filtra w obserwacji floty, aby operator odpowiedzialny za daną strefę widział tylko pojazdy pracujące w konkretnej strefie.

Wartości atrybutów niestandardowych nie muszą się wykluczać. Możesz użyć kryteriów takich jak available-at-night (dostępny w nocy) i has-refrigeration (posiada lodówkę). Każdy z nich może być osobnym atrybutem niestandardowym, który używa wartości logicznych. Danemu pojazdowi można przypisać wszystkie te 3 atrybuty niestandardowe wraz z atrybutem niestandardowym strefa ustawionym na odpowiednią wartość ciągu znaków.

Aktualizowanie atrybutów pojazdu

Każdy klucz attributes może mieć tylko jedną wartość na pojazd. Atrybuty niestandardowe pojazdu deklarujesz za pomocą elementu attributes w masce pola, a następnie podajesz wartości zgodnie z opisaną niżej metodą.

Ten interfejs API UpdateDeliveryVehicle nie umożliwia aktualizowania tylko jednego atrybutu. W przypadku korzystania z tej metody każde użycie pola attributes w masce pola powoduje ponowne zadeklarowanie całego zestawu atrybutów pojazdu. Spowoduje to zastąpienie wszystkich wcześniejszych atrybutów, które nie zostały wyraźnie uwzględnione w masce pola. Jeśli użyjesz tej metody do zadeklarowania nowego atrybutu niestandardowego, musisz też ponownie zadeklarować każdy atrybut niestandardowy, który chcesz zachować w pojeździe. Jeśli wykluczysz attributes w masce pola, ta metoda pozostawi dotychczasowe atrybuty niestandardowe w postaci zdefiniowanej wcześniej dla pojazdu. Jeśli w masce pola użyjesz wartości attributes, ale nie ustawisz wartości, będzie to równoznaczne z usunięciem wszystkich atrybutów niestandardowych z pojazdu.

Przykład aktualizacji pól pojazdu

W tej sekcji dowiesz się, jak aktualizować pola pojazdu za pomocą UpdateDeliveryVehicleRequest, które zawiera update_mask wskazujący, które pola należy zaktualizować. Więcej informacji znajdziesz w dokumentacji Protocol Buffers na temat masek pól.

Aktualizacje pól innych niż last_location wymagają uprawnień Fleet Engine Delivery Administrator.

Przykład: ustawienie atrybutu niestandardowego

W tym przykładzie określamy nowy atrybut: zone. Jak już wspomnieliśmy w artykule Aktualizowanie atrybutów pojazdu, aby zaktualizować pole attributes, musisz wskazać wszystkie atrybuty niestandardowe, które chcesz zachować. Dlatego przykład pokazuje zapisaną wartość available-at-night, aby nie została ona zastąpiona podczas operacji aktualizacji, która określa pole attributes.

Zobacz odwołanie 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

Co dalej?