تفترض هذه المستندات الإلمام بما يلي:
- إنشاء مهام الشحن
- مقدّمة عن المهام المجدوَلة، التي تتناول بالتفصيل العلاقة بين المهام والمحطات والمركبات
في سيناريو تسليم حقيقي، تُسنِد المؤسسات مهام شحن التسليم إلى السائقين الذين يستخدمون بعد ذلك مركبة لتسليمها إلى المستلِم في موقع جغرافي مخطَّط له، مثل مكان إقامة أو غرفة تسليم في مجمّع مبانٍ. يمكنك محاكاة هذا السيناريو في Fleet Engine من خلال إنشاء مهمة وإرسال طلب تعديل لمركبة التسليم، ما يؤدي بعد ذلك إلى تعديل كيان المركبة باستخدام قائمة بالمحطات التي يجب الانتقال إليها. يمكنك إسناد قائمة بالمهام إلى كل محطة ليتم إكمالها في المحطة.
يمكنك تعديل مهام المركبة في أي وقت، ولكن عادةً ما يتم ذلك للأغراض التالية:
- جدولة المهام لمركبة لإكمالها يمكنك إجراء ذلك إما باستخدام طلب تعديل يضيف محطة جديدة إلى المركبة، أو باستخدام طلب تعديل يضيف مهمة جديدة إلى محطة حالية.
- تعديل ترتيب المهام الحالية المرتبطة بمحطة مركبة معيّنة
- تغيير موقع إكمال المهمة تلقائيًا، يضع Fleet Engine علامة على موقع إكمال المهمة باعتباره الموقع الجغرافي نفسه لمحطة المركبة المرتبطة بالمهمة. إذا كنت تفضّل ذلك، يمكنك تحديد مواقع جغرافية معيّنة لمهام فردية. على سبيل المثال، قد تتوقف مركبة في مجمّع كبير لتسليم عدد من الطرود، يتم إسناد كل منها إلى غرفة تسليم بريد معيّنة.
- إغلاق أي مهام سبق إسنادها لاستبعادها من الترتيب المعدَّل لمزيد من التفاصيل، يمكنك الاطّلاع على وضع المهام في حالتها النهائية.
جدولة مهام التسليم أو تغييرها
يمكنك جدولة المهام المُسنَدة إلى مركبة أو تغييرها إما من بيئة خادم أو باستخدام Driver SDK إذا منحت السائق إمكانية إدارة المهام باستخدام جهاز موثوق به. استخدِم طريقة واحدة فقط لتجنُّب حالات التنافس والحفاظ على مصدر واحد للبيانات الصحيحة.
لتغيير شحنة من مركبة إلى أخرى، عليك إغلاق المهمة الأصلية وإعادة إنشائها قبل إسنادها إلى مركبة مختلفة. إذا عدّلت مركبة تسليم لتضمين مهمة سبق إسنادها إلى مركبة مختلفة، سيظهر لك خطأ.
الحقول المطلوبة لتعديل المهام
يوضّح هذا القسم الحقول المطلوبة التي يجب ضبطها عند تعديل مهمة لمركبة. لا يتم توفير أي حقول اختيارية. يتجاهل Fleet Engine جميع الحقول الأخرى في الكيان عند إجراء التعديل.
| حقل مطلوب | القيمة |
|---|---|
remainingVehicleJourneySegments |
قائمة بأجزاء الرحلة للمهام بالترتيب الذي يجب تنفيذها به يتم تنفيذ المهمة الأولى في القائمة أولاً. |
remainingVehicleJourneySegments[i].stop |
محطة المهمة i في القائمة |
remainingVehicleJourneySegments[i].stop.plannedLocation |
الموقع الجغرافي المخطَّط له للمحطة |
remainingVehicleJourneySegments[i].stop.tasks |
قائمة بالمهام التي يجب تنفيذها في محطة المركبة هذه |
remainingVehicleJourneySegments[i].stop.state |
State.NEW |
مثال على إسناد المهام
توضّح الأمثلة التالية كيفية استخدام مكتبة Java gRPC وطلب HTTP
REST إلى UpdateDeliveryVehicle لإضافة مهمتَين جديدتَين للمركبة.
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> هو معرّف فريد لمركبة تسليم في أسطولك تريد تعديل ترتيب المهام لها. وهو المعرّف الذي حدّدته عند إنشاء المركبة.
يجب أن يحتوي عنوان الطلب على حقل Authorization بالقيمة Bearer <token>، حيث يُصدر خادمك <token> وفقًا للإرشادات الموضّحة في أدوار حسابات الخدمة و الرموز المميّزة الخاصة بالويب JSON.
يجب أن يحتوي نص الطلب على كيان
DeliveryVehicle
مثال على أمر 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