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