Memperbarui tugas kendaraan pengiriman

Dokumen ini mengasumsikan bahwa Anda sudah memahami hal-hal berikut:

Dalam skenario pengiriman di dunia nyata, perusahaan memberikan tugas pengiriman barang ke pengemudi, yang kemudian menggunakan kendaraan untuk mengantarkannya ke penerima pada tertentu, seperti tempat tinggal atau ruang pengiriman dalam kompleks gedung. Anda membuat model ini di Fleet Engine dengan membuat tugas dan menerbitkan kendaraan pengiriman permintaan pembaruan data, yang kemudian memperbarui entitas kendaraan dengan daftar perhentian untuk bepergian. Anda menetapkan daftar tugas yang harus diselesaikan di setiap perhentian.

Anda dapat memperbarui tugas kendaraan kapan saja, tetapi biasanya Anda melakukannya untuk untuk tujuan berikut:

  • Menjadwalkan tugas untuk diselesaikan kendaraan. Anda dapat melakukannya dengan permintaan pembaruan yang menambahkan perhentian baru ke kendaraan, atau dengan pembaruan permintaan yang menambahkan tugas baru ke perhentian yang ada.
  • Memperbarui urutan tugas yang ada yang terkait dengan perhentian kendaraan tertentu.
  • Ubah lokasi penyelesaian tugas. Secara default, Fleet Engine menandai lokasi penyelesaian tugas sebagai lokasi yang sama dengan perhentian kendaraan yang terkait dengan tugas. Jika ingin, Anda dapat menentukan lokasi spesifik untuk tugas individu. Misalnya, Anda mungkin memiliki penghentian kendaraan di tempat kompleks untuk pengiriman sejumlah paket, yang masing-masing diberi sebuah ruang pengiriman email tertentu.
  • Tutup tugas yang telah ditetapkan sebelumnya agar tidak diperbarui pemesanan. Lihat Menyelesaikan tugas untuk detailnya.

Menjadwalkan atau mengubah tugas pengiriman

Anda dapat menjadwalkan atau mengubah tugas yang ditetapkan ke kendaraan dari server tambahan, atau dengan menggunakan SDK Driver jika Anda memberi pengemudi kemampuan untuk mengelola tugas menggunakan perangkat tepercaya. Hanya gunakan satu metode agar Anda menghindari race kondisi dan mempertahankan satu sumber yang terpercaya.

Untuk mengubah pengiriman dari satu kendaraan ke kendaraan lainnya, tutup tugas asli dan membuatnya kembali sebelum ditetapkan ke kendaraan lain. Jika Anda memperbarui kendaraan pengiriman untuk menyertakan tugas yang sudah ditetapkan ke kendaraan lain, Anda akan mendapatkan error.

Kolom wajib diisi untuk memperbarui tugas

Bagian ini mendokumentasikan kolom wajib diisi yang harus ditetapkan saat memperbarui tugas untuk saat ini. Tidak ada kolom opsional yang disediakan. Mesin Fleet mengabaikan semua kolom lainnya dalam entity untuk update.

Kolom wajib diisiNilai
remainingVehicleJourneySegments Daftar segmen perjalanan untuk tugas sesuai urutan pelaksanaannya. Tugas pertama dalam daftar akan dieksekusi terlebih dahulu.
remainingVehicleJourneySegments[i].stop Perhentian untuk tugas i dalam daftar.
remainingVehicleJourneySegments[i].stop.plannedLocation Lokasi yang direncanakan untuk perhentian.
remainingVehicleJourneySegments[i].stop.tasks Daftar tugas yang akan dilakukan di perhentian kendaraan ini.
remainingVehicleJourneySegments[i].stop.state State.NEW

Contoh penetapan tugas

Contoh berikut menunjukkan cara menggunakan library gRPC Java dan permintaan HTTP Panggilan REST ke UpdateDeliveryVehicle guna menambahkan dua tugas baru untuk kendaraan.

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String VEHICLE_ID = "vehicle-8241890";
 static final String TASK1_ID = "task-756390";
 static final String TASK2_ID = "task-849263";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Vehicle settings
 String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
 DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
     .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
        .setStop(VehicleStop.newBuilder()
            .setPlannedLocation(LocationInfo.newBuilder()
                .setPoint(LatLng.newBuilder()
                    .setLatitude(37.7749)
                    .setLongitude(122.4194)))
            .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
            .setState(VehicleStop.State.NEW)))
     .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
        .setStop(VehicleStop.newBuilder()
            .setPlannedLocation(LocationInfo.newBuilder()
                .setPoint(LatLng.newBuilder()
                    .setLatitude(37.3382)
                    .setLongitude(121.8863)))
            .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
            .setState(VehicleStop.State.NEW)))
     .build();

 // DeliveryVehicle request
 UpdateDeliveryVehicleRequest updateDeliveryRequest =
   UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
       .setName(vehicleName)
       .setDeliveryVehicle(deliveryVehicle)
       .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
       .build();

 try {
   DeliveryVehicle updatedDeliveryVehicle =
       deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
 } catch (StatusRuntimeException e) {
   Status s = e.getStatus();
   switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
   }
   return;
 }

REST

 PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
  • &lt;id&gt; adalah ID unik untuk kendaraan pengiriman di armada Anda yang urutan tugasnya ingin Anda perbarui. Ini adalah ID yang Anda tentukan saat membuat kendaraan.

  • Header permintaan harus berisi kolom Authorization dengan nilai Bearer <token>, dengan <token> dikeluarkan oleh server Anda sesuai dengan panduan yang dijelaskan dalam Peran Akun layanan dan Token Web JSON.

  • Isi permintaan harus berisi entity DeliveryVehicle

Contoh perintah curl:

  # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
  # environment
  curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
    "remainingVehicleJourneySegments": [
      {
        "stop": {
          "state": "NEW",
          "plannedLocation": {
            "point": {
              "latitude": 37.7749,
              "longitude": -122.084061
            }
          },
          "tasks": [
            {
              "taskId": "${TASK1_ID}"
            }
          ]
        }
      },
      {
        "stop": {
          "state": "NEW",
          "plannedLocation": {
            "point": {
              "latitude": 37.3382,
              "longitude": 121.8863
            }
          },
          "tasks": [
            {
              "taskId": "${TASK2_ID}"
            }
          ]
        }
      }
    ]
  }
  EOM

Langkah berikutnya