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

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

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

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

یک کار را ببندید

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

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

هنگامی که یک کار را ببندید، نمی توانید آن را دوباره باز کنید.

بسته شدن یک کار نشان دهنده موفقیت یا شکست آن نیست . این نشان می دهد که کار دیگر در حال انجام نیست. برای نشان دادن نتیجه واقعی یک کار و نمایش آن برای اهداف Fleet Tracking و اشتراک گذاری سفر، باید نتیجه واقعی یک کار را نشان دهید. به تنظیم نتیجه کار در زیر مراجعه کنید.

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

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

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

جزئیات نتیجه کار

Tasks همچنین جزئیات بیشتری در مورد نتیجه کار ارائه می دهد. شما می توانید این موارد را مستقیماً تنظیم کنید و 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 مهر زمانی که کار تکمیل شد.

نمونه های نتیجه کار

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

بعدش چی