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