إنهاء المهام

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

  • إغلاق مهمة: يؤدي إغلاق مهمة شحن إلى تغيير حالتها إلى 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 تلقائيًا موقع نتائج المهمة بآخر موقع معروف للمركبة. يمكنك توفير هذه المعلومات بدلاً من ذلك إذا كنت تفضّل ذلك.
  • وقت نتيجة المهمة: لا تملأ 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

  • &lt;id&gt; هو معرّف فريد للمهمة.
  • يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) بالقيمة Bearer <token>، حيث يصدر الخادم <token> وفقًا للإرشادات الموضّحة في أدوار حساب الخدمة ورموز JSON المميّزة للويب.
  • يجب أن يحتوي نص الطلب على كيان Task.
 # 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

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