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, perusahaan memberikan tugas pengiriman barang ke pengemudi, yang kemudian menggunakan kendaraan untuk mengantarkannya ke penerima pada tertentu, seperti tempat tinggal atau ruang pengiriman dalam kompleks gedung. Anda membuat model ini di Fleet Engine dengan membuat tugas dan menerbitkan kendaraan pengiriman permintaan pembaruan data, yang kemudian memperbarui entitas kendaraan dengan daftar perhentian untuk bepergian. Anda menetapkan daftar tugas yang harus diselesaikan di setiap perhentian.
Anda dapat memperbarui tugas kendaraan kapan saja, tetapi biasanya Anda melakukannya untuk untuk tujuan berikut:
- Menjadwalkan tugas untuk diselesaikan kendaraan. Anda dapat melakukannya dengan permintaan pembaruan yang menambahkan perhentian baru ke kendaraan, atau dengan pembaruan permintaan yang menambahkan tugas baru ke perhentian yang ada.
- Memperbarui urutan tugas yang ada yang terkait dengan perhentian kendaraan tertentu.
- Ubah lokasi penyelesaian tugas. Secara default, Fleet Engine menandai lokasi penyelesaian tugas sebagai lokasi yang sama dengan perhentian kendaraan yang terkait dengan tugas. Jika ingin, Anda dapat menentukan lokasi spesifik untuk tugas individu. Misalnya, Anda mungkin memiliki penghentian kendaraan di tempat kompleks untuk pengiriman sejumlah paket, yang masing-masing diberi sebuah ruang pengiriman email tertentu.
- Tutup tugas yang telah ditetapkan sebelumnya agar tidak diperbarui pemesanan. Lihat Menyelesaikan tugas untuk detailnya.
Menjadwalkan atau mengubah tugas pengiriman
Anda dapat menjadwalkan atau mengubah tugas yang ditetapkan ke kendaraan dari server tambahan, atau dengan menggunakan SDK Driver jika Anda memberi pengemudi kemampuan untuk mengelola tugas menggunakan perangkat tepercaya. Hanya gunakan satu metode agar Anda menghindari race kondisi dan mempertahankan satu sumber yang terpercaya.
Untuk mengubah pengiriman dari satu kendaraan ke kendaraan lainnya, tutup tugas asli dan membuatnya kembali sebelum ditetapkan 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 wajib diisi yang harus ditetapkan saat memperbarui tugas untuk saat ini. Tidak ada kolom opsional yang disediakan. Mesin Fleet mengabaikan semua kolom lainnya dalam entity untuk update.
Kolom wajib diisi | Nilai |
---|---|
remainingVehicleJourneySegments |
Daftar segmen perjalanan untuk tugas sesuai urutan pelaksanaannya. 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 permintaan HTTP
Panggilan REST ke UpdateDeliveryVehicle
guna menambahkan dua tugas baru untuk 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 di armada Anda yang urutan tugasnya ingin Anda perbarui. 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 Token Web JSON.
Isi permintaan harus berisi entity
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