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

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

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

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

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

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

يمكنك جدولة المهام المُسنَدة إلى مركبة أو تغييرها إما من بيئة خادم أو باستخدام Driver 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

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