Bu belgede, aşağıdakiler hakkında bilgi sahibi olduğunuz varsayılır:
- Kargo görevleri oluşturma
- Görevler, duraklar ve araçlar arasındaki ilişkiyi ayrıntılı olarak ele alan Planlanmış görevler'e giriş.
Gerçek hayattaki bir teslimat senaryosunda işletmeler, teslimat görevlerini sürücülere atar. Sürücüler de bu görevleri, planlanan bir konumda (ör. konut veya bina kompleksindeki teslimat odası) alıcıya teslim etmek için araç kullanır. Bunu, Fleet Engine'de bir görev oluşturup teslimat aracı güncelleme isteği göndererek modelliyorsunuz. Bu istek, araç varlığını gidilecek durakların listesiyle günceller. Her durağa, durakta tamamlanacak görevlerin listesini atarsınız.
Araç görevlerini istediğiniz zaman güncelleyebilirsiniz. Ancak genellikle bu işlemi aşağıdaki amaçlarla yaparsınız:
- Bir aracın tamamlaması için görev planlayın. Bunu, araca yeni bir durak ekleyen bir güncelleme isteğiyle veya mevcut bir durağa yeni bir görev ekleyen bir güncelleme isteğiyle yapabilirsiniz.
- Belirli bir araç durağıyla ilişkili mevcut görevlerin sırasını güncelleyin.
- Görevin tamamlanma yerini değiştirme Fleet Engine, varsayılan olarak görevin tamamlanma konumunu, görevle ilişkili araç durağıyla aynı konum olarak işaretler. İsterseniz her görev için belirli konumlar belirtebilirsiniz. Örneğin, bir araç, her biri belirli bir posta teslimat odasına atanmış bir dizi paketi teslim etmek için büyük bir komplekste durabilir.
- Güncellenen sıralamaya dahil etmemek için önceden atanmış tüm görevleri kapatın. Ayrıntılar için Görevleri tamamlama başlıklı makaleyi inceleyin.
Teslimat görevlerini planlama veya değiştirme
Bir sunucu ortamından veya sürücüye güvenilir bir cihaz kullanarak görevleri yönetme olanağı sağlarsanız Driver SDK'yı kullanarak bir araca atanan görevleri planlayabilir veya değiştirebilirsiniz. Yarışma koşullarından kaçınmak ve tek bir doğru kaynak kullanmak için yalnızca bir yöntem kullanın.
Bir gönderiyi bir araçtan diğerine değiştirmek için orijinal görevi kapatın ve farklı bir araca atamadan önce yeniden oluşturun. Bir teslimat aracını, farklı bir araca atanmış bir görevi içerecek şekilde güncellerseniz hata alırsınız.
Görevleri güncellemek için zorunlu alanlar
Bu bölümde, bir araçla ilgili görevi güncellerken ayarlanması gereken alanlar açıklanmaktadır. İsteğe bağlı alanlar sağlanmaz. Filo motoru, güncelleme için varlıktaki diğer tüm alanları yoksayar.
Zorunlu alan | Değer |
---|---|
remainingVehicleJourneySegments |
Görevler için, yürütülmeleri gereken sıraya göre yolculuk segmentlerinin listesi. Listedeki ilk görev önce yürütülür. |
remainingVehicleJourneySegments[i].stop |
Listedeki i görevine ait durak. |
remainingVehicleJourneySegments[i].stop.plannedLocation |
Durağın planlanan konumu. |
remainingVehicleJourneySegments[i].stop.tasks |
Bu araç durağında yapılacak görevlerin listesi. |
remainingVehicleJourneySegments[i].stop.state |
State.NEW |
Görev atama örneği
Aşağıdaki örneklerde, Java gRPC kitaplığı ve UpdateDeliveryVehicle
için bir HTTP REST çağrısı kullanılarak araca iki yeni görevin nasıl ekleneceği gösterilmektedir.
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>, filonuzdaki bir teslimat aracının benzersiz tanımlayıcısıdır. Bu tanımlayıcı, görev sıralamasını güncellemek istediğiniz araç için kullanılır. Bu, aracı oluştururken belirttiğiniz tanımlayıcıdır.
İstek başlığında, Authorization alanı ve Bearer <token> değeri bulunmalıdır. Burada <token>, Hizmet hesabı rolleri ve JSON Web jetonları'nda 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.7749,
"longitude": -122.084061
}
},
"tasks": [
{
"taskId": "${TASK1_ID}"
}
]
}
},
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM