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