إنهاء المهام

يفترض هذا المستند أنّك تفهم كيفية إنشاء المهام واستخدامها. تقدّم هذه المقالة أمثلة محدّدة حول كيفية إكمال مهام الشحن على النحو التالي:

  • إغلاق مهمة: يؤدي إغلاق مهمة شحن إلى تغيير حالتها إلى CLOSED ويشير إلى أنّ هذه المهمة لم تعُد نشطة.

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

إغلاق مهمة

يمكنك إغلاق مهمة بالطرق التالية:

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

بعد إغلاق مهمة، قد لا تتمكّن من إعادة فتحها.

إنّ إغلاق مهمة لا يشير إلى نجاحها أو تعذّرها. ويشير ذلك إلى أنّه لم يعُد يتم اعتبار المهمة قيد التقدّم. للإشارة إلى نتيجة مهمة معيّنة وعرضها لأغراض تتبُّع الأسطول ومشاركة الرحلات، عليك الإشارة إلى النتيجة الفعلية للمهمة. اطّلِع على ضبط نتيجة المهمة أدناه.

حقول المهام لإغلاق المهام

يوثّق هذا القسم الحقول المطلوبة التي يجب ضبطها عند إغلاق مهمة. يتجاهل محرّك "مجموعة الأجهزة" جميع الحقول الأخرى في الكيان المراد تعديله.

حقل مطلوب القيمة
state State.CLOSED

إغلاق مهمة مباشرةً

توضِّح الأمثلة التالية كيفية ضبط مهمة غير مخصّصة على الحالة "مغلقة"، إما في gRPC أو باستخدام طلب HTTP REST للاتصال بخدمة UpdateTask.

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setState(Task.State.CLOSED) // You can only directly CLOSE a
   .build();                    // task that is NOT assigned to a vehicle.

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } 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>/tasks/<id>?updateMask=state

مثال على طلب curl:

 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "state": "CLOSED",
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
 }
 EOM

ضبط نتيجة المهمة

للإشارة إلى النتيجة الفعلية للمهمة، يمكنك ضبط النتيجة للمهام المغلقة على SUCCEEDED أو FAILED. يجب إغلاق المهمة قبل ضبط نتيجتها. لا تحصّل Fleet Engine رسومًا إلا مقابل مهام التسليم التي تكون حالتها SUCCEEDED.

تفاصيل نتيجة المهمة

توفّر المهام أيضًا تفاصيل إضافية حول نتيجة المهمة. يمكنك ضبط هذه الإعدادات مباشرةً، وستلتزم أداة Fleet Engine بإعداداتك:

  • الموقع الجغرافي لنتيجة المهمة: يملؤه "محرك الأسطول" تلقائيًا باستخدام آخر موقع جغرافي معروف للمركبة. يمكنك تقديم هذا العنوان بدلاً من ذلك إذا أردت.
  • وقت نتيجة المهمة: لا تملأ أداة Fleet Engine هذا الحقل، ولكن يمكن ضبطه.

يمكنك استخدام أيّ من الطرق التالية لضبط task_outcome_location وtask_outcome_time:

  • عدِّلها في الطلب نفسه الذي يحدّد نتيجة المهمة.
  • تعديلها لاحقًا، بعد ضبط نتيجة المهمة
  • تعديلها مرة أخرى بعد ضبطها

يمنع Fleet Engine التعديلات التالية المرتبطة بنتائج المهام:

  • لا يمكنك تعديل نتيجة مهمة بعد ضبطها على SUCCEEDED أو FAILED.
  • لا يمكنك ضبط موقع جغرافي أو وقت نتيجة مهمة للمهام التي لا تتضمّن نتيجة محدّدة.

حقول المهام لتحديد النتيجة

يوثّق هذا القسم الحقول المطلوبة والاختيارية التي يجب ضبطها عند ضبط نتيجة مهمة. يتجاهل Fleet Engine الحقول الأخرى في الكيان المراد تعديله.

حقل مطلوب القيمة
taskOutcome Outcome.SUCCEEDED أو Outcome.FAILED

حقل اختياريالقيمة
taskOutcomeLocation الموقع الجغرافي الذي اكتملت فيه المهمة إذا لم يتم ضبطه، يضبط Fleet Engine هذا الإعداد تلقائيًا على آخر موقع جغرافي للمركبة.
taskOutcomeTime الطابع الزمني الذي اكتملت فيه المهمة

أمثلة على نتائج المهام

يوضّح المثال التالي كيفية استخدام مكتبة Java gRPC وطلب HTTP REST إلى UpdateTask لضبط نتيجة المهمة على SUCCEEDED وضبط الموقع الجغرافي الذي اكتملت فيه المهمة.

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setTaskOutcome(TaskOutcome.SUCCEEDED)
   .setTaskOutcomeTime(now())
   .setTaskOutcomeLocation(               // Grand Indonesia East Mall
     LocationInfo.newBuilder().setPoint(
       LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
   .build();

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } 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>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation

 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
   "taskOutcomeLocation": {
     "point": {
       "latitude": -6.195139,
       "longitude": 106.820826
     }
   }
 }
 EOM

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