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