کارها را نهایی کنید

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

  • بستن یک وظیفه : بستن یک وظیفه حمل و نقل، وضعیت آن را به 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;
 }

استراحت

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 تنظیمات شما را در نظر می‌گیرد:

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

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

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

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

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

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

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

فیلد مورد نیاز ارزش
taskOutcome Outcome.SUCCEEDED یا Outcome.FAILED

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

نمونه‌هایی از نتایج وظیفه

مثال زیر نحوه استفاده از کتابخانه جاوا 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;
 }

استراحت

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

قدم بعدی چیست؟