تعديل مهام مركبات التوصيل

يفترض هذا المستند الإلمام بما يلي:

في سيناريو التسليم في الواقع، تحدّد الأنشطة التجارية مهام شحن التسليم للسائقين، الذين يستعينون بعد ذلك بمركبة لتسليمها إلى المستلِم في مكان مخطَّط، مثل محل إقامته أو غرفة تسليم في مجمع مباني. يمكنك تمثيل ذلك في 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`
  • &lt;id&gt; هو معرّف فريد لمركبة توصيل في أسطولك والتي تنوي تحديث ترتيب المهام لها. إنه المعرف الذي حددته عند إنشاء المركبة.

  • يجب أن يحتوي عنوان الطلب على الحقل 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

الخطوات التالية