Bu belgede, aşağıdakiler hakkında bilgi sahibi olduğunuz varsayılır:
- [Kargo görevleri oluşturma][1]
- Görevler, duraklar ve araçlar arasındaki ilişkiyi ayrıntılı olarak açıklayan [Planlanmış görevler][3] giriş bölümü.
Fleet Engine ile İlgili Temel Bilgiler bölümündeki [Planlanmış görevler][3] başlıklı makalede belirtildiği gibi, görevler oluşturup bunları bir araç durağıyla ilişkilendirerek görev ile aracın durması beklenen konum arasındaki gerçek dünya ilişkisini modellendirirsiniz. Böylece sürücü görevi tamamlayabilir.
Buradan itibaren, görevlerin yaşam döngüsü boyunca ilerlemesini yönetmek için Fleet Engine'e güncellemeler gönderirsiniz. Böylece Fleet Engine, görev yolculuğu boyunca en iyi şekilde rota oluşturma ve durum güncellemeleri yapabilir. Bunu yapmanın önemli bir yolu, araç durağa yaklaşırken, durağa vardığında ve duraktan ayrılırken araç durağını güncellemektir. Bu sayede hem filo operatörleri hem de son kullanıcılar için görev ilerleme durumu hakkında raporlama ve analiz yapılabilir. Bu durum güncellemeleri şunlardır:
- Yolda:
VehicleStopiçinSTATEenum'u,ENROUTEkullanarak durağın araç seyahat planı listesinde bir sonraki durak olduğunu belirtir. Görev açısından bu, durakla ilişkili herhangi bir görevin listede tamamlanacak bir sonraki görev olduğu anlamına gelir. - Arrived:
STATEenum'u,VehicleStopiçinARRIVEDkullanarak aracın durağa ulaştığını belirtir. Görev açısından bakıldığında, durakla ilişkili tüm görevler üzerinde aktif olarak çalışılmasının durdurulduğu anlamına gelir. - Tamamlandı: Bir durağı, aracın durak listesinden kaldırarak tamamlandı olarak işaretleyebilirsiniz. Bu işlemi yaptığınızda Fleet Engine, ilişkili tüm görevleri otomatik olarak KAPALI olarak işaretler. Görevleri kapatma hakkında daha fazla bilgi için [Görevleri sonlandırma][4] başlıklı makaleye bakın.
Bu belgede, sunucu tarafı yaklaşımlarını kullanarak güncelleme durdurma durumunun nasıl değiştirileceği açıklanmaktadır. Sürücüye güvenilir bir cihaz kullanarak görevleri yönetme olanağı sunuyorsanız bunu sürücü uygulamanızdan da yapabilirsiniz. Yarışma koşullarından kaçınmak ve tek bir doğru kaynak kullanmak için yalnızca bir yöntem kullanın.
Araç durağa doğru gidiyor
Sisteminiz, araç bir sonraki durağa navigasyona başladığında Fleet Engine'e bildirim göndermelidir. Bu sayede TVS ve rota hesaplamaları iyileştirilir.
Durak güncellemeleri için zorunlu alanlar
Fleet Engine, bildirim için varlıktaki diğer tüm alanları yoksayar.
| Alan | Değer |
|---|---|
remainingVehicleJourneySegments
|
Durumları State.NEW olarak işaretlenmiş kalan araç duraklarının listesi. |
Durağa giderken örnek
Aşağıdaki örneklerde, [Java gRPC kitaplığı][5] veya UpdateDeliveryVehicle için bir HTTP REST çağrısı kullanılarak Fleet Engine'e bir aracın bir sonraki durağına doğru yolda olduğu nasıl bildirileceği gösterilmektedir.Diğer tüm duraklar yeni olarak işaretlenir.
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>, görevin benzersiz tanımlayıcısıdır.
- İstek başlığında, Authorization alanı ve değeri Bearer <token> olmalıdır. Burada <token>, [Hizmet hesabı rolleri][6] ve [JSON Web jetonları][6] bölümlerinde açıklanan yönergelere göre sunucunuz tarafından verilir.
- İstek metni bir
DeliveryVehicleöğesi içermelidir:
Örnek curl komutu:
# 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
Aracın durağa varması
Bir araç durağa ulaştığında Fleet Engine'e bildirim gönderilmelidir.
Durak güncellemeleri için zorunlu alanlar
Fleet Engine, bildirim için varlıktaki diğer tüm alanları yoksayar.
| Alan | Değer |
|---|---|
remainingVehicleJourneySegments
|
Durumları State.NEW olarak işaretlenmiş kalan araç duraklarının listesi. |
Durağa varma örneği
Aşağıdaki örneklerde, [Java gRPC kitaplığı][5] veya UpdateDeliveryVehicle için bir HTTP REST çağrısı kullanarak bir aracın durağa ulaştığını Fleet Engine'e nasıl bildireceğiniz gösterilmektedir. Diğer tüm duraklar yeni olarak işaretlenir.
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>, görevin benzersiz tanımlayıcısıdır.
- İstek başlığında, Authorization alanı ve değeri Bearer <token> olmalıdır. Burada <token>, [Hizmet hesabı rolleri][6] ve [JSON Web jetonları][6] bölümlerinde açıklanan yönergelere göre sunucunuz tarafından verilir.
- İstek metni bir
DeliveryVehicleöğesi içermelidir:
Örnek curl komutu:
# 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
Araç bir durağı tamamlıyor
Bir araç bir durağı tamamladığında Fleet Engine'e bildirim gönderilmelidir. Bu durumda, durakla ilişkili tüm görevler KAPALI durumuna ayarlanır.
Durak güncellemeleri için zorunlu alanlar
Fleet Engine, bildirim için varlıktaki diğer tüm alanları yoksayar.
| Alan | Değer |
|---|---|
remainingVehicleJourneySegments |
Durumları State.NEW olarak işaretlenmiş kalan araç duraklarının listesi. Listedeki ilk durağın durumu State.ENROUTE olarak işaretlenmelidir. |
Durdurma örneğini tamamlama
Aşağıdaki örneklerde, [Java gRPC kitaplığı][5] veya UpdateDeliveryVehicle için bir HTTP REST çağrısı kullanarak bir aracın durağa ulaştığını Fleet Engine'e nasıl bildireceğiniz gösterilmektedir. Diğer tüm duraklar yeni olarak işaretlenir.
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>, görevin benzersiz tanımlayıcısıdır.
- İstek başlığında, Authorization alanı ve değeri Bearer <token> olmalıdır. Burada <token>, [Hizmet hesabı rolleri][6] ve [JSON Web jetonları][6] bölümlerinde açıklanan yönergelere göre sunucunuz tarafından verilir.
- İstek metni bir
DeliveryVehicleöğesi içermelidir:
Örnek curl komutu:
# 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
Sırada ne var?
- [Görevleri tamamlama][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