Dokumen ini mengasumsikan bahwa Anda memahami cara membuat dan menggunakan tugas. Dokumen ini memberikan contoh spesifik tentang cara menyelesaikan tugas pengiriman sebagai berikut:
Menutup tugas: Menutup tugas pengiriman akan mengubah statusnya menjadi
CLOSEDdan menunjukkan bahwa tugas tersebut tidak lagi aktif.Menetapkan hasil tugas: Setelah tugas ditutup, Anda akan menyelesaikannya dengan menetapkan hasilnya menjadi
SUCCEEDEDatauFAILED. Ini adalah bagian penting untuk menyelesaikan tugas guna menampilkan hasil pengiriman dalam berbagi perjalanan 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, yang pada gilirannya akan menutup semua tugas yang terkait dengan perhentian tersebut. Lihat Memperbarui status perhentian untuk mengetahui detailnya.
- Menghapus tugas dari daftar perhentian kendaraan. Tindakan ini melibatkan pembaruan daftar tugas untuk perhentian, tetapi dengan tugas yang ditutup tidak lagi menjadi bagian dari daftar. Lihat Memperbarui urutan tugas di Memperbarui tugas.
- Menetapkan status tugas ke
CLOSED. Tindakan ini hanya dapat dilakukan pada tugas yang tidak ditetapkan ke kendaraan. Bagian ini menunjukkan pendekatan ini.
Setelah menutup tugas, Anda tidak dapat membukanya kembali.
Penutupan tugas tidak menunjukkan keberhasilan atau kegagalannya. Hal ini menunjukkan bahwa tugas tersebut tidak lagi dianggap sedang berlangsung. Untuk menunjukkan hasil sebenarnya dari tugas dan menampilkannya untuk tujuan Pelacakan Fleet dan berbagi perjalanan, Anda harus menunjukkan hasil sebenarnya dari tugas tersebut. Lihat Menetapkan hasil tugas di bawah.
Kolom tugas untuk menutup tugas
Bagian ini mendokumentasikan kolom yang diperlukan untuk ditetapkan saat menutup tugas. Fleet Engine mengabaikan semua kolom lain dalam entity untuk pembaruan.
| Kolom wajib diisi | Nilai |
|---|---|
state |
State.CLOSED |
Menutup tugas secara langsung
Contoh berikut menunjukkan cara menetapkan tugas yang tidak ditetapkan ke status tertutup, baik di gRPC maupun menggunakan panggilan permintaan HTTP REST 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
- <id> adalah ID 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
Taskdalam 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")"
}
EOMMenetapkan hasil tugas
Untuk menunjukkan hasil sebenarnya dari tugas, Anda menetapkan hasil untuk tugas yang ditutup menjadi SUCCEEDED atau FAILED. Tugas harus ditutup sebelum Anda menetapkan hasilnya. Fleet Engine hanya mengenakan biaya untuk tugas pengiriman dengan status SUCCEEDED.
Detail hasil tugas
Tugas juga memberikan detail tambahan tentang hasil tugas. Anda dapat menetapkannya secara langsung dan Fleet Engine akan mematuhi setelan Anda:
- Lokasi hasil tugas: Fleet Engine otomatis mengisi lokasi hasil tugas dengan lokasi kendaraan terakhir yang diketahui. Anda dapat memberikannya sebagai gantinya jika mau.
- Waktu hasil tugas: Fleet Engine tidak mengisi kolom ini, tetapi tersedia untuk Anda tetapkan.
Anda dapat menggunakan salah satu pendekatan berikut untuk menetapkan task_outcome_location dan task_outcome_time:
- Memperbaruinya dalam permintaan yang sama yang menetapkan hasil tugas.
- Memperbaruinya nanti, setelah Anda menetapkan hasil tugas.
- Mengubahnya lagi setelah ditetapkan.
Fleet Engine mencegah pembaruan berikut yang terkait dengan hasil tugas:
- Anda tidak dapat mengubah hasil tugas setelah ditetapkan ke
SUCCEEDEDatauFAILED. - Anda tidak dapat menetapkan lokasi hasil tugas atau waktu hasil untuk tugas tanpa hasil yang ditetapkan.
Kolom tugas untuk menetapkan hasil
Bagian ini mendokumentasikan kolom wajib dan opsional yang akan ditetapkan saat menetapkan hasil tugas. Fleet Engine mengabaikan kolom lain dalam entity untuk pembaruan.
| Kolom wajib diisi | Nilai |
|---|---|
taskOutcome |
Outcome.SUCCEEDED atau Outcome.FAILED |
| Kolom opsional | Nilai |
|---|---|
taskOutcomeLocation |
Lokasi tempat tugas diselesaikan. Jika tidak ditetapkan, Fleet Engine akan menetapkan nilai default ke lokasi kendaraan terakhir. |
taskOutcomeTime |
Stempel waktu saat tugas diselesaikan. |
Contoh hasil tugas
Contoh berikut menunjukkan cara menggunakan library gRPC Java dan panggilan HTTP
REST ke UpdateTask untuk menetapkan hasil tugas ke SUCCEEDED dan menetapkan
lokasi tempat 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
- <id> adalah ID 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