Zaktualizuj pola pojazdu

Ten dokument zawiera informacje o ważnych polach pojazdu, które możesz aktualizować podczas tworzenia pojazdów i zarządzania nimi.

  • vehicle_state: określa dostępność pojazdu na potrzeby nowych przejazdów.
  • vehicle_type: pole wymagane podczas tworzenia pojazdu. Pole to może też służyć jako kryterium filtrowania w przypadku dopasowań pojazdów. Więcej informacji o ustawianiu tego pola znajdziesz w artykule Tworzenie pojazdu.
  • attributes[]: opcjonalna tablica typu VehicleAttribute. Użyj ich, aby zdefiniować niestandardowe kryteria, które poprawią filtrowanie podczas wyszukiwania lub wyświetlania listy pojazdów.
 

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

Pole stanu pojazdu

Twój system może ustawić stan pojazdu na OFFLINE lub ONLINE. Możesz na przykład ustawić stan pojazdu na ONLINE codziennie o 9:00, a na OFFLINE codziennie o 17:00.

Tryb OFFLINE Tryb ONLINE
Użyj OFFLINE, aby wskazać, że pojazd nie przyjmuje nowych przejazdów. Pamiętaj, że w tym stanie pojazd może nadal realizować przypisane przejazdy.
  • Vehicle utworzony w stanie ONLINE może zostać natychmiast zwrócony w odpowiedzi na zapytania SearchVehicles. Więcej informacji znajdziesz w artykule Wyszukiwanie pojazdów.
  • Pojazdy utworzone w stanie ONLINE powinny używać pola last_location w wywołaniu CreateVehicle.

Pole atrybutów pojazdu

Użyj pola attributes pojazdu, aby utworzyć niestandardowe kryteria, które umożliwią klientom lub operatorom floty znajdowanie pojazdów w Twojej flocie na podstawie szerszego zakresu kryteriów wyszukiwania. Zwiększa to możliwości Twoich aplikacji w zakresie lepszego dopasowywania pojazdów niż w przypadku korzystania z 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 znaków, wartościami logicznymi lub liczbami.

Możesz na przykład zadeklarować atrybut niestandardowy o nazwie class, aby odróżnić pojazdy do wspólnych przejazdów według klasy. Do reprezentowania poziomów klasy pojazdu użyjesz tych wartości ciągu znaków: ECONOMY, STANDARD i LUXURY.

Wartości atrybutów niestandardowych nie muszą się jednak wykluczać. Możesz użyć kryteriów takich jak pet-friendly, non-smoking i able to take longer trips. Każdy z nich może być osobnym atrybutem niestandardowym, który używa wartości logicznych. Do danego pojazdu można przypisać wszystkie 3 te atrybuty niestandardowe wraz z atrybutem niestandardowym class ustawionym na odpowiednią wartość ciągu znaków.

Używanie atrybutów w ten sposób może zapewnić Ci wiele funkcji przydatnych do znajdowania pojazdów na potrzeby przejazdów o określonych potrzebach. Instrukcje korzystania z atrybutów niestandardowych jako filtrów zapytań znajdziesz w artykule Wyszukiwanie pojazdów.

Aktualizowanie atrybutów pojazdu

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

UpdateVehicle UpdateVehicleAttributes
Ten interfejs API nie pozwala na aktualizowanie tylko jednego atrybutu. Gdy 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 każdego wcześniej istniejącego atrybutu, który nie został wyraźnie uwzględniony w masce pola. Jeśli używasz tej metody do deklarowania nowego atrybutu niestandardowego, musisz też ponownie zadeklarować każdy atrybut niestandardowy, który ma zostać zachowany w pojeździe. Jeśli wykluczysz attributes w masce pola, ta metoda pozostawi istniejące atrybuty niestandardowe w postaci wcześniej zdefiniowanej dla pojazdu. Jeśli użyjesz attributes w masce pola, ale bez ustawiania wartości, będzie to równoznaczne z usunięciem wszystkich atrybutów niestandardowych z pojazdu. Ta metoda akceptuje określoną listę atrybutów do zaktualizowania. Żądanie aktualizuje lub dodaje tylko te atrybuty, które są określone w masce pola. Wcześniej istniejące atrybuty, które nie zostały określone, pozostają niezmienione.

Przykład aktualizowania pól pojazdu

W tej sekcji pokazujemy, jak aktualizować pola pojazdu za pomocą UpdateVehicleRequest, która zawiera update_mask, aby wskazać, które pola mają zostać zaktualizowane. Więcej informacji znajdziesz w dokumentacji Protocol Buffers na temat masek pól.

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

Przykład: włączanie nowego typu przejazdu i atrybutu niestandardowego

Ten przykład włącza przejazdy back_to_back dla pojazdu i określa nowy atrybut: class. Jak wspomnieliśmy wcześniej w sekcji Aktualizowanie atrybutów pojazdu, aktualizowanie pola attributes za pomocą tej metody wymaga wskazania wszystkich atrybutów niestandardowych, które mają zostać zachowane. Dlatego w przykładzie pokazujemy wartość cash_only zapisaną w celu ochrony przed zastąpieniem podczas operacji aktualizacji, która określa pole attributes.

Aby zaktualizować tylko wartość jednej pary klucz-wartość, użyj metody UpdateVehicleAttributes i nie uwzględniaj pola attribute w masce pola żądania UpdateVehicle.

Więcej informacji znajdziesz w dokumentacji referencyjnej providers.vehicles.update dla gRPC i REST.

gRPC

static final String PROJECT_ID = "project-id";
static final String VEHICLE_ID = "vid-8241890";

VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);

String vehicleName = "providers/" + PROJECT_ID + "/vehicles/" + VEHICLE_ID;
Vehicle updatedVehicle = Vehicle.newBuilder()
    .setVehicleState(VehicleState.ONLINE)
    .addAllAttributes(ImmutableList.of(
        VehicleAttribute.newBuilder().setKey("class").setValue("ECONOMY").build(),
        VehicleAttribute.newBuilder().setKey("cash_only").setValue("false").build()))
    .setBackToBackEnabled(true)
    .build();

UpdateVehicleRequest updateVehicleRequest = UpdateVehicleRequest.newBuilder()
    .setName(vehicleName)
    .setVehicle(updatedVehicle)
    .setUpdateMask(FieldMask.newBuilder()
        .addPaths("vehicle_state")
        .addPaths("attributes")
        .addPaths("back_to_back_enabled"))
    .build();

try {
  Vehicle updatedVehicle =
      vehicleService.updateVehicle(updateVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:
      // Most implementations will call CreateVehicle in this case
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}
// If no Exception, Vehicle updated successfully.

REST

curl -X PUT \
  "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=vehicle_state,attributes,back_to_back_enabled" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  --data-binary @- << EOM
{
    "vehicleState": "ONLINE",
    "attributes": [
      {"key": "class", "value": "LUXURY"},
      {"key": "cash_only", "value": "false"}
    ],
    "backToBackEnabled": true
}
EOM

Co dalej?