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

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

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

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