نهایی کردن تکالیف

این سند فرض می‌کند که شما می‌دانید چگونه تکالیف را ایجاد و استفاده کنید. این راهنما مثال‌های خاصی برای نحوه نهایی کردن وظایف ارسال کالا به شرح زیر ارائه می‌دهد:

  • بستن تکلیف: بستن تکلیف ارسال، وضعیت آن را به CLOSED تغییر می‌دهد و نشان می‌دهد که آن تکلیف دیگر فعال نیست.

  • تنظیم نتیجه تکلیف: پس‌از بسته شدن تکلیف، آن را با تنظیم نتیجه آن به SUCCEEDED یا FAILED نهایی می‌کنید. این بخش مهمی از نهایی کردن تکلیف است تا نتیجه تحویل در هم‌رسانی سفر نشان داده شود و از صورت‌حساب صحیح برای سرویس Fleet Engine اطمینان حاصل شود.

بستن تکلیف

می‌توانید تکلیف را به روش‌های زیر ببندید:

  • وضعیت توقف را برای وسیله نقلیه به‌روز کنید. ایستگاه را از وسیله نقلیه برمی‌دارید، که به‌نوبه خود همه تکالیف منسوب به آن ایستگاه را می‌بندد. برای جزئیات، به‌روزرسانی وضعیت توقف را ببینید.
  • تکلیف را از فهرست توقف‌های وسیله نقلیه بردارید. این کار شامل به‌روزرسانی فهرست تکالیف توقف است، اما تکلیف بسته دیگر بخشی از فهرست نیست. «دیدن ترتیب تکلیف به‌روزرسانی» در به‌روزرسانی تکالیف.
  • وضعیت تکلیف را روی CLOSED تنظیم کنید. این کار فقط برای تکالیفی که به خودروها اختصاص داده نشده‌اند قابل انجام است. این بخش این رویکرد را نشان می‌دهد.

پس‌از بستن تکلیف، نمی‌توانید آن را دوباره باز کنید.

بسته شدن تکلیف نشان‌دهنده موفقیت یا عدم موفقیت آن نیست. این وضعیت نشان می‌دهد که تکلیف دیگر درجریان درنظر گرفته نمی‌شود. برای نشان دادن نتیجه واقعی یک تکلیف و نمایش آن برای اهداف «ردیابی ناوگان» و هم‌رسانی سفر، باید نتیجه واقعی تکلیف را نشان دهید. در زیر، نتیجه تکلیف را تنظیم کنید.

فیلدهای تکلیف برای بستن تکالیف

این بخش فیلدهای الزامی را که باید هنگام بستن تکلیف تنظیم شود مستند می‌کند. موتور ناوگان همه فیلدهای دیگر را در نهاد برای به‌روزرسانی نادیده می‌گیرد.

قسمت الزامی مقدار
state State.CLOSED

بستن مستقیم تکلیف

نمونه‌های زیر نشان می‌دهد چگونه یک تکلیف واگذارنشده را به وضعیت بسته تنظیم کنید، چه در gRPC و چه بااستفاده از فراخوانی درخواست HTTP REST به UpdateTask

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;
 }

REST

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=state

  • <id> شناسه یکتای تکلیف است.
  • سرایند درخواست باید حاوی فیلد مجوز با مقدار 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 این فیلد را پر نمی‌کند، اما برای تنظیم کردن دردسترس شما است.

می‌توانید از هریک از رویکردهای زیر برای تنظیم task_outcome_location و task_outcome_time استفاده کنید:

  • آن‌ها را در همان درخواستی به‌روز کنید که نتیجه تکلیف را تنظیم می‌کند.
  • پس‌از تنظیم نتیجه تکلیف، آن‌ها را بعداً به‌روز کنید.
  • پس‌از تنظیم شدن، دوباره آن‌ها را اصلاح کنید.

Fleet Engine از به‌روزرسانی‌های زیر دررابطه‌با نتایج تکلیف جلوگیری می‌کند:

  • پس‌از تنظیم نتیجه تکلیف روی SUCCEEDED یا FAILED، نمی‌توانید آن را تغییر دهید.
  • نمی‌توانید مکان یا زمان نتیجه تکلیف را برای تکالیف بدون نتیجه تنظیم‌شده تنظیم کنید.

فیلدهای تکلیف برای تنظیم نتیجه

این بخش فیلدهای الزامی و اختیاری را برای تنظیم کردن هنگام تنظیم نتیجه تکلیف مستند می‌کند. Fleet Engine فیلدهای دیگر را در نهاد برای به‌روزرسانی نادیده می‌گیرد.

قسمت الزامی مقدار
taskOutcome ‫Outcome.SUCCEEDED یا Outcome.FAILED

فیلد اختیاریمقدار
taskOutcomeLocation مکانی که تکلیف در آن تکمیل شده است. اگر تنظیم نشده باشد، Fleet Engine این را به‌طور پیش‌فرض روی آخرین مکان خودرو تنظیم می‌کند.
taskOutcomeTime مهر زمان تکمیل تکلیف.

نمونه‌های نتیجه تکلیف

مثال زیر نحوه استفاده از کتابخانه Java gRPC و فراخوانی HTTP REST به UpdateTask را برای تنظیم نتیجه تکلیف روی SUCCEEDED و تنظیم مکان تکمیل تکلیف نشان می‌دهد.

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;
 }

REST

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation

  • <id> شناسه یکتای تکلیف است.
  • سرایند درخواست باید حاوی فیلد مجوز با مقدار 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

قدم بعدی چیست