این سند مستلزم آشنایی با موارد زیر است:
- وظایف حمل و نقل را ایجاد کنید
- مقدمه ای بر وظایف برنامه ریزی شده ، که رابطه بین وظایف، توقف ها و وسایل نقلیه را به تفصیل پوشش می دهد.
همانطور که در وظایف برنامه ریزی شده در Fleet Engine Essentials بیان شد، شما وظایفی را ایجاد می کنید و آنها را با توقف وسیله نقلیه به عنوان راهی برای مدل سازی ارتباط واقعی بین کار و مکانی که خودرو انتظار می رود در آن توقف کند، ایجاد می کنید تا راننده بتواند آن را کامل کند. وظیفه
از آنجا، با ارسال بهروزرسانیها به Fleet Engine، پیشرفت کارها را در طول چرخه عمر آنها مدیریت میکنید تا بتواند مسیریابی و بهروزرسانیهای وضعیت را در طول سفر انجام دهد. یکی از راههای کلیدی برای انجام این کار، بهروزرسانی توقف خودرو هنگام نزدیک شدن، رسیدن و خروج خودرو از ایستگاه است. این امکان گزارش و تجزیه و تحلیل در مورد پیشرفت کار را برای اپراتورهای ناوگان و کاربران نهایی فراهم می کند. این به روز رسانی های وضعیت به شرح زیر است:
- در مسیر : فهرست
STATE
برایVehicleStop
ازENROUTE
استفاده می کند تا نشان دهد که توقف در لیست برنامه سفر خودرو قرار دارد. از منظر کار، به این معنی است که هر کار مرتبط با توقف در لیست بعدی است که باید تکمیل شود. - وارد شده : فهرست
STATE
برایVehicleStop
ازARRIVED
استفاده می کند تا نشان دهد که وسیله نقلیه به ایستگاه رسیده است. از منظر وظیفه، به این معنی است که هر کار مرتبط با توقف فعالانه روی آن کار می شود. - تکمیل شده : یک توقف کامل را با حذف آن از لیست توقف های وسیله نقلیه مشخص می کنید. هنگامی که این کار را انجام می دهید، Fleet Engine به طور خودکار تمام وظایف مرتبط را به عنوان بسته علامت گذاری می کند. برای جزئیات بیشتر درباره بستن کارها، به نهایی کردن وظایف مراجعه کنید.
این سند نحوه بهروزرسانی وضعیت توقف با استفاده از رویکردهای سمت سرور را توضیح میدهد. همچنین میتوانید این کار را از برنامه درایور خود انجام دهید، اگر به راننده امکان مدیریت وظایف با استفاده از یک دستگاه قابل اعتماد را بدهید. فقط از یک روش استفاده کنید تا از شرایط مسابقه اجتناب کنید و یک منبع حقیقت را حفظ کنید.
وسیله نقلیه برای توقف در مسیر است
هنگامی که وسیله نقلیه ناوبری را به ایستگاه بعدی آغاز کرد، سیستم شما باید به Fleet Engine اطلاع دهد. این امر محاسبات ETA و مسیر را بهبود می بخشد.
فیلدهای لازم برای توقف به روز رسانی
Fleet Engine تمام فیلدهای دیگر موجودیت را برای اعلان نادیده می گیرد.
میدان | ارزش |
---|---|
remainingVehicleJourneySegments | فهرست توقفهای خودروی باقیمانده با ایالتهای آنها بهعنوان State.NEW علامتگذاری شده است. |
مثال در مسیر توقف
مثالهای زیر نشان میدهند که چگونه میتوان به Fleet Engine اطلاع داد که وسیله نقلیه به ایستگاه بعدی خود میرود، با استفاده از کتابخانه Java gRPC یا یک فراخوان HTTP REST به UpdateDeliveryVehicle
. همه ایستگاههای دیگر بهعنوان جدید علامتگذاری شدهاند.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// Next stop marked as ENROUTE
.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.ENROUTE)))
// All other stops marked as 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 updateDeliveryVehicleRequest =
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> یک شناسه منحصر به فرد برای کار است.
- سرصفحه درخواست باید حاوی یک فیلد مجوز با مقدار حامل <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": "ENROUTE",
"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
خودرو در ایستگاه می رسد
هنگام رسیدن وسیله نقلیه به ایستگاه باید به موتور ناوگان اطلاع داده شود.
فیلدهای لازم برای توقف به روز رسانی
Fleet Engine تمام فیلدهای دیگر موجود در اعلان را نادیده می گیرد.
میدان | ارزش |
---|---|
remainingVehicleJourneySegments | فهرست توقفهای خودروهای باقیمانده با ایالتهایشان که بهعنوان State.NEW علامتگذاری شدهاند. |
به مثال توقف می رسد
مثالهای زیر نشان میدهند که چگونه میتوان به Fleet Engine اطلاع داد که یک وسیله نقلیه به ایستگاه رسیده است، با استفاده از کتابخانه Java gRPC یا یک تماس HTTP REST به UpdateDeliveryVehicle
. تمام ایستگاه های دیگر به عنوان جدید علامت گذاری شده اند.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// Marking the arrival at stop.
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.7749)
.setLongitude(122.4194)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
.setState(VehicleStop.State.ARRIVED)))
// All other remaining stops marked as 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))) // Remaining stops must be NEW.
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
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> یک شناسه منحصر به فرد برای کار است.
- سرصفحه درخواست باید حاوی یک فیلد مجوز با مقدار حامل <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": "ARRIVED",
"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
خودرو توقف کامل می کند
هنگام توقف خودرو باید به موتور ناوگان اطلاع داده شود. این باعث می شود که تمام وظایف مرتبط با توقف در حالت بسته تنظیم شوند.
فیلدهای لازم برای توقف به روز رسانی
Fleet Engine تمام فیلدهای دیگر موجود در اعلان را نادیده می گیرد.
میدان | ارزش |
---|---|
remainingVehicleJourneySegments | فهرست توقفهای خودروی باقیمانده با ایالتهای آنها بهعنوان State.NEW علامتگذاری شده است. اولین ایستگاه در لیست باید دارای وضعیت آن با عنوان State.ENROUTE باشد. |
یک مثال توقف را کامل می کند
مثالهای زیر نشان میدهند که چگونه میتوان به Fleet Engine اطلاع داد که یک وسیله نقلیه به ایستگاه رسیده است، با استفاده از کتابخانه Java gRPC یا یک تماس HTTP REST به UpdateDeliveryVehicle
. تمام ایستگاه های دیگر به عنوان جدید علامت گذاری شده اند.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// This stop has been completed and is commented out to indicate it
// should be removed from the list of vehicle journey segments.
// .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
// .setStop(VehicleStop.newBuilder()
// .setPlannedLocation(LocationInfo.newBuilder()
// .setPoint(LatLng.newBuilder()
// .setLatitude(37.7749)
// .setLongitude(122.4194)))
// .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
// .setState(VehicleStop.State.ARRIVED)))
// All other remaining stops marked as NEW.
// The next stop could be marked as ENROUTE if the vehicle has begun
// its journey to the next stop.
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // Next 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 updateDeliveryVehicleRequest =
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=remaining_vehicle_journey_segments`
- <id> یک شناسه منحصر به فرد برای کار است.
- سرصفحه درخواست باید حاوی یک فیلد مجوز با مقدار حامل <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.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM