ایجاد انواع دیگر تکلیف

این سند فرض می‌کند که راهنمای مقدماتی تکالیف زمان‌بندی‌شده را در بخش مقدمه‌ای بر Fleet Engine و همچنین تکلیف زمان‌بندی‌شده چیست؟ را در این بخش خوانده‌اید.

Fleet Engine برای کارهای زمان‌بندی‌شده، دسته‌های گسترده مختلفی از کارها را ارائه می‌دهد:

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

این سند نحوه ایجاد تکالیف غیرارسال را در سرور شما پوشش می‌دهد. برای انواع مأموریت مرسوله، ایجاد مأموریت مرسوله را ببینید.

فیلدهای تکلیف برای تکالیف غیررانندگی

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

فیلدهای الزامی تکلیف

برای هر تکلیفی که در Fleet Engine ایجاد می‌کنید، باید فیلدهای الزامی را ارائه دهید و همچنین می‌توانید هریک از فیلدهای اختیاری را ارائه دهید. Fleet Engine همه فیلدهای دیگر را نادیده می‌گیرد و اگر درخواست ایجاد تکلیف deliveryVehicleId واگذارشده‌ای ارائه دهد، استثنا قائل می‌شود. برای واگذار کردن تکالیف به خودرو، از UpdateDeliveryVehicleRequest استفاده کنید. برای اطلاعات بیشتر، به به‌روزرسانی تکالیف مراجعه کنید.

فیلدمقدار
type

روی نوعی تنظیم کنید که با نوع تکلیف مطابقت داشته باشد، که یکی از موارد زیر است:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id شناسه تکلیف یکتا. این شماره نباید شماره ردگیری محموله باشد. اگر شناسه تکلیف در سیستم خود ندارید، می‌توانید شناسه منحصربه‌فرد جهانی (UUID) تولید کنید. برای جزئیات، شناسه‌های تکلیف را ببینید.
tracking_id فقط برای کارهای PICKUP یا DELIVERY: شماره یا شناسه‌ای که برای پیگیری محموله استفاده می‌کنید. این فیلد را برای تکالیف غیرارسال ارائه نکنید.
planned_location فقط برای تکالیف PICKUP، DELIVERY، یا SCHEDULED_STOP: مکانی که تکلیف باید در آن تکمیل شود. برای تکالیف UNAVAILABLE لازم نیست.
task_duration زمان موردانتظار برای افزودن جهت تکمیل تکلیف. برای مثال، برای پیدا کردن پارکینگ یا پیاده رفتن به محل تحویل.

فیلدهای اختیاری تکلیف ارسال کالا

فیلدمقدار
target_time_window بازه زمانی که تکلیف باید در آن تکمیل شود. این فیلد بر رفتار مسیریابی تأثیری ندارد.
task_tracking_view_config فقط تکالیف PICKUP یا DELIVERY: پیکربندی ردگیری تکلیف که مشخص می‌کند کدام عناصر داده تحت چه شرایطی برای کاربران نهایی قابل‌مشاهده هستند.
attributes فهرستی از مشخصه‌های تکلیف سفارشی. هر مشخصه باید کلید یکتایی داشته باشد.

ایجاد تکلیف عدم دردسترس بودن

می‌توانید تکلیفی ایجاد کنید که نشان‌دهنده عدم دردسترس بودن باشد؛ برای مثال، برای استراحت راننده. برای ایجاد تکلیف عدم‌دسترسی، از دستورالعمل‌های زیر استفاده کنید:

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

قوانین رؤیت‌پذیری ویژه‌ای برای مکان خودرو اعمال می‌شود وقتی که خودرو درحال انجام تکلیف UNAVAILABLE برای هم‌رسانی سفر باشد.

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

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

gRPC

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

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String parent = "providers/" + PROJECT_ID;
  Task task = Task.newBuilder()
    .setType(Task.Type.UNAVAILABLE)
    .setState(Task.State.OPEN)
    .setTaskDuration(
      Duration.newBuilder().setSeconds(60 * 60))  // 1hr break
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)          // Avoid using auto-incrementing IDs for the taskId
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTask(task)              // Initial state
        .build();

  // Error handling
  // If Fleet Engine does not have task with that ID and the credentials of the
  // requestor pass, the service creates the task successfully.

  try {
    Task createdTask = deliveryService.createTask(createTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case ALREADY_EXISTS:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }
  ```

REST

برای ایجاد تکلیف عدم‌دسترسی از محیط سرور، فراخوانی HTTP REST به CreateTask انجام دهید:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

<id> شناسه یکتای تکلیف است.

سرایند درخواست باید حاوی فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> توسط سرور شما مطابق با دستورالعمل‌های شرح‌داده‌شده در نقش‌های حساب سرویس و ژتون‌های وب JSON صادر شده است.

بدنه درخواست باید حاوی نهاد Task با فیلدهای مناسب شرح‌داده‌شده در فیلدهای تکلیف برای تکالیف غیررانندگی باشد.

نمونه فرمان curl:

 # Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
 curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "type": "UNAVAILABLE",
   "state": "OPEN",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "300s"
 }
 EOM

ایجاد تکلیف توقف زمان‌بندی‌شده

می‌توانید برای توقف زمان‌بندی‌شده تکلیف ایجاد کنید؛ برای مثال، برای تکالیف غیررانندگی در مکان‌های مشتری، برای توقف‌های سوخت‌گیری، یا برای زمانی که راننده محموله‌ها را از خودرو تغذیه‌کننده دریافت می‌کند. وقتی تکلیف توقف زمان‌بندی‌شده ایجاد می‌کنید، از رهنمودهای زیر استفاده کنید:

  • تنظیم نوع تکلیف روی
  • شناسه رهگیری را وارد نکنید.
  • درصورت تمایل می‌توانید مکان را ارائه دهید.

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

gRPC

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

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String parent = "providers/" + PROJECT_ID;
  Task task = Task.newBuilder()
    .setType(Task.Type.SCHEDULED_STOP)
    .setState(Task.State.OPEN)
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .build();

  // Task request
  CreateTaskRequest createTaskRequest =
    CreateTaskRequest.newBuilder()  // No need for the header
        .setParent(parent)
        .setTaskId("task-8241890")  // Task ID assigned by the Provider
        .setTrip(task)              // Initial state
        .build();

  // Error handling
  // If Fleet Engine does not have task with that ID and the credentials of the
  // requestor pass, the service creates the task successfully.

  try {
    Task createdTask = deliveryService.createTask(createTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case ALREADY_EXISTS:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }
  ```

REST

برای ایجاد تکلیف توقف زمان‌بندی‌شده از محیط سرور، فراخوانی HTTP REST به CreateTask انجام دهید:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>

<id> شناسه یکتای تکلیف است.

سرایند درخواست باید حاوی فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> توسط سرور شما مطابق با دستورالعمل‌های شرح‌داده‌شده در نقش‌های حساب سرویس و ژتون‌های وب JSON صادر شده است.

بدنه درخواست باید حاوی نهاد Task باشد:

نمونه فرمان curl:

# Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
 curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "type": "SCHEDULED_STOP",
   "state": "OPEN",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "600s"
 }
 EOM

قدم بعدی چیست