Dokumen ini mengasumsikan bahwa Anda sudah memahami hal-hal berikut:
- Membuat tugas pengiriman
- Pengantar Tugas terjadwal, yang membahas hubungan antara tugas, perhentian, dan kendaraan secara mendetail.
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 diisi | Nilai |
---|---|
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