Aktualizowanie pól pojazdu dostawczego

W tym dokumencie opisujemy 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 generowane dla tego pojazdu.
  • attributes[]: tablica opcji typu DeliveryVehicleAttribute. Używaj ich do definiowania kryteriów niestandardowych dla pojazdów w usłudze, aby ulepszyć filtrowanie podczas wyszukiwania lub wyświetlania pojazdów.
 

Pełną listę pól dotyczących pojazdów znajdziesz w tych artykułach:

Pole atrybutów pojazdu

Użyj pola pojazdu attributes, aby utworzyć niestandardowe kryteria, które pozwolą klientom lub operatorom floty znajdować pojazdy we flocie na podstawie szerszego zakresu kryteriów wyszukiwania. Zwiększa to możliwości aplikacji w zakresie dopasowywania pojazdów w porównaniu z kryteriami wyszukiwania opartymi wyłącznie na innych polach pojazdów. 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 znaków, wartościami logicznymi lub liczbami.

Możesz na przykład zadeklarować atrybut niestandardowy o nazwie zone, aby rozróżniać, w której strefie miasta działają Twoje pojazdy dostawcze. Do reprezentowania różnych stref użyjesz wartości ciągu tekstowego, takich jak 1B, 2C i 3A. Następnie możesz użyć filtra w śledzeniu floty, aby wyświetlać pojazdy pracujące w określonej strefie tylko operatorowi odpowiedzialnemu za tę strefę.

Wartości atrybutów niestandardowych nie muszą się jednak wzajemnie wykluczać. Możesz użyć kryteriów takich jak dostępne-w-nocy i ma-lodówkę. Każda z tych cech może być osobnym atrybutem niestandardowym, który używa wartości logicznych. Danemu pojazdowi można przypisać wszystkie 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. Niestandardowe atrybuty pojazdu deklarujesz za pomocą attributes w masce pola, a następnie podajesz wartości na podstawie metody opisanej poniżej.

Ten interfejs API UpdateDeliveryVehicle nie zezwala na aktualizowanie tylko jednego atrybutu. Jeśli używasz 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 istniejących wcześniej 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 ma zostać zachowany w przypadku pojazdu. Jeśli wykluczysz attributes w masce pola, ta metoda pozostawi istniejące atrybuty niestandardowe zgodnie z wcześniejszymi ustawieniami pojazdu. Jeśli użyjesz attributes w masce pola, 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ą metody UpdateDeliveryVehicleRequest, która zawiera parametr update_mask wskazujący, które pola należy zaktualizować. Szczegółowe informacje znajdziesz w dokumentacji buforów protokołu dotyczącej masek pól.

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

Przykład: ustawianie atrybutu niestandardowego

W tym przykładzie określono nowy atrybut: zone. Jak wspomniano wcześniej w sekcji Aktualizowanie atrybutów pojazdu, aktualizowanie pola attributes za pomocą tej metody wymaga wskazania wszystkich atrybutów niestandardowych, które chcesz zachować. Dlatego w przykładzie pokazano wartość available-at-night, która została zapisana, aby zapobiec jej zastąpieniu podczas operacji aktualizacji, która określa pole attributes.

Zapoznaj się z dokumentacją metody 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?