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

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

في سيناريو توصيل واقعي، تسند المؤسسات مهام توصيل الشحنات إلى السائقين، الذين يستخدمون بدورهم مركبة لتوصيلها إلى المستلم في موقع جغرافي محدّد، مثل مكان إقامة أو غرفة توصيل في مجمّع مبانٍ. يمكنك نمذجة ذلك في Fleet Engine من خلال إنشاء مهمة وإصدار طلب تعديل مركبة توصيل، والذي يعدّل بعد ذلك كيان المركبة بقائمة من المحطات التي يجب الوصول إليها. يمكنك تعيين قائمة مهام لكل محطة لإكمالها في المحطة.

يمكنك تعديل مهام المركبة في أي وقت، ولكن عادةً ما يتم ذلك للأغراض التالية:

  • تحديد مواعيد للمهام التي يجب إكمالها في المركبة يمكنك إجراء ذلك إما من خلال طلب تعديل يضيف محطة توقّف جديدة إلى المركبة، أو من خلال طلب تعديل يضيف مهمة جديدة إلى محطة توقّف حالية.
  • تعديل ترتيب المهام الحالية المرتبطة بمحطة توقّف معيّنة للمركبة
  • تغيير الموقع الجغرافي لإكمال المهمة بشكل تلقائي، يضع Fleet Engine علامة على الموقع الجغرافي لإكمال المهمة على أنّه الموقع الجغرافي نفسه لتوقّف المركبة المرتبط بالمهمة. إذا كنت تفضل ذلك، يمكنك تحديد مواقع محددة للمهام الفردية. على سبيل المثال، قد تتوقف مركبة عند مجمّع كبير لتسليم عدد من الحِزم، ويتم تخصيص غرفة تسليم بريد معيّنة لكل حزمة.
  • أغلِق أي مهام تم تعيينها سابقًا لاستبعادها من الترتيب المعدَّل. لمزيد من التفاصيل، يُرجى الاطّلاع على إنهاء المهام.

جدولة مهام التسليم أو تغييرها

يمكنك جدولة المهام المخصّصة لمركبة أو تغييرها من بيئة خادم أو باستخدام حزمة تطوير البرامج (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

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