Dokumen ini mengasumsikan bahwa Anda sudah memahami hal-hal berikut:
- [Membuat tugas pengiriman][1]
- Pengantar [Tugas terjadwal][3], yang membahas hubungan antara tugas, perhentian, dan kendaraan secara mendetail.
Seperti yang dinyatakan dalam [Tugas terjadwal][3] di Dasar-Dasar Fleet Engine, Anda membuat tugas dan mengaitkannya dengan perhentian kendaraan sebagai cara untuk memodelkan keterkaitan di dunia nyata antara tugas dan lokasi tempat kendaraan diperkirakan akan berhenti sehingga pengemudi dapat menyelesaikan tugas.
Dari sana, Anda dapat mengelola progres tugas di sepanjang siklus prosesnya dengan mengirimkan update ke Fleet Engine sehingga Fleet Engine dapat melakukan perutean dan update status dengan sebaik-baiknya di sepanjang perjalanan tugas. Salah satu cara utama untuk melakukannya adalah dengan memperbarui perhentian kendaraan saat kendaraan mendekati, tiba di, dan meninggalkan perhentian. Hal ini memungkinkan pelaporan dan analisis tentang progres tugas untuk operator Fleet dan pengguna akhir. Pembaruan status ini adalah sebagai berikut:
- Dalam perjalanan: Enum
STATEuntukVehicleStopmenggunakanENROUTEuntuk menunjukkan bahwa perhentian berikutnya dalam daftar untuk itinerari kendaraan. Dari perspektif tugas, ini berarti tugas apa pun yang terkait dengan perhentian adalah tugas berikutnya dalam daftar yang harus diselesaikan. - Tiba: Enum
STATEuntukVehicleStopmenggunakanARRIVEDuntuk menunjukkan bahwa kendaraan telah tiba di perhentian. Dari perspektif tugas, artinya tugas apa pun yang terkait dengan perhentian sedang dikerjakan secara aktif. - Selesai: Anda menandai perhentian sebagai selesai dengan menghapusnya dari daftar perhentian kendaraan. Saat Anda melakukannya, Fleet Engine akan otomatis menandai semua tugas terkait sebagai CLOSED. Untuk mengetahui detail selengkapnya tentang menutup tugas, lihat [Menyelesaikan tugas][4].
Dokumen ini menjelaskan cara memperbarui status perhentian menggunakan pendekatan sisi server. Anda juga dapat melakukannya dari aplikasi pengemudi jika Anda memberi pengemudi kemampuan untuk mengelola tugas menggunakan perangkat tepercaya. Gunakan hanya satu metode agar Anda dapat menghindari kondisi race dan mempertahankan satu sumber tepercaya.
Kendaraan sedang dalam perjalanan ke perhentian
Sistem Anda harus memberi tahu Fleet Engine saat kendaraan memulai navigasi ke perhentian berikutnya. Tindakan ini akan meningkatkan akurasi perhitungan rute dan PWT.
Kolom wajib diisi untuk pembaruan perhentian
Fleet Engine mengabaikan semua kolom lain dalam entitas untuk notifikasi.
| Kolom | Nilai |
|---|---|
remainingVehicleJourneySegments
|
Daftar perhentian kendaraan yang tersisa dengan statusnya ditandai sebagai State.NEW. |
Contoh dalam perjalanan ke perhentian
Contoh berikut menunjukkan cara memberi tahu Fleet Engine bahwa kendaraan sedang dalam perjalanan ke perhentian berikutnya, menggunakan [library gRPC Java][5] atau panggilan REST HTTP 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 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][6] dan [Token Web JSON][6].
- 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
placeidtrips1: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#locationinfo placeidtrips2: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html placeidtrips3: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#maps.fleetengine.delivery.v1.LocationInfo.FIELDS.string.maps.fleetengine.delivery.v1.LocationInfo.place placeidtrips4: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html#FIELDS.place
Kendaraan tiba di perhentian
Fleet Engine harus diberi tahu saat kendaraan tiba di perhentian.
Kolom wajib diisi untuk pembaruan perhentian
Fleet Engine mengabaikan semua kolom lain dalam entitas untuk notifikasi.
| Kolom | Nilai |
|---|---|
remainingVehicleJourneySegments
|
Daftar perhentian kendaraan yang tersisa dengan statusnya ditandai sebagai State.NEW. |
Contoh tiba di perhentian
Contoh berikut menunjukkan cara memberi tahu Fleet Engine bahwa kendaraan telah tiba di perhentian, menggunakan [library gRPC Java][5] atau panggilan HTTP 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
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 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][6] dan [Token Web JSON][6].
- 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 menyelesaikan perhentian. Hal ini menyebabkan semua tugas yang terkait dengan perhentian ditetapkan ke status CLOSED.
Kolom wajib diisi untuk pembaruan perhentian
Fleet Engine mengabaikan semua kolom lain dalam entitas untuk notifikasi.
| Kolom | Nilai |
|---|---|
remainingVehicleJourneySegments |
Daftar perhentian kendaraan yang tersisa dengan statusnya 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 kendaraan telah tiba di perhentian, menggunakan [library gRPC Java][5] atau panggilan REST HTTP 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
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 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][6] dan [Token Web JSON][6].
- 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
placeidtrips1: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#locationinfo placeidtrips2: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html placeidtrips3: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#maps.fleetengine.delivery.v1.LocationInfo.FIELDS.string.maps.fleetengine.delivery.v1.LocationInfo.place placeidtrips4: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html#FIELDS.place
Langkah berikutnya
- [Menyelesaikan tugas][4]
[1]: /maps/documentation/mobility/fleet-engine/journeys/tasks/create-shipment-tasks [3]: /maps/documentation/mobility/fleet-engine/essentials/tasks-intro [4]: /maps/documentation/mobility/fleet-engine/journeys/tasks/finalize-tasks [5]: /maps/documentation/mobility/fleet-engine/essentials/client-libraries-tasks [6]: /maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/service-accounts