Dokumen ini menjelaskan cara memperbarui perjalanan dan mengelola statusnya, yang mencakup penggunaan mask kolom untuk menetapkan kolom yang relevan untuk perjalanan. Ini mengasumsikan bahwa Anda telah menyiapkan Fleet Engine seperti yang dijelaskan di situs ini dan menggunakan kendaraan yang ditetapkan untuk perjalanan.
Dasar-dasar info terbaru perjalanan
Sistem Anda menggunakan Fleet Engine untuk memperbarui perjalanan dalam situasi berikut:
- Saat menetapkan kendaraan ke perjalanan setelah dibuat.
- Saat status perjalanan berubah; misalnya, saat kendaraan melewati titik jalan.
- Saat Anda memperbarui kolom perjalanan, seperti jumlah penumpang dan titik penurunan.
Untuk memperbarui perjalanan, kirim permintaan menggunakan gRPC dan REST.
Gunakan kredensial yang sesuai untuk akun layanan project Anda seperti yang dijelaskan dalam Fleet Engine: Peran akun layanan.
Memperbarui kolom perjalanan
Anda dapat memperbarui kolom perjalanan yang dijelaskan dalam Kolom perjalanan di Membuat
perjalanan satu tujuan. Misalnya, setelah Anda membuat perjalanan, praktik umum
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 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 Mesin Flotte 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 akan memperbarui status perjalanan di Fleet Engine. Siklus proses perjalanan
selalu dimulai dengan nilai status NEW
, dan diakhiri dengan nilai
COMPLETE
atau CANCELED
.
Contoh info terbaru perjalanan
Berikut ini menunjukkan cara memperbarui status perjalanan untuk perjalanan berturut-turut 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 cara memperbarui perjalanan di bagian Jenis perjalanan lainnya.
Menangani error perjalanan
Saat memperbarui atau menemukan perjalanan yang ada, Anda mungkin mengalami kasus error DEADLINE_EXCEEDED
, yang berarti status Fleet Engine tidak diketahui.
Untuk menyelidikinya, panggil CreateTrip
lagi terlebih dahulu menggunakan ID perjalanan yang sama dengan yang
Anda coba 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 maupun iOS.