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

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

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

راحة

 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

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