إنهاء المهام

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

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

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

إغلاق مهمة

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

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

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

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

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

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

حقل مطلوب القيمة
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

 # 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

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