يفترض هذا المستند أنك تفهم كيفية إنشاء المهام واستخدامها. تقدّم هذه المقالة أمثلة محدّدة حول كيفية إكمال مهام الشحن على النحو التالي:
إغلاق مهمة: يؤدي إغلاق مهمة شحن إلى تغيير حالتها إلى
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
- <id> هو معرّف فريد للمهمة.
- يجب أن يحتوي رأس الطلب على حقل Authorization بالقيمة Bearer <token>، حيث يُصدر خادمك <token> وفقًا للإرشادات الموضّحة في أدوار حسابات الخدمة و الرموز المميّزة الخاصة بالويب JSON.
- يجب تضمين كيان
Task
في نص الطلب
مثال على الطلب 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
- <id> هو معرّف فريد للمهمة.
- يجب أن يحتوي عنوان الطلب على الحقل 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