এই নথিটি নিম্নলিখিত বিষয়গুলির সাথে পরিচিতি আছে বলে ধরে নেয়:
- চালানের কাজ তৈরি করুন
- নির্ধারিত কাজসমূহের ভূমিকা, যেখানে কাজ, বিরতি এবং যানবাহনের মধ্যকার সম্পর্ক বিস্তারিতভাবে আলোচনা করা হয়েছে।
বাস্তব ডেলিভারি পরিস্থিতিতে, ব্যবসা প্রতিষ্ঠানগুলো ড্রাইভারদেরকে ডেলিভারি শিপমেন্টের কাজ দেয়, যারা এরপর একটি যানবাহন ব্যবহার করে প্রাপকের কাছে একটি পরিকল্পিত স্থানে, যেমন কোনো বাসস্থান বা কোনো বিল্ডিং কমপ্লেক্সের ডেলিভারি রুমে, সেই পণ্য পৌঁছে দেয়। ফ্লিট ইঞ্জিনে আপনি একটি টাস্ক তৈরি করে এবং একটি ডেলিভারি ভেহিকেল আপডেট রিকোয়েস্ট জারি করার মাধ্যমে এর মডেল তৈরি করেন, যা পরবর্তীতে যাত্রাপথের স্টপগুলোর একটি তালিকা দিয়ে ভেহিকেল এনটিটি-কে আপডেট করে। আপনি প্রতিটি স্টপকে সেখানে সম্পন্ন করার জন্য কাজের একটি তালিকা নির্ধারণ করে দেন।
আপনি যেকোনো সময় গাড়ির কাজগুলো আপডেট করতে পারেন, তবে সাধারণত নিম্নলিখিত উদ্দেশ্যগুলোর জন্য এটি করা হয়:
- একটি যানবাহনের জন্য কাজ নির্ধারণ করুন । আপনি এটি একটি আপডেট অনুরোধের মাধ্যমে করতে পারেন যা যানবাহনটিতে একটি নতুন স্টপ যোগ করে, অথবা একটি আপডেট অনুরোধের মাধ্যমে করতে পারেন যা বিদ্যমান স্টপে একটি নতুন কাজ যোগ করে।
- একটি নির্দিষ্ট যানবাহন থামানোর সাথে যুক্ত বিদ্যমান কাজগুলোর ক্রম হালনাগাদ করুন ।
- টাস্ক সমাপ্তির স্থান পরিবর্তন করুন। ডিফল্টরূপে, ফ্লিট ইঞ্জিন টাস্ক সমাপ্তির স্থান হিসেবে সেই স্থানটিকেই চিহ্নিত করে, যেখানে টাস্কটির সাথে যানবাহনটি থামে। আপনি চাইলে, প্রতিটি টাস্কের জন্য নির্দিষ্ট স্থান নির্ধারণ করে দিতে পারেন। উদাহরণস্বরূপ, বেশ কিছু প্যাকেজ ডেলিভারি করার জন্য আপনার একটি যানবাহন একটি বড় কমপ্লেক্সে থামতে পারে, যার প্রত্যেকটির জন্য একটি নির্দিষ্ট মেইল ডেলিভারি রুম বরাদ্দ করা আছে।
- আপডেট করা ক্রমবিন্যাস থেকে বাদ রাখতে পূর্বে নির্ধারিত যেকোনো কাজ বন্ধ করুন । বিস্তারিত জানতে 'কাজ চূড়ান্ত করুন' দেখুন।
ডেলিভারি টাস্কের সময়সূচী বা পরিবর্তন করুন
আপনি সার্ভার পরিবেশ থেকে, অথবা ড্রাইভার SDK ব্যবহার করে একটি যানবাহনে নির্ধারিত কাজগুলোর সময়সূচী তৈরি করতে বা পরিবর্তন করতে পারেন, যদি আপনি ড্রাইভারকে একটি বিশ্বস্ত ডিভাইস ব্যবহার করে কাজগুলো পরিচালনা করার ক্ষমতা প্রদান করেন। শুধুমাত্র একটি পদ্ধতি ব্যবহার করুন, যাতে আপনি রেস কন্ডিশন এড়াতে পারেন এবং তথ্যের একটি একক উৎস বজায় রাখতে পারেন।
একটি চালান এক যানবাহন থেকে অন্য যানবাহনে পরিবর্তন করতে, মূল কাজটি বন্ধ করুন এবং অন্য যানবাহনে বরাদ্দ করার আগে এটি পুনরায় তৈরি করুন। যদি আপনি একটি ডেলিভারি যানবাহন আপডেট করে এমন একটি কাজ অন্তর্ভুক্ত করেন যা ইতিমধ্যেই অন্য একটি যানবাহনে বরাদ্দ করা আছে, তাহলে আপনি একটি ত্রুটি পাবেন।
টাস্ক আপডেট করার জন্য প্রয়োজনীয় ফিল্ড
এই বিভাগে একটি গাড়ির টাস্ক আপডেট করার সময় যে ফিল্ডগুলো সেট করতে হবে, তা নথিভুক্ত করা হয়েছে। কোনো ঐচ্ছিক ফিল্ড দেওয়া হয়নি। আপডেটের জন্য ফ্লিট ইঞ্জিন এনটিটির অন্য সব ফিল্ড উপেক্ষা করে।
| প্রয়োজনীয় ক্ষেত্র | মূল্য |
|---|---|
remainingVehicleJourneySegments | কাজগুলো সম্পাদনের ক্রম অনুসারে সেগুলোর যাত্রাপথের অংশগুলোর একটি তালিকা। তালিকার প্রথম কাজটি প্রথমে সম্পাদন করা হয়। |
remainingVehicleJourneySegments[i].stop | তালিকায় থাকা টাস্ক i- এর জন্য বিরতি। |
remainingVehicleJourneySegments[i].stop.plannedLocation | থামার জন্য পরিকল্পিত স্থান। |
remainingVehicleJourneySegments[i].stop.tasks | এই যানবাহন থামানোর স্থানে করণীয় কাজগুলোর একটি তালিকা। |
remainingVehicleJourneySegments[i].stop.state | State.NEW |
কাজ বরাদ্দ করার উদাহরণ
নিম্নলিখিত উদাহরণগুলিতে দেখানো হয়েছে কিভাবে জাভা gRPC লাইব্রেরি এবং UpdateDeliveryVehicle এ একটি HTTP REST কল ব্যবহার করে যানবাহনটির জন্য দুটি নতুন টাস্ক যোগ করা যায়।
জিআরপিসি
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> টি আপনার সার্ভার দ্বারা Service account roles and JSON Web tokens -এ বর্ণিত নির্দেশিকা অনুসারে ইস্যু করা হয়।
অনুরোধের মূল অংশে অবশ্যই একটি
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