Aktualizowanie pól pojazdu dostawczego

Ten dokument zawiera ważne pola pojazdu, 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 do zdefiniowania niestandardowych kryteriów pojazdów w usłudze, aby ulepszyć działanie 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ć niestandardowe kryteria, 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 działają Twoje pojazdy dostawcze. Aby reprezentować różne strefy, użyj wartości ciągu znaków, takich jak 1B, 2C i 3A. Następnie możesz użyć filtra w obsłudze śledzenia floty, aby wyświetlać operatorowi odpowiedzialnemu za daną strefę 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ępne 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 oraz atrybut niestandardowy strefa ustawiony na odpowiednią wartość ciągu znaków.

Aktualizowanie atrybutów pojazdu

Każdy klucz attributes może mieć tylko 1 wartość na pojazd. Atrybuty niestandardowe pojazdu deklarujesz za pomocą atrybutu attributes w masce pola, a następnie podajesz wartości zgodnie z poniższą metodą.

Interfejs API UpdateDeliveryVehicle nie pozwala na aktualizowanie 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ć. Jeśli wykluczysz pole 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 niestandardowych atrybutów z pojazdu.

Przykład aktualizowania pól pojazdu

W tej sekcji dowiesz się, jak aktualizować pola pojazdu za pomocą interfejsu UpdateDeliveryVehicleRequest, który zawiera pole update_mask wskazujące, 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 sekcji Aktualizowanie atrybutów pojazdu, aby zaktualizować pole attributes, musisz wskazać wszystkie atrybuty niestandardowe, które chcesz zachować. Dlatego przykład pokazuje wartość available-at-night zapisaną w celu ochrony przed nadpisaniem 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?