Dokumen ini mengasumsikan bahwa Anda memahami cara membuat dan menggunakan tugas. Panduan ini memberikan contoh khusus tentang cara menyelesaikan tugas pengiriman sebagai berikut:
Menutup tugas: Menutup tugas pengiriman akan mengubah statusnya menjadi
CLOSED
dan menunjukkan bahwa tugas tersebut tidak lagi aktif.Menetapkan hasil tugas: Setelah tugas ditutup, Anda dapat menyelesaikannya dengan menetapkan hasilnya ke
SUCCEEDED
atauFAILED
. Ini adalah bagian penting dari penyelesaian tugas untuk menampilkan hasil pengiriman dalam berbagi perjalanan dan untuk memastikan penagihan yang benar untuk layanan Fleet Engine.
Menutup tugas
Anda dapat menutup tugas dengan cara berikut:
- Perbarui status perhentian untuk kendaraan. Anda menghapus perhentian dari kendaraan, yang pada akhirnya menutup semua tugas yang terkait dengan perhentian. Lihat Memperbarui status perhentian untuk mengetahui detailnya.
- Hapus tugas dari daftar perhentian kendaraan. Tindakan ini mencakup pembaruan daftar tugas untuk perhentian, tetapi dengan tugas yang ditutup tidak lagi menjadi bagian dari daftar. Lihat Memperbarui urutan tugas di Memperbarui tugas.
- Tetapkan 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 tidak lagi dianggap sedang berlangsung. Untuk menunjukkan hasil sebenarnya dari suatu tugas dan menampilkannya untuk tujuan Pelacakan Armada dan berbagi perjalanan, Anda harus menunjukkan hasil sebenarnya dari suatu tugas. Lihat Menetapkan hasil tugas di bawah.
Kolom tugas untuk menutup tugas
Bagian ini mendokumentasikan kolom yang diperlukan untuk ditetapkan saat menutup tugas. Mesin armada mengabaikan semua kolom lain dalam entity untuk update.
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 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
- <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 JSON Web token.
- Anda harus menyertakan entitas
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 sebenarnya dari suatu tugas, Anda menetapkan hasil untuk tugas tertutup
ke SUCCEEDED
atau FAILED
. Tugas harus ditutup sebelum Anda menetapkan
hasilnya. Fleet Engine hanya menagih 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 mengikuti setelan Anda:
- Lokasi hasil tugas: Fleet Engine otomatis mengisi lokasi hasil tugas dengan lokasi kendaraan terakhir yang diketahui. Anda dapat memberikannya 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
:
- Perbarui dalam 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
atauFAILED
. - Anda tidak dapat menetapkan lokasi atau waktu hasil tugas 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 entitas 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 menetapkannya secara default ke lokasi kendaraan terakhir. |
taskOutcomeTime |
Stempel waktu saat tugas diselesaikan. |
Contoh hasil tugas
Contoh berikut menunjukkan cara menggunakan library gRPC Java dan panggilan
REST HTTP 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 JSON Web token.
- Isi permintaan harus berisi entitas
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