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

این سند فرض می‌کند که راهنمای مقدماتی تکالیف زمان‌بندی‌شده را در بخش مقدمه‌ای بر 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;
  }
  ```

استراحت

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

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

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

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

بدنه درخواست باید حاوی نهاد Task با فیلدهای مناسب شرح‌داده‌شده در فیلدهای 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;
  }
  ```

استراحت

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

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

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

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

قدم بعدی چیست