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