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

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

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

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

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