Dokumen ini mengasumsikan Anda telah memahami hal-hal berikut:
- Membuat tugas pengiriman
- Pengantar Tugas terjadwal, yang mencakup hubungan antara tugas, perhentian, dan kendaraan secara detail.
Seperti yang dinyatakan dalam Tugas terjadwal di Fleet Engine Essentials, Anda membuat tugas dan mengaitkannya dengan kendaraan sebagai cara untuk membuat model asosiasi dunia nyata antara tugas dan lokasi tempat kendaraan diperkirakan akan berhenti sehingga pengemudi dapat menyelesaikan menyelesaikan tugas tersebut.
Dari sana, Anda mengelola kemajuan tugas di sepanjang siklus hidupnya dengan mengirim pembaruan ke Fleet Engine agar dapat melakukan perutean dan status dengan sebaik-baiknya pembaruan di sepanjang perjalanan tugas. Salah satu cara penting untuk melakukannya adalah dengan memperbarui kendaraan berhenti saat kendaraan mendekati, tiba di, dan meninggalkan perhentian. Ini memungkinkan pelaporan dan analisis tentang kemajuan tugas untuk Operator perangkat dan pengguna akhir. Pembaruan status ini adalah sebagai berikut:
- En route: Enum
STATE
untukVehicleStop
menggunakanENROUTE
untuk menunjukkan bahwa perhentian berikutnya berada di daftar untuk itinerari kendaraan. Dari perspektif tugas, ini berarti tugas apa pun yang terkait dengan adalah urutan berikutnya dalam daftar yang harus diselesaikan. - Sampai: Enum
STATE
untukVehicleStop
menggunakanARRIVED
untuk menunjukkan bahwa kendaraan telah tiba di perhentian. Dari perspektif tugas, itu berarti bahwa setiap tugas yang terkait dengan penghentian yang sedang dikerjakan secara aktif. - Selesai: Anda menandai perhentian sebagai selesai dengan menghapusnya dari daftar perhentian untuk kendaraan. Ketika Anda melakukannya, Fleet Engine akan otomatis menandai semua tugas terkait sebagai TUTUP. Untuk detail selengkapnya tentang menutup tugas, lihat Menyelesaikan tugas.
Dokumen ini menjelaskan cara update berhenti menggunakan pendekatan sisi server. Anda juga dapat melakukan ini dari aplikasi {i>driver<i} Anda 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.
Kendaraan sedang dalam perjalanan untuk berhenti
Sistem Anda harus memberi tahu Fleet Engine saat kendaraan memulai navigasi ke perhentian berikutnya. Tindakan ini meningkatkan penghitungan PWT dan rute.
Kolom wajib diisi untuk update perhentian
Fleet Engine mengabaikan semua kolom lain dalam entity untuk notifikasi.
Kolom | Nilai |
---|---|
remainingVehicleJourneySegments
|
Daftar perhentian kendaraan yang tersisa dengan negara bagiannya ditandai sebagai State.NEW. |
Contoh rute ke perhentian
Contoh berikut menunjukkan cara memberi tahu Fleet Engine bahwa sebuah kendaraan
rutekan ke perhentian berikutnya, menggunakan library gRPC Java atau
Panggilan REST ke UpdateDeliveryVehicle
.Semua perhentian lainnya ditandai sebagai baru.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// Next stop marked as ENROUTE
.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.ENROUTE)))
// All other stops marked as 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 updateDeliveryVehicleRequest =
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 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
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": "ENROUTE",
"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
Kendaraan tiba di perhentian
Fleet Engine harus diberi tahu saat kendaraan tiba di perhentian.
Kolom wajib diisi untuk update perhentian
Fleet Engine mengabaikan semua kolom lain dalam entity untuk notifikasi.
Kolom | Nilai |
---|---|
remainingVehicleJourneySegments
|
Daftar perhentian kendaraan yang tersisa dengan negara bagiannya ditandai sebagai State.NEW. |
Contoh kedatangan di perhentian
Contoh berikut menunjukkan cara memberi tahu Fleet Engine bahwa sebuah kendaraan tiba
di perhentian, menggunakan library gRPC Java atau panggilan REST HTTP untuk
UpdateDeliveryVehicle
. Semua perhentian lainnya ditandai sebagai baru.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// Marking the arrival at stop.
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.7749)
.setLongitude(122.4194)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
.setState(VehicleStop.State.ARRIVED)))
// All other remaining stops marked as 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))) // Remaining stops must be NEW.
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
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 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
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": "ARRIVED",
"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
Kendaraan menyelesaikan perhentian
Fleet Engine harus diberi tahu saat kendaraan berhenti. Hal ini menyebabkan semua tugas yang terkait dengan perhentian agar ditetapkan ke status TUTUP.
Kolom wajib diisi untuk update perhentian
Fleet Engine mengabaikan semua kolom lain dalam entity untuk notifikasi.
Kolom | Nilai |
---|---|
remainingVehicleJourneySegments |
Daftar perhentian kendaraan yang tersisa dengan negara bagiannya ditandai sebagai State.NEW. Perhentian pertama dalam daftar harus memiliki status yang ditandai sebagai State.ENROUTE. |
Menyelesaikan contoh perhentian
Contoh berikut menunjukkan cara memberi tahu Fleet Engine bahwa sebuah kendaraan tiba
di perhentian, menggunakan library gRPC Java atau panggilan REST HTTP untuk
UpdateDeliveryVehicle
. Semua perhentian lainnya ditandai sebagai baru.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// This stop has been completed and is commented out to indicate it
// should be removed from the list of vehicle journey segments.
// .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
// .setStop(VehicleStop.newBuilder()
// .setPlannedLocation(LocationInfo.newBuilder()
// .setPoint(LatLng.newBuilder()
// .setLatitude(37.7749)
// .setLongitude(122.4194)))
// .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
// .setState(VehicleStop.State.ARRIVED)))
// All other remaining stops marked as NEW.
// The next stop could be marked as ENROUTE if the vehicle has begun
// its journey to the next stop.
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // Next 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 updateDeliveryVehicleRequest =
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=remaining_vehicle_journey_segments`
- <id> 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
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.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM