Perbarui perjalanan dan kelola provinsinya

Dokumen ini menjelaskan cara memperbarui perjalanan dan mengelola statusnya, yang mencakup penggunaan mask kolom untuk menetapkan kolom yang relevan untuk perjalanan. Anda dianggap telah menyiapkan Fleet Engine seperti yang dijelaskan di situs ini dan menggunakan kendaraan yang ditetapkan untuk sebuah 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.

  • Metode UpdateTrip(): gRPC atau REST
  • Pesan UpdateTripRequest: khusus gRPC

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 dalam Kolom perjalanan di Membuat perjalanan satu tujuan. Misalnya, setelah Anda membuat perjalanan, praktik yang umum dilakukan adalah menemukan kendaraan terlebih dahulu, lalu memperbarui kolom vehicle_id perjalanan untuk mengaitkannya dengan kendaraan yang akan melakukan perjalanan tersebut.

Menggunakan mask kolom

Mask kolom adalah cara bagi pemanggil API untuk mencantumkan kolom yang harus atau diperbarui oleh permintaan. Penggunaan FieldMask akan menghindari pekerjaan yang tidak perlu dan meningkatkan performa. Fleet Engine menggunakan mask kolom untuk mengupdate kolom di semua resource.

Perbarui 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 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.

Langkah berikutnya