このドキュメントでは、ルートを更新して状態を管理する方法について説明します。 フィールド マスクを使用してルートに関連するフィールドを設定することが含まれます。前提としている内容 このサイトの説明に沿って Fleet Engine を設定しており、 割り当てられていることを示します。
ルート更新情報の基本
次の状況で Fleet Engine を使用してルートが更新されます。
- 車両をルート作成後に割り当てるとき。
- ルートのステータスが変更されたときたとえば 車両が通過するときに 移動します
- 乗客数やルート番号などのルートフィールドを更新すると、 便利です
ルートを更新するには、gRPC または REST を使用してリクエストを送信します。
プロジェクトのサービス アカウントに適切な認証情報を Fleet Engine: サービス アカウントのロールをご覧ください。
ルートのフィールドを更新する
旅行のフィールドに記載されている
1 つの目的地の賃走データのみたとえば、旅行を作成すると、
最初に車両を見つけてから、ルートの vehicle_id
フィールドを
そのルートを実行する車両と
関連付ける必要があります
フィールド マスクを使用する
フィールド マスクを使用すると、API 呼び出し元がリクエストの対象となるフィールドを できます。FieldMask を使用する 不要な作業を回避し、パフォーマンスを向上させます。Fleet Engine はフィールド マスクを使用 すべてのリソースのフィールドを更新できます。
車両 ID を使ってルートを更新する
Fleet Engine が追跡できるように、車両 ID を使用してルートを設定する必要があります 追跡します次のコードサンプルは、 車両 ID でルートを更新します。
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// The trip settings to update.
Trip trip = Trip.newBuilder()
.setVehicleId("8241890")
.build();
// The trip update request.
UpdateTripRequest updateTripRequest =
UpdateTripRequest.newBuilder() // No need for the header.
.setName(tripName)
.setTrip(trip)
.setUpdateMask(FieldMask.newBuilder().addPaths("vehicle_id"))
.build();
// Error handling.
// If the Fleet Engine has both a trip and vehicle with IDs, and if the
// credentials validate, then the service updates the trip.
try {
Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // Neither the trip nor vehicle exist.
break;
case PERMISSION_DENIED:
break;
}
return;
}
ルートの運行状況を管理する
ルートの状態を、TripStatus
列挙型のいずれかを使って指定します。
使用できます。ルートのステータスが変更されたときたとえば、ENROUTE_TO_PICKUP
から
ARRIVED_AT_PICKUP
さん、Fleet Engine でルート状態を更新します。ルート
ライフサイクルは常に状態値 NEW
で始まり、次の値で終了します。
COMPLETE
または CANCELED
。
ルート更新情報の例
以下は、連続したルートでルート状態を更新する方法を示しています。 Fleet Engine で実施されます
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// Trip settings to be updated.
Trip trip = Trip.newBuilder()
.setTripStatus(TripStatus.ARRIVED_AT_PICKUP)
.build();
// Trip update request
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
.setName(tripName)
.setTrip(trip)
.setUpdateMask(FieldMask.newBuilder().addPaths("trip_status"))
.build();
// Error handling.
try {
Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // The trip doesn't exist.
break;
case FAILED_PRECONDITION: // The given trip status is invalid.
break;
case PERMISSION_DENIED:
break;
}
return;
}
ルートを更新する方法の他の例については、その他のルートタイプをご覧ください。 。
ルートエラーを処理する
既存のルートを更新または検索する際、
DEADLINE_EXCEEDED
エラー。この場合、Fleet Engine の状態は不明です。
これを調べるには、まず CreateTrip
に再度呼び出します。その際は、先ほどと同じルート ID を使用します。
更新や監視を試行します。201(CREATED)または
409(CONFLICT)。後者の場合、前のリクエストは正常に完了してから
DEADLINE_EXCEEDED
。
Consumer SDK のネットワーク エラーのリスト(Android または iOS: