يفترض هذا المستند الإلمام بما يلي:
- إنشاء مهام الشحن
- مقدمة عن المهام المجدولة، التي تتناول العلاقة بين المهام ومحطات التوقف والمركبات بالتفصيل.
في سيناريو التسليم في الواقع، تحدّد الأنشطة التجارية مهام شحن التسليم للسائقين، الذين يستعينون بعد ذلك بمركبة لتسليمها إلى المستلِم في مكان مخطَّط، مثل محل إقامته أو غرفة تسليم في مجمع مباني. يمكنك تمثيل ذلك في Fleet Engine من خلال إنشاء مهمة وإصدار طلب تعديل مركبة توصيل، ما يؤدي إلى تعديل عنصر المركبة بقائمة المحطات التي يجب التوقف عندها. يمكنك تخصيص قائمة بالمهام التي يجب إكمالها في كل محطة.
يمكنك تعديل مهام المركبات في أي وقت، ولكنك عادةً ما تفعل ذلك لأغراض التالية:
- يمكنك جدولة المهام لإكمالها في مركبة. يمكنك القيام بذلك إما من خلال طلب تحديث يضيف محطة جديدة إلى المركبة، أو عن طريق طلب تحديث يضيف مهمة جديدة إلى محطة حالية.
- تعديل ترتيب المهام الحالية المرتبطة بمحطة معيّنة
- تغيير الموقع الجغرافي لإكمال المهمة: بشكل افتراضي، يحدد Fleet Engine موقع إنجاز المهمة على أنه نفس موقع محطة المركبة المرتبط بالمهمة. إذا كنت تفضل ذلك، يمكنك تحديد مواقع محددة للمهام الفردية. على سبيل المثال، قد تتوقف مركبة في مجمعٍ كبير لتسليم عدد من الطرود، تم تخصيص كلّ منها بغرفة تسليم بريد معيّنة.
- أغلِق أي مهام تم إسنادها سابقًا لإبعادها عن الترتيب المعدَّل . يُرجى الاطِّلاع على مقالة وضع اللمسات الأخيرة على المهام لمعرفة التفاصيل.
جدولة مهام التسليم أو تغييرها
يمكنك جدولة المهام المخصّصة للمركبة أو تغييرها إما من بيئة الخادم أو باستخدام "حزمة تطوير البرامج (SDK) لبرنامج التشغيل" إذا كنت تمنح السائق إمكانية إدارة المهام باستخدام جهاز موثوق به. استخدم طريقة واحدة فقط لتجنب شروط العِرق والحفاظ على مصدر واحد للحقيقة.
لتغيير شحنة من مركبة إلى أخرى، عليك إغلاق المهمة الأصلية وإعادة إنشائها قبل إسنادها إلى مركبة مختلفة. إذا حدّثت مركبة توصيل لتشمل مهمة مخصصة بالفعل لمركبة مختلفة، ستظهر لك رسالة خطأ.
الحقول المطلوبة لتعديل المهام
يوثّق هذا القسم الحقول المطلوبة التي يجب ضبطها عند تعديل مهمة لمركبة. لا يتم توفير أي حقول اختيارية. يتجاهل محرّك الأسطول جميع الحقول الأخرى في الكيان المراد تعديله.
حقل مطلوب | القيمة |
---|---|
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> هو معرّف فريد لمركبة توصيل في أسطولك والتي تنوي تحديث ترتيب المهام لها. إنه المعرف الذي حددته عند إنشاء المركبة.
يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) بالقيمة 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