Zaktualizuj pola pojazdu

W tym dokumencie omawiamy ważne kwestie związane z pojazdami, które można aktualizować podczas tworzenia pojazdów i zarządzania nimi.

  • vehicle_state: określa dostępność pojazdu w przypadku nowych podróży.
  • vehicle_type: pole wymagane podczas tworzenia pojazdu. To pole może służyć też jako kryterium filtrowania dopasowań do pojazdów. Zobacz Tworzenie pojazdu .
  • attributes[]: opcjonalna tablica typu VehicleAttribute Używaj pozwalają zdefiniować niestandardowe kryteria, które mają ulepszyć podczas wyszukiwania pojazdów i wyświetlania ich listy.
 

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

Pole stanu pojazdu

System może ustawić stan pojazdu na OFFLINE lub ONLINE. Na przykład: może ustawiać stan pojazdu na ONLINE codziennie o 9:00 i OFFLINE codziennie o 17:00.

Tryb OFFLINE tryb ONLINE
Użyj atrybutu OFFLINE, aby wskazać, że pojazd nie akceptuje warunków nowe podróże. Pamiętaj, że pojazd może nadal wykonywać przypisane zadania w czasie, w tym stanie.
  • Element Vehicle utworzony w stanie ONLINE może zostać natychmiast zwrócony w odpowiedź na SearchVehicles zapytania. Zobacz Wyszukiwanie pojazdów aby dowiedzieć się więcej .
  • Pojazdy utworzone w stanie ONLINE powinny używać atrybutu last_location w wywołaniu CreateVehicle.

Pole atrybutów pojazdu

W polu attributes pojazdu możesz utworzyć niestandardowe kryteria, które umożliwią konsumentów lub operatorów flotowych, aby znajdować pojazdy we flocie w większej liczbie lokalizacji zróżnicowanych kryteriów wyszukiwania. Zwiększy to możliwości aplikacji, lepsze dopasowanie pojazdów w porównaniu do wartości z kryteriów wyszukiwania wyłącznie na podstawie innych danych dotyczących pojazdów. Każdy pojazd może mieć maksymalnie 100 a każdy z nich musi mieć unikalny klucz. Wartościami mogą być ciągi znaków, wartości logiczne czy liczby.

Możesz na przykład zadeklarować atrybut niestandardowy o nazwie class dla zróżnicuj samochody do wspólnych przejazdów na różnych poziomach klasowych. Użyjesz te wartości ciągów reprezentujące poziomy klasy pojazdu: ECONOMY, STANDARD i LUXURY.

Wartości atrybutów niestandardowych nie muszą się jednak wzajemnie wykluczać. Możesz wykorzystanie kryteriów takich jak przyjazne zwierzętom, zakaz palenia i możliwość przebywania dłużej podróży. Każdy z tych atrybutów może być oddzielnym atrybutem niestandardowym z wartością logiczną . Do danego pojazdu można przypisać wszystkie 3 atrybuty niestandardowe z atrybutem niestandardowym class ustawionym na odpowiednią wartość ciągu znaków.

Użycie atrybutów w ten sposób zapewni Ci dostęp do różnorodnych funkcji przydatnych w na wyszukiwanie pojazdów o określonych potrzebach. Instrukcje, jak to zrobić dotyczące używania atrybutów niestandardowych jako filtrów zapytań znajdziesz w artykule Wyszukiwanie pojazdów.

Zaktualizuj atrybuty pojazdu

Atrybuty pojazdu możesz aktualizować za pomocą UpdateVehicle lub UpdateVehicleAttributes Każdy klucz attributes może mieć tylko jedną wartość na pojazdem. Niestandardowe atrybuty pojazdu deklarujesz za pomocą atrybutu attributes i podać wartości zgodnie z poniższą metodą.

UpdateVehicle UpdateVehicleAttributes
Ten interfejs API nie zezwala na aktualizowanie tylko jednego atrybutu. W przypadku użycia funkcji tę metodę, dowolne użycie atrybutu attributes zwraca cały zbiór ponowne zadeklarowanie atrybutów pojazdu. Dzięki temu powstaje nadpisania jakiegokolwiek istniejącego atrybutu, który nie został wyraźnie uwzględniony w atrybucie maską pola. Jeśli używasz tej metody do zadeklarowania nowego atrybutu niestandardowego, musisz też ponownie zadeklarować każdy atrybut niestandardowy, który ma być używany pojazd i przechowywać. Jeśli wykluczysz attributes w masce pola, jeśli ta metoda pozostawia istniejące atrybuty niestandardowe tak, jak zostały one wcześniej zdefiniowane dla pojazdu. Jeśli użyjesz w masce pola attributes, ale bez ustawień wartości, będzie to równoważne z usunięciem wszystkich z pojazdu. Ta metoda akceptuje konkretną listę atrybutów do . Żądanie aktualizuje lub dodaje tylko określone atrybuty w masce pola. Istniejące atrybuty, które nie są określone, pozostaną bez zmian bez zmian.

Przykład aktualizacji pól pojazdu

W tej sekcji dowiesz się, jak zaktualizować pola pojazdu za pomocą UpdateVehicleRequest, zawierający update_mask wskazujący pola, które mają zostać zaktualizowane. Zobacz Szczegółowe informacje znajdziesz w dokumentacji buforów protokołów na temat masek pól.

Aktualizacje pól innych niż last_location wymagają usługi Fleet Engine na żądanie Uprawnienia administratora.

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

Ten przykład umożliwia przejechanie back_to_back samochodem i określa nowy atrybut: class. Jak wspominaliśmy wcześniej w sekcji Aktualizowanie atrybutów pojazdu: aktualizacja pola attributes przy użyciu tej metody wymaga wskazania wszystkich atrybutów niestandardowych, które chcesz zachować. W tym przykładzie widać więc: cash_only. wartość zapisana w celu zabezpieczenia jej przed zastąpieniem podczas aktualizacji. określające pole attributes.

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

Zapoznaj się z dokumentacją providers.vehicles.update dotyczącą 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?