این سند فرض میکند که با موارد زیر آشنایی دارید:
- ایجاد تکالیف ارسال
- مقدمهای بر تکالیف زمانبندیشده که رابطه بین تکالیف، ایستگاهها، و وسایل نقلیه را با جزئیات پوشش میدهد.
در سناریو ارسال در دنیای واقعی، کسبوکارها وظایف ارسال محموله را به رانندگان واگذار میکنند، سپس رانندگان از وسیله نقلیه برای ارسال آنها به گیرنده در مکان برنامهریزیشده، مانند محل سکونت یا اتاق تحویل در مجتمع ساختمانی، استفاده میکنند. شما این را در Fleet Engine با ایجاد تکلیف و صدور درخواست بهروزرسانی خودروِ تحویل مدلسازی میکنید، که سپس موجودیت خودرو را با فهرستی از توقفها برای سفر بهروز میکند. برای هر توقف، فهرستی از تکالیف را که باید در آن توقف تکمیل شود اختصاص میدهید.
هرزمان بخواهید میتوانید تکالیف خودرو را بهروز کنید، اما معمولاً این کار را برای اهداف زیر انجام میدهید:
- تکالیف را برای خودرو زمانبندی کنید تا تکمیل کند. میتوانید این کار را با درخواست بهروزرسانی که ایستگاه جدیدی به خودرو اضافه میکند یا با درخواست بهروزرسانی که تکلیف جدیدی به ایستگاه موجود اضافه میکند انجام دهید.
- ترتیب تکالیف موجود مرتبط با توقف خودروی مشخصی را بهروز کنید.
- مکان تکمیل تکلیف را تغییر دهید. بهطور پیشفرض، Fleet Engine مکان تکمیل تکلیف را همان مکان توقف خودرو مرتبط با تکلیف علامتگذاری میکند. اگر ترجیح میدهید، میتوانید مکانهای خاصی را برای تکالیف جداگانه مشخص کنید. برای مثال، ممکن است خودرویی در مجتمعی بزرگ توقف کند تا تعدادی بسته را تحویل دهد که هرکدام به اتاق تحویل نامه خاصی اختصاص داده شده است.
- تکالیف قبلاً واگذارشده را ببندید تا در ترتیب بهروزشده قرار نگیرند. برای جزئیات، نهایی کردن تکالیف را ببینید.
زمانبندی یا تغییر تکالیف تحویل
میتوانید تکالیف اختصاصدادهشده به خودرو را از محیط سرور یا بااستفاده از Driver SDK زمانبندی یا تغییر دهید، البته اگر به راننده امکان دهید تکالیف را بااستفاده از دستگاهی مطمئن مدیریت کند. فقط از یک روش استفاده کنید تا از شرایط رقابت اجتناب کنید و منبع واحد حقیقت را حفظ کنید.
برای تغییر دادن محموله از یک خودرو به خودرو دیگر، تکلیف اصلی را ببندید و آن را قبلاز واگذار کردن به خودرو دیگر دوباره ایجاد کنید. اگر وسیله نقلیه تحویل را بهروز کنید تا شامل تکلیفی شود که قبلاً به وسیله نقلیه دیگری واگذار شده است، خطا دریافت میکنید.
فیلدهای الزامی برای بهروزرسانی تکالیف
این بخش فیلدهای الزامی را که باید هنگام بهروزرسانی تکلیف برای خودرو تنظیم شود مستند میکند. هیچ فیلد اختیاریای ارائه نشده است. موتور ناوگان همه فیلدهای دیگر در نهاد را برای بهروزرسانی نادیده میگیرد.
| قسمت الزامی | مقدار |
|---|---|
remainingVehicleJourneySegments |
فهرستی از بخشهای سفر برای تکالیف بهترتیبی که باید اجرا شوند. اولین تکلیف در فهرست ابتدا اجرا میشود. |
remainingVehicleJourneySegments[i].stop |
توقف برای تکلیف i در فهرست. |
remainingVehicleJourneySegments[i].stop.plannedLocation |
مکان برنامهریزیشده برای توقف. |
remainingVehicleJourneySegments[i].stop.tasks |
فهرست تکالیفی که باید در این توقف خودرو انجام شود. |
remainingVehicleJourneySegments[i].stop.state |
State.NEW |
نمونه اختصاص دادن تکالیف
نمونههای زیر نحوه استفاده از کتابخانه Java gRPC و فراخوانی HTTP
REST به UpdateDeliveryVehicle را برای افزودن دو تکلیف جدید برای خودرو نشان میدهد.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
static final String TASK1_ID = "task-756390";
static final String TASK2_ID = "task-849263";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // 1st stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.7749)
.setLongitude(122.4194)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
.setState(VehicleStop.State.NEW)))
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // 2nd stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.3382)
.setLongitude(121.8863)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
.setState(VehicleStop.State.NEW)))
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryRequest =
UpdateDeliveryVehicleRequest.newBuilder() // No need for the header
.setName(vehicleName)
.setDeliveryVehicle(deliveryVehicle)
.setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
.build();
try {
DeliveryVehicle updatedDeliveryVehicle =
deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} 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>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
<id> شناسه یکتایی برای خودروِ تحویل در ناوگان شما است که میخواهید ترتیب وظایف آن را بهروز کنید. این شناسه همان شناسهای است که هنگام ایجاد خودرو مشخص کردهاید.
سرایند درخواست باید حاوی فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> توسط سرور شما مطابق با دستورالعملهای شرحدادهشده در نقشهای حساب سرویس و ژتونهای وب JSON صادر شده است.
بدنه درخواست باید حاوی نهاد
DeliveryVehicleباشد
نمونه فرمان curl:
# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"remainingVehicleJourneySegments": [
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.7749,
"longitude": -122.084061
}
},
"tasks": [
{
"taskId": "${TASK1_ID}"
}
]
}
},
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM