Dokumen ini menjelaskan cara memperbarui perjalanan dan mengelola statusnya, yang melibatkan penggunaan mask kolom untuk menetapkan kolom yang relevan untuk perjalanan. Dokumen ini mengasumsikan bahwa Anda telah menyiapkan Fleet Engine seperti yang dijelaskan di situs ini dan menggunakan kendaraan yang ditetapkan ke perjalanan.
Dasar-dasar pembaruan perjalanan
Sistem Anda menggunakan Fleet Engine untuk memperbarui perjalanan dalam situasi berikut:
- Saat menetapkan kendaraan ke perjalanan setelah perjalanan dibuat.
- Saat status perjalanan berubah; misalnya, saat kendaraan melewati titik jalan.
- Saat Anda memperbarui kolom perjalanan, seperti jumlah penumpang dan titik pengantaran.
Untuk memperbarui perjalanan, kirim permintaan menggunakan gRPC dan REST.
Gunakan kredensial yang sesuai untuk akun layanan project Anda seperti yang dijelaskan di Fleet Engine: Peran akun layanan.
Memperbarui kolom perjalanan
Anda dapat memperbarui kolom perjalanan yang dijelaskan di Kolom perjalanan di Membuat
perjalanan satu tujuan. Misalnya, setelah membuat perjalanan, praktik umumnya adalah menemukan kendaraan terlebih dahulu, lalu memperbarui kolom vehicle_id perjalanan untuk mengaitkannya dengan kendaraan yang akan melakukan perjalanan.
Menggunakan mask kolom
Mask kolom adalah cara bagi pemanggil API untuk mencantumkan kolom yang harus atau diperbarui oleh permintaan. Menggunakan FieldMask akan menghindari pekerjaan yang tidak perlu dan meningkatkan performa. Fleet Engine menggunakan mask kolom untuk memperbarui kolom di semua resource.
Memperbarui perjalanan dengan ID kendaraan
Anda harus mengonfigurasi perjalanan dengan ID kendaraan agar Fleet Engine dapat melacak kendaraan di sepanjang rutenya. Contoh kode berikut menunjukkan cara memperbarui perjalanan dengan ID kendaraan.
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;
}
Mengelola status perjalanan untuk perjalanan
Anda menentukan status perjalanan menggunakan salah satu nilai enumerasi TripStatus. Saat status perjalanan berubah; misalnya, dari ENROUTE_TO_PICKUP menjadi ARRIVED_AT_PICKUP, Anda memperbarui status perjalanan di Fleet Engine. Siklus proses perjalanan selalu dimulai dengan nilai status NEW, dan berakhir dengan nilai COMPLETE atau CANCELED.
Contoh pembaruan perjalanan
Berikut ini menunjukkan cara memperbarui status perjalanan untuk perjalanan beruntun di 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;
}
Anda dapat melihat contoh lain tentang cara memperbarui perjalanan di bagian Jenis perjalanan lainnya.
Menangani error perjalanan
Saat memperbarui atau menemukan perjalanan yang ada, Anda mungkin mengalami error DEADLINE_EXCEEDED, yang dalam hal ini status Fleet Engine tidak diketahui.
Untuk menyelidikinya, panggil CreateTrip lagi menggunakan ID perjalanan yang sama yang ingin Anda perbarui atau pantau. Tindakan ini akan menampilkan 201 (CREATED) atau 409 (CONFLICT). Dalam kasus terakhir, permintaan sebelumnya berhasil sebelum DEADLINE_EXCEEDED.
Lihat daftar error jaringan di Consumer SDK, baik untuk Android atau iOS.