این سند فرض میکند که شما نحوه ایجاد و استفاده از تکالیف را میدانید. این بخش نمونههای خاصی را برای نحوه نهایی کردن تکالیف ارسال بهصورت زیر ارائه میدهد:
بستن تکلیف: بستن تکلیف ارسال، وضعیت آن را به
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> شناسه یکتای تکلیف است.
- سرایند درخواست باید حاوی فیلد 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