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