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