টাস্ক চূড়ান্ত করুন

এই ডকুমেন্ট ধরে নেয় যে আপনি টাস্ক তৈরি ও ব্যবহার করার পদ্ধতি জানেন। এটি শিপমেন্ট টাস্ক কীভাবে সম্পূর্ণ করতে হয় তার নির্দিষ্ট উদাহরণ প্রদান করে:

  • টাস্ক বন্ধ করা: শিপমেন্ট টাস্ক বন্ধ করলে সেটির স্ট্যাটাস CLOSED-এ পরিবর্তিত হয় এবং বোঝায় যে টাস্কটি আর অ্যাক্টিভ নেই।

  • টাস্কের ফলাফল সেট করা: কোনও টাস্ক বন্ধ হয়ে গেলে, আপনি সেটির ফলাফল SUCCEEDED বা FAILED হিসেবে সেট করে চূড়ান্ত করতে পারেন। এটি কোনও টাস্ক সম্পূর্ণ করার একটি গুরুত্বপূর্ণ অংশ, যাতে জার্নি শেয়ারিংয়ে ডেলিভারির ফলাফল দেখানো যায় এবং ফ্লিট ইঞ্জিন পরিষেবার জন্য সঠিক বিলিং নিশ্চিত করা যায়।

টাস্ক বন্ধ করা

আপনি নিম্নলিখিত উপায়ে টাস্ক বন্ধ করতে পারবেন:

  • গাড়ির স্টপ স্ট্যাটাস আপডেট করুন। আপনি গাড়ি থেকে স্টপ সরিয়ে দেন, যার ফলে স্টপের সাথে যুক্ত সব টাস্ক বন্ধ হয়ে যায়। আরও জানতে স্টপের স্ট্যাটাস আপডেট করুন।
  • গাড়ি থামার জায়গার তালিকা থেকে টাস্কটি সরিয়ে দিন। এর মধ্যে স্টপের জন্য টাস্কের তালিকা আপডেট করা অন্তর্ভুক্ত, তবে বন্ধ করা টাস্কটি আর তালিকার অংশ নয়। টাস্ক আপডেট করুন বিকল্পে গিয়ে টাস্কের ক্রম আপডেট করুন।
  • টাস্কের স্ট্যাটাস CLOSED হিসেবে সেট করুন। এটি শুধুমাত্র সেইসব টাস্কের ক্ষেত্রে করা যাবে যেগুলি গাড়িতে অ্যাসাইন করা হয়নি। এই বিভাগে এই পদ্ধতি দেখানো হয়েছে।

আপনি কোনও টাস্ক বন্ধ করে দিলে, সেটি আর খুলতে পারবেন না।

কোনও টাস্ক বন্ধ করার অর্থ এই নয় যে সেটি সফল বা ব্যর্থ হয়েছে। এটি ইঙ্গিত করে যে টাস্কটি আর প্রোগ্রেসে আছে বলে বিবেচনা করা হয় না। কোনও টাস্কের আসল ফলাফল নির্দেশ করতে এবং ফ্লিট ট্র্যাকিং ও জার্নি শেয়ারিংয়ের উদ্দেশ্যে সেটি দেখানোর জন্য, আপনাকে অবশ্যই কোনও টাস্কের আসল ফলাফল নির্দেশ করতে হবে। নিচে টাস্কের ফলাফল সেট করুন বিকল্পটি দেখুন।

টাস্ক বন্ধ করার জন্য টাস্ক ফিল্ড

এই বিভাগে কোনও টাস্ক বন্ধ করার সময় প্রয়োজনীয় ফিল্ড সেট করার জন্য ডকুমেন্ট করা হয়। আপডেটের জন্য এন্টিটির অন্যান্য সব ফিল্ড Fleet Engine উপেক্ষা করে।

প্রয়োজনীয় ফিল্ড ভ্যালু
state State.CLOSED

সরাসরি কোনও টাস্ক বন্ধ করা

gRPC-তে অথবা UpdateTask-এ HTTP REST অনুরোধ কল ব্যবহার করে, অ্যাসাইন না করা টাস্ক কীভাবে বন্ধ করা যায় তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setState(Task.State.CLOSED) // You can only directly CLOSE a
   .build();                    // task that is NOT assigned to a vehicle.

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } 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>/tasks/<id>?updateMask=state

  • <id> হল টাস্কের জন্য অনন্য শনাক্তকারী।
  • রিকোয়েস্ট হেডারে অবশ্যই Authorization ফিল্ড থাকতে হবে যার ভ্যালু হবে Bearer <token>, যেখানে <token> আপনার সার্ভার ইস্যু করেছে পরিষেবা অ্যাকাউন্ট রোল এবং JSON ওয়েব টোকেন-এ বর্ণিত নির্দেশিকা অনুযায়ী।
  • অনুরোধের বডিতে আপনাকে অবশ্যই একটি Task এন্টিটি অন্তর্ভুক্ত করতে হবে

curl কমান্ডের উদাহরণ:

 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "state": "CLOSED",
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
 }
 EOM

টাস্কের ফলাফল সেট করুন

কোনও টাস্কের আসল ফলাফল দেখাতে, আপনি বন্ধ করা টাস্কের ফলাফল SUCCEEDED বা FAILED-এর মধ্যে যেকোনও একটিতে সেট করেন। কোনও টাস্কের ফলাফল সেট করার আগে সেটি বন্ধ করতে হবে। Fleet Engine শুধুমাত্র ডেলিভারি টাস্কের জন্য চার্জ করে যার স্ট্যাটাস হল SUCCEEDED।

টাস্কের ফলাফল সংক্রান্ত বিবরণ

এছাড়াও, টাস্কের ফলাফল সম্পর্কে অতিরিক্ত বিবরণ টাস্ক থেকে পাওয়া যায়। আপনি সরাসরি এগুলি সেট করতে পারেন এবং Fleet Engine আপনার সেটিংস মেনে চলে:

  • টাস্কের ফলাফল সংক্রান্ত লোকেশন: Fleet Engine অটোমেটিক টাস্কের ফলাফল সংক্রান্ত লোকেশন গাড়ির শেষ জানা লোকেশন দিয়ে পূরণ করে। আপনি চাইলে এর পরিবর্তে এটি দিতে পারেন।
  • টাস্কের ফলাফল সংক্রান্ত সময়: Fleet Engine এই ফিল্ড পূরণ করে না, তবে আপনি এটি সেট করতে পারবেন।

task_outcome_location এবং task_outcome_time সেট করার জন্য আপনি নিম্নলিখিত যেকোনও পদ্ধতি ব্যবহার করতে পারেন:

  • টাস্কের ফলাফল সেট করে এমন একই অনুরোধে সেগুলি আপডেট করুন।
  • টাস্কের ফলাফল সেট করার পরে সেগুলি পরে আপডেট করুন।
  • সেট করার পরে সেগুলি আবার পরিবর্তন করুন।

Fleet Engine, টাস্কের ফলাফল সম্পর্কিত নিম্নলিখিত আপডেটগুলি প্রতিরোধ করে:

  • কোনও টাস্কের ফলাফল একবার সেট করা হয়ে গেলে আপনি তা পরিবর্তন করতে পারবেন না, এটি হয় SUCCEEDED অথবা FAILED হবে।
  • আপনি টাস্কের ফলাফল লোকেশন বা ফলাফল সময় সেট করতে পারবেন না, যদি না টাস্কের ফলাফল সেট করা থাকে।

ফলাফল সেট করার জন্য টাস্ক ফিল্ড

এই বিভাগে টাস্কের ফলাফল সেট করার সময় প্রয়োজনীয় ও ঐচ্ছিক ফিল্ডের ডকুমেন্টেশন করা হয়। আপডেটের জন্য Fleet Engine এন্টিটির অন্যান্য ফিল্ড উপেক্ষা করে।

প্রয়োজনীয় ফিল্ড ভ্যালু
taskOutcome Outcome.SUCCEEDED বা Outcome.FAILED

ঐচ্ছিক ফিল্ডভ্যালু
taskOutcomeLocation যে লোকেশনে টাস্কটি সম্পূর্ণ করা হয়েছে। সেট করা না থাকলে, Fleet Engine ডিফল্ট হিসেবে এটিকে গাড়ির শেষ লোকেশন হিসেবে সেট করে।
taskOutcomeTime টাস্কটি সম্পূর্ণ হওয়ার টাইমস্ট্যাম্প।

টাস্কের ফলাফলের উদাহরণ

SUCCEEDED-এ টাস্কের ফলাফল সেট করতে এবং টাস্কটি যেখানে সম্পূর্ণ হয়েছে সেই লোকেশন সেট করতে, Java gRPC লাইব্রেরি এবং UpdateTask-এ HTTP REST কল কীভাবে ব্যবহার করবেন তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে।

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setTaskOutcome(TaskOutcome.SUCCEEDED)
   .setTaskOutcomeTime(now())
   .setTaskOutcomeLocation(               // Grand Indonesia East Mall
     LocationInfo.newBuilder().setPoint(
       LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
   .build();

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } 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>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation

  • <id> হল টাস্কের জন্য অনন্য শনাক্তকারী।
  • রিকোয়েস্ট হেডারে অবশ্যই Authorization ফিল্ড থাকতে হবে যার ভ্যালু হবে Bearer <token>, যেখানে <token> আপনার সার্ভার ইস্যু করেছে পরিষেবা অ্যাকাউন্ট রোল এবং JSON ওয়েব টোকেন-এ বর্ণিত নির্দেশিকা অনুযায়ী।
  • অনুরোধের বডিতে অবশ্যই একটি Task এন্টিটি থাকতে হবে।
 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
   "taskOutcomeLocation": {
     "point": {
       "latitude": -6.195139,
       "longitude": 106.820826
     }
   }
 }
 EOM

এর পরে কী করতে হবে