Memperbarui tugas kendaraan pengiriman

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

Dalam skenario pengiriman di dunia nyata, bisnis menetapkan tugas pengiriman kepada pengemudi, yang kemudian menggunakan kendaraan untuk mengirimkannya kepada penerima di lokasi yang direncanakan, seperti tempat tinggal atau ruang pengiriman di kompleks bangunan. Anda membuat model ini di Fleet Engine dengan membuat tugas dan mengeluarkan permintaan pembaruan kendaraan pengiriman, yang kemudian memperbarui entitas kendaraan dengan daftar perhentian untuk perjalanan. Anda menetapkan daftar tugas yang harus diselesaikan di setiap perhentian.

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

  • Menjadwalkan tugas untuk diselesaikan kendaraan. Anda dapat melakukannya dengan permintaan pembaruan yang menambahkan perhentian baru ke kendaraan, atau dengan permintaan pembaruan yang menambahkan tugas baru ke perhentian yang ada.
  • Memperbarui urutan tugas yang ada yang terkait dengan perhentian kendaraan tertentu.
  • Mengubah lokasi penyelesaian tugas. Secara default, Fleet Engine menandai lokasi penyelesaian tugas sebagai lokasi yang sama dengan perhentian kendaraan yang terkait dengan tugas. Jika mau, Anda dapat menentukan lokasi tertentu untuk setiap tugas. Misalnya, Anda mungkin memiliki perhentian kendaraan di kompleks besar untuk mengirimkan sejumlah paket, yang masing-masing diberi ruang pengiriman surat tertentu.
  • Tutup tugas yang telah ditetapkan sebelumnya agar tidak disertakan dalam urutan yang diperbarui. Lihat Menyelesaikan tugas untuk mengetahui detailnya.

Menjadwalkan atau mengubah tugas pengiriman

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

Untuk mengubah pengiriman dari satu kendaraan ke kendaraan lain, tutup tugas asli dan buat ulang sebelum menetapkan 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 yang diperlukan untuk ditetapkan saat memperbarui tugas untuk kendaraan. Tidak ada kolom opsional yang diberikan. Mesin armada mengabaikan semua kolom lain dalam entity untuk update.

Kolom wajib diisiNilai
remainingVehicleJourneySegments Daftar segmen perjalanan untuk tugas dalam urutan yang harus dijalankan. 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 panggilan REST HTTP ke UpdateDeliveryVehicle untuk menambahkan dua tugas baru bagi 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`
  • <id> adalah ID unik untuk kendaraan pengiriman dalam armada Anda yang ingin Anda perbarui urutan tugasnya. 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 JSON Web token.

  • Isi permintaan harus berisi entitas 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