این سند فرض میکند که شما نحوه ایجاد و استفاده از وظایف را میدانید. مثالهای خاصی برای نحوه نهایی کردن وظایف حمل و نقل به شرح زیر ارائه میدهد:
بستن یک وظیفه : بستن یک وظیفه حمل و نقل، وضعیت آن را به
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;
}
استراحت
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 تنظیمات شما را در نظر میگیرد:
- محل نتیجه وظیفه : موتور ناوگان به طور خودکار محل نتیجه وظیفه را با آخرین مکان شناخته شده وسیله نقلیه پر میکند. در صورت تمایل میتوانید این مورد را وارد کنید.
- زمان نتیجه وظیفه : موتور ناوگان این فیلد را پر نمیکند، اما میتوانید آن را تنظیم کنید.
شما میتوانید از هر یک از رویکردهای زیر برای تنظیم task_outcome_location و task_outcome_time استفاده کنید:
- آنها را در همان درخواستی که نتیجه وظیفه را تعیین میکند، بهروزرسانی کنید .
- آنها را بعداً، پس از تعیین نتیجهی وظیفه، بهروزرسانی کنید .
- بعد از تنظیم، دوباره آنها را تغییر دهید .
موتور ناوگان از بهروزرسانیهای زیر مربوط به نتایج وظایف جلوگیری میکند:
- شما نمیتوانید نتیجهی یک وظیفه را زمانی که روی
SUCCEEDEDیاFAILEDتنظیم شده است، تغییر دهید. - شما نمیتوانید برای وظایفی که نتیجهی مشخصی ندارند، مکان یا زمان نتیجه تعیین کنید .
فیلدهای وظیفه برای تنظیم نتیجه
این بخش، فیلدهای الزامی و اختیاری که هنگام تنظیم نتیجه یک وظیفه باید تنظیم شوند را مستند میکند. موتور ناوگان، سایر فیلدهای موجود در موجودیت را برای بهروزرسانی نادیده میگیرد.
| فیلد مورد نیاز | ارزش |
|---|---|
taskOutcome | Outcome.SUCCEEDED یا Outcome.FAILED |
| فیلد اختیاری | ارزش |
|---|---|
taskOutcomeLocation | مکانی که وظیفه در آن تکمیل شده است. اگر تنظیم نشود، موتور ناوگان به طور پیشفرض این را روی آخرین مکان وسیله نقلیه قرار میدهد. |
taskOutcomeTime | مهر زمانی که وظیفه تکمیل شده است. |
نمونههایی از نتایج وظیفه
مثال زیر نحوه استفاده از کتابخانه جاوا 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;
}
استراحت
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