این سند فرض میکند که راهنمای مقدماتی تکالیف زمانبندیشده را در بخش مقدمهای بر Fleet Engine و همچنین تکلیف زمانبندیشده چیست؟ را در این بخش خواندهاید.
Fleet Engine برای کارهای زمانبندیشده، دستههای گسترده مختلفی از کارها را ارائه میدهد:
- مأموریتهای مرسوله: برای مأموریتهای رانندگی، ازجمله تحویل گرفتن و تحویل دادن مرسولهها، استفاده میشود.
- تکالیف عدم دسترسی: برای زمانهایی که رانندگان دردسترس نیستند، مانند استراحتهای الزامی، استفاده میشود.
- تکالیف توقف زمانبندیشده: برای تکالیف غیررانندگی در صندوقهای تحویل یا مکانهای مشتری استفاده میشود، مانند زمان ورود به ساختمان یا پیدا کردن نقطه تحویل.
این سند نحوه ایجاد تکالیف غیرارسال را در سرور شما پوشش میدهد. برای انواع مأموریت مرسوله، ایجاد مأموریت مرسوله را ببینید.
فیلدهای تکلیف برای تکالیف غیررانندگی
این بخش فیلدهای تکلیف موردنیاز برای هر دو تکلیف توقف زمانبندیشده و عدمدسترسی را مستند میکند.
فیلدهای الزامی تکلیف
برای هر تکلیفی که در Fleet Engine ایجاد میکنید، باید فیلدهای الزامی را ارائه دهید و همچنین میتوانید هریک از فیلدهای اختیاری را ارائه دهید. Fleet Engine
همه فیلدهای دیگر را نادیده میگیرد و اگر درخواست ایجاد تکلیف
deliveryVehicleId واگذارشدهای ارائه دهد، استثنا قائل میشود. برای واگذار کردن تکالیف به خودرو،
از UpdateDeliveryVehicleRequest استفاده کنید. برای اطلاعات بیشتر، به
بهروزرسانی تکالیف مراجعه کنید.
| فیلد | مقدار |
|---|---|
type |
روی نوعی تنظیم کنید که با نوع تکلیف مطابقت داشته باشد، که یکی از موارد زیر است:
|
state |
State.OPEN |
task_id |
شناسه تکلیف یکتا. این شماره نباید شماره ردگیری محموله باشد. اگر شناسه تکلیف در سیستم خود ندارید، میتوانید شناسه منحصربهفرد جهانی (UUID) تولید کنید. برای جزئیات، شناسههای تکلیف را ببینید. |
tracking_id |
فقط برای کارهای PICKUP یا DELIVERY:
شماره یا شناسهای که برای پیگیری محموله استفاده میکنید. این فیلد را برای تکالیف غیرارسال ارائه نکنید. |
planned_location |
فقط برای تکالیف PICKUP، DELIVERY، یا
SCHEDULED_STOP: مکانی که تکلیف باید در آن تکمیل شود. برای تکالیف
UNAVAILABLE لازم نیست. |
task_duration |
زمان موردانتظار برای افزودن جهت تکمیل تکلیف. برای مثال، برای پیدا کردن پارکینگ یا پیاده رفتن به محل تحویل. |
فیلدهای اختیاری تکلیف ارسال کالا
| فیلد | مقدار |
|---|---|
target_time_window |
بازه زمانی که تکلیف باید در آن تکمیل شود. این فیلد بر رفتار مسیریابی تأثیری ندارد. |
task_tracking_view_config |
فقط تکالیف PICKUP یا DELIVERY:
پیکربندی ردگیری تکلیف که مشخص میکند کدام عناصر داده
تحت چه شرایطی برای کاربران نهایی قابلمشاهده هستند. |
attributes |
فهرستی از مشخصههای تکلیف سفارشی. هر مشخصه باید کلید یکتایی داشته باشد. |
ایجاد تکلیف عدم دردسترس بودن
میتوانید تکلیفی ایجاد کنید که نشاندهنده عدم دردسترس بودن باشد؛ برای مثال، برای استراحت راننده. برای ایجاد تکلیف عدمدسترسی، از دستورالعملهای زیر استفاده کنید:
- نوع تکلیف را روی
UNAVAILABLEتنظیم کنید. - شناسه رهگیری را وارد نکنید.
- اگرچه لازم نیست برای تکلیف عدمدسترسی مکان ارائه دهید، انجام این کار باعث بهبود محاسبات زمان تخمینی رسیدن درطول روز میشود.
قوانین رؤیتپذیری ویژهای برای مکان خودرو اعمال میشود وقتی که خودرو درحال انجام تکلیف
UNAVAILABLE برای همرسانی سفر باشد.
- برنامههای مصرفکننده ادغامشده با کتابخانه «ردیابی محموله»: وقتی خودرو درحال انجام وظیفه عدمدسترسی است، کاربران برنامه مصرفکننده نمیتوانند مکان خودرو را ببینند، اگرچه همچنان میتوانند اطلاعات وضعیت محموله خود را مشاهده کنند.
- برنامههای ردیابی ناوگان ادغامشده با کتابخانه «ردیابی ناوگان»: وقتی خودرو درحال انجام وظیفه عدمدسترسی است، مدیران ناوگان که از برنامه ردیابی ناوگان استفاده میکنند میتوانند مکان خودرو را برای وظایف عدمدسترسی ببینند.
نمونههای زیر نحوه ایجاد تکلیف عدم دسترسی زمانبندیشده را بااستفاده از
کتابخانه Java gRPC یا نحوه ایجاد درخواست HTTP REST به
CreateTask نشان میدهد.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
.setType(Task.Type.UNAVAILABLE)
.setState(Task.State.OPEN)
.setTaskDuration(
Duration.newBuilder().setSeconds(60 * 60)) // 1hr break
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent) // Avoid using auto-incrementing IDs for the taskId
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTask(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
```
REST
برای ایجاد تکلیف عدمدسترسی از محیط سرور،
فراخوانی HTTP REST به CreateTask انجام دهید:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id><id> شناسه یکتای تکلیف است.
سرایند درخواست باید حاوی فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> توسط سرور شما مطابق با دستورالعملهای شرحدادهشده در نقشهای حساب سرویس و ژتونهای وب JSON صادر شده است.
بدنه درخواست باید حاوی نهاد Task با فیلدهای مناسب
شرحدادهشده در فیلدهای تکلیف برای تکالیف غیررانندگی باشد.
نمونه فرمان curl:
# Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"type": "UNAVAILABLE",
"state": "OPEN",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "300s"
}
EOMایجاد تکلیف توقف زمانبندیشده
میتوانید برای توقف زمانبندیشده تکلیف ایجاد کنید؛ برای مثال، برای تکالیف غیررانندگی در مکانهای مشتری، برای توقفهای سوختگیری، یا برای زمانی که راننده محمولهها را از خودرو تغذیهکننده دریافت میکند. وقتی تکلیف توقف زمانبندیشده ایجاد میکنید، از رهنمودهای زیر استفاده کنید:
- تنظیم نوع تکلیف روی
- شناسه رهگیری را وارد نکنید.
- درصورت تمایل میتوانید مکان را ارائه دهید.
نمونههای زیر نحوه ایجاد تکلیف عدم دسترسی زمانبندیشده را بااستفاده از
کتابخانه Java gRPC یا نحوه ایجاد درخواست HTTP REST به
CreateTask نشان میدهد.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
.setType(Task.Type.SCHEDULED_STOP)
.setState(Task.State.OPEN)
.setPlannedLocation( // Grand Indonesia East Mall
LocationInfo.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setTaskDuration(
Duration.newBuilder().setSeconds(2 * 60))
.build();
// Task request
CreateTaskRequest createTaskRequest =
CreateTaskRequest.newBuilder() // No need for the header
.setParent(parent)
.setTaskId("task-8241890") // Task ID assigned by the Provider
.setTrip(task) // Initial state
.build();
// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.
try {
Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
```
REST
برای ایجاد تکلیف توقف زمانبندیشده از محیط سرور،
فراخوانی HTTP REST به CreateTask انجام دهید:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id><id> شناسه یکتای تکلیف است.
سرایند درخواست باید حاوی فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> توسط سرور شما مطابق با دستورالعملهای شرحدادهشده در نقشهای حساب سرویس و ژتونهای وب JSON صادر شده است.
بدنه درخواست باید حاوی نهاد Task باشد:
نمونه فرمان curl:
# Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"type": "SCHEDULED_STOP",
"state": "OPEN",
"plannedLocation": {
"point": {
"latitude": -6.195139,
"longitude": 106.820826
}
},
"taskDuration": "600s"
}
EOM