Menyelesaikan tugas

Dokumen ini mengasumsikan Anda memahami cara membuat dan menggunakan tugas. Menyediakan contoh spesifik untuk cara menyelesaikan tugas pengiriman sebagai berikut:

  • Menutup tugas: Menutup tugas pengiriman akan mengubah statusnya menjadi CLOSED dan menunjukkan bahwa tugas itu tidak lagi aktif.

  • Menetapkan hasil tugas: Setelah tugas ditutup, Anda kemudian menyelesaikannya dengan menetapkan hasilnya ke SUCCEEDED atau FAILED. Ini adalah pra-pemrosesan bagian dari penyelesaian tugas untuk menunjukkan hasil pelaksanaan dalam perjalanan berbagi dan memastikan penagihan yang benar untuk layanan Fleet Engine.

Menutup tugas

Anda dapat menutup tugas dengan cara berikut:

  • Memperbarui status perhentian untuk kendaraan. Anda menghapus perhentian dari kendaraan, sehingga akan menutup semua tugas yang terkait dengan perhentian tersebut. Lihat Memperbarui status perhentian untuk mengetahui detailnya.
  • Hapus tugas dari daftar perhentian kendaraan. Hal ini melibatkan pembaruan daftar tugas untuk perhentian, tetapi dengan tugas tertutup bagian yang lebih panjang. Lihat Memperbarui urutan tugas di Memperbarui tugas.
  • Tetapkan status tugas ke CLOSED. Hal ini hanya dapat dilakukan pada tugas-tugas yang bukan untuk kendaraan. Bagian ini menunjukkan pendekatan ini.

Setelah menutup tugas, Anda tidak dapat membukanya kembali.

Penutupan tugas tidak menunjukkan keberhasilan atau kegagalannya. Ini menunjukkan bahwa tugas tersebut tidak lagi dianggap sedang berlangsung. Untuk menunjukkan hasil aktual dari tugas dan menampilkannya untuk Pelacakan Armada dan tujuan berbagi {i>user journey<i}, Anda harus menunjukkan hasil aktual dari sebuah tugas. Lihat Tetapkan hasil tugas di bawah.

Kolom tugas untuk menutup tugas

Bagian ini mendokumentasikan kolom wajib diisi yang harus ditetapkan saat menutup tugas Anda. Mesin perangkat mengabaikan semua kolom lain di entity untuk update.

Kolom wajib diisi Nilai
state State.CLOSED

Menutup tugas secara langsung

Contoh berikut menunjukkan cara menetapkan tugas yang belum ditetapkan ke keadaan tertutup, di gRPC atau menggunakan panggilan permintaan REST HTTP ke UpdateTask

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setState(Task.State.CLOSED) // You can only directly CLOSE a
   .build();                    // task that is NOT assigned to a vehicle.

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } 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>/tasks/<id>?updateMask=state

  • &lt;id&gt; adalah pengidentifikasi unik untuk tugas.
  • 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.
  • Anda harus menyertakan entity Task dalam isi permintaan

Contoh perintah curl:

 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "state": "CLOSED",
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
 }
 EOM

Menetapkan hasil tugas

Untuk menunjukkan hasil aktual dari suatu tugas, Anda menetapkan hasil untuk tugas yang telah ditutup. ke SUCCEEDED atau FAILED. Tugas harus ditutup sebelum Anda menyetelnya hasil proyek. Fleet Engine hanya mengenakan biaya untuk tugas pengiriman dengan status SUCCEEDED.

Detail hasil tugas

Tugas juga memberikan detail tambahan tentang hasil tugas. Anda dapat menyetelnya secara langsung dan Fleet Engine mengikuti setelan Anda:

  • Lokasi hasil tugas: Fleet Engine secara otomatis mengisi tugas dengan lokasi kendaraan terakhir yang diketahui. Anda dapat memberikan sebagai gantinya jika mau.
  • Waktu hasil tugas: Fleet Engine tidak mengisi kolom ini, tetapi yang tersedia untuk Anda atur.

Anda dapat menggunakan salah satu pendekatan berikut untuk menyetel task_outcome_location dan task_outcome_time:

  • Perbarui keduanya di permintaan yang sama yang menetapkan hasil tugas.
  • Perbarui nanti, setelah Anda menetapkan hasil tugas.
  • Ubah lagi setelah ditetapkan.

Fleet Engine mencegah pembaruan berikut yang terkait dengan hasil tugas:

  • Anda tidak dapat mengubah hasil tugas setelah ditetapkan ke SUCCEEDED atau FAILED.
  • Anda tidak dapat menetapkan lokasi hasil tugas atau waktu hasil untuk tugas tanpa hasil yang telah ditentukan.

Kolom tugas untuk menetapkan hasil

Bagian ini mendokumentasikan kolom wajib diisi dan opsional yang akan ditetapkan saat menetapkan hasil tugas. Fleet Engine mengabaikan kolom lain dalam entity untuk update.

Kolom wajib diisi Nilai
taskOutcome Outcome.SUCCEEDED atau Outcome.FAILED

Kolom opsionalNilai
taskOutcomeLocation Lokasi tempat tugas diselesaikan. Jika tidak ditetapkan, Fleet Engine secara {i>default<i} adalah lokasi kendaraan terakhir.
taskOutcomeTime Stempel waktu saat tugas selesai.

Contoh hasil tugas

Contoh berikut menunjukkan cara menggunakan library gRPC Java dan permintaan HTTP Panggilan REST ke UpdateTask untuk menetapkan hasil tugas ke SUCCEEDED dan menetapkan lokasi di mana tugas diselesaikan.

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setTaskOutcome(TaskOutcome.SUCCEEDED)
   .setTaskOutcomeTime(now())
   .setTaskOutcomeLocation(               // Grand Indonesia East Mall
     LocationInfo.newBuilder().setPoint(
       LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
   .build();

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } 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>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation

  • &lt;id&gt; adalah pengidentifikasi unik untuk tugas.
  • 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 Task.
 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
   "taskOutcomeLocation": {
     "point": {
       "latitude": -6.195139,
       "longitude": 106.820826
     }
   }
 }
 EOM

Langkah berikutnya