Zaktualizuj pola pojazdu

Ten dokument zawiera ważne pola 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 może też służyć jako kryterium filtrowania dopasowań pojazdów. Szczegółowe informacje o ustawianiu tego pola znajdziesz w artykule Tworzenie pojazdu.
  • attributes[]: opcjonalna tablica typu VehicleAttribute. Użyj ich do zdefiniowania kryteriów niestandardowych, aby ulepszyć filtrowanie podczas wyszukiwania lub wyświetlania pojazdów.
 

Pełną listę pól dotyczących pojazdów znajdziesz tutaj:

Pole stanu pojazdu

System może ustawić stan pojazdu na OFFLINE lub ONLINE. Możesz na przykład ustawić stan pojazdu na ONLINE codziennie o 9:00 i 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 sekcji 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 pozwolą klientom lub operatorom floty znajdować pojazdy we flocie według 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 class, aby rozróżniać pojazdy do wspólnych przejazdów według klasy. Do reprezentowania poziomów klasy pojazdu użyjesz tych wartości ciągu tekstowego: ECONOMY, STANDARD i LUXURY.

Wartości atrybutów niestandardowych nie muszą się jednak wzajemnie wykluczać. Możesz użyć kryteriów takich jak przyjazny dla zwierząt, dla niepalących i możliwość odbywania dłuższych podróży. Każdy z nich 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 class ustawionym na odpowiednią wartość ciągu znaków.

Używanie atrybutów w ten sposób może zapewnić szeroki zakres funkcji przydatnych do znajdowania pojazdów na przejazdy 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 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.

UpdateVehicle UpdateVehicleAttributes
Ten interfejs API 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 dla pojazdu. Jeśli wykluczysz attributes w masce pola, ta metoda pozostawi istniejące atrybuty niestandardowe zgodnie z wcześniejszymi definicjami dla 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. 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śniejsze atrybuty, które nie zostały określone, pozostaną niezmienione.

Przykład aktualizacji pól pojazdu

W tej sekcji dowiesz się, jak aktualizować pola pojazdu za pomocą metody UpdateVehicleRequest, 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 na żądanie.

Przykład: włączanie nowego typu podróży i atrybutu niestandardowego

Ten przykład umożliwia przejazdy back_to_back dla pojazdu, a także określa nowy atrybut: class. 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ść cash_only, która została zapisana, aby zapobiec jej zastąpieniu 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 providers.vehicles.update dotyczącej 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?