Perbarui perjalanan dan kelola provinsinya

Dokumen ini menjelaskan cara memperbarui perjalanan dan mengelola statusnya, yang melibatkan penggunaan mask kolom guna menetapkan kolom yang relevan untuk perjalanan. Anda diasumsikan telah menyiapkan Fleet Engine seperti yang dijelaskan di situs ini dan bekerja sama dengan kendaraan yang ditetapkan untuk sebuah perjalanan.

Dasar-dasar update 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 lewat melalui titik jalan.
  • Saat Anda memperbarui kolom perjalanan, seperti jumlah penumpang dan oleh Google Cloud.

Untuk memperbarui perjalanan, kirim permintaan menggunakan gRPC dan REST.

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

Gunakan kredensial yang sesuai untuk akun layanan project Anda sebagai yang dijelaskan di Fleet Engine: Peran akun layanan.

Memperbarui kolom perjalanan

Anda dapat memperbarui kolom perjalanan yang dijelaskan di Kolom perjalanan di Buat satu perjalanan tujuan. Misalnya, setelah membuat perjalanan, biasanya latihan untuk menemukan kendaraan terlebih dahulu, lalu memperbarui kolom perjalanan vehicle_id menjadi mengaitkannya dengan kendaraan yang akan melakukan perjalanan.

Menggunakan mask kolom

Mask kolom adalah cara bagi pemanggil API untuk mencantumkan kolom yang harus disediakan oleh permintaan atau perbarui. Menggunakan FieldMask menghindari pekerjaan yang tidak perlu dan meningkatkan kinerja. Fleet Engine menggunakan mask kolom untuk memperbarui kolom di semua resource.

Perbarui 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 perbarui 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 enumerasi TripStatus masing-masing. Saat negara bagian perjalanan berubah; misalnya dari ENROUTE_TO_PICKUP hingga ARRIVED_AT_PICKUP, Anda akan memperbarui status perjalanan di Fleet Engine. Perjalanan siklus proses selalu dimulai dengan nilai status NEW, dan diakhiri dengan nilai COMPLETE atau CANCELED.

Contoh info terbaru perjalanan

Berikut cara memperbarui status perjalanan untuk back-to-back perjalanan 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 Jenis perjalanan lainnya bagian.

Menangani error perjalanan

Saat memperbarui atau menemukan perjalanan yang ada, Anda mungkin menemukan kasus Error DEADLINE_EXCEEDED, dalam hal ini status Fleet Engine tidak diketahui. Untuk menyelidiki hal ini, pertama-tama telepon CreateTrip lagi menggunakan ID perjalanan yang sama dengan Anda coba perbarui atau pantau. Ini akan menghasilkan nilai 201 (CREATED) atau 409 (KONFLIK). Dalam kasus yang terakhir, permintaan sebelumnya berhasil sebelum DEADLINE_EXCEEDED.

Lihat daftar error jaringan di Consumer SDK, baik untuk Android maupun iOS.

Langkah berikutnya