وظایف حمل و نقل را ایجاد کنید

این سند فرض می‌کند که شما راهنمای مقدماتی وظایف زمان‌بندی‌شده در بخش مقدمه‌ای بر موتور ناوگان و همچنین راهنمای «وظیفه زمان‌بندی‌شده چیست؟» در این بخش را مطالعه کرده‌اید.

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

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

این سند نحوه ایجاد وظایف حمل و نقل روی سرور شما را پوشش می‌دهد. برای انواع دیگر وظایف، به ایجاد انواع دیگر وظایف مراجعه کنید.

فیلدهای وظیفه حمل و نقل

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

فیلدهای وظیفه مورد نیاز

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

میدان ارزش
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 فهرستی از ویژگی‌های سفارشی وظایف. هر ویژگی باید یک کلید منحصر به فرد داشته باشد.

ایجاد یک وظیفه دریافت محموله

برای استفاده از Fleet Engine جهت دنبال کردن فعالیت راننده در هنگام تحویل گرفتن محموله، یک وظیفه (task) برای تحویل گرفتن محموله ایجاد کنید. این کار شامل تنظیم ویژگی نوع وظیفه (task) به PICKUP است. مثال زیر، یک عملیات تحویل گرفتن محموله از مرکز خرید Grand Indonesia East Mall را نشان می‌دهد.

مثال‌های زیر نحوه ایجاد یک وظیفه دریافت محموله با استفاده از کتابخانه جاوا 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.PICKUP)
    .setState(Task.State.OPEN)
    .setTrackingId("my-tracking-id")
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
    .addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
    .addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
    .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 a 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> یک شناسه منحصر به فرد برای وظیفه است.

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

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

مثال دستور curl :

 # Set $JWT, $PROJECT_ID, $TRACKING_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": "PICKUP",
   "state": "OPEN",
   "trackingId": "${TRACKING_ID}",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "90s",
   "targetTimeWindow": {
     "startTime": "2023-03-29T21:00:00Z",
     "endTime": "2023-03-29T23:00:00Z"
   }
 }
 EOM

ایجاد یک وظیفه تحویل محموله

برای استفاده از Fleet Engine جهت دنبال کردن فعالیت راننده‌ای که محموله را تحویل می‌دهد، یک وظیفه تحویل محموله ایجاد کنید. این کار شامل تنظیم ویژگی نوع وظیفه به DELIVERY است. مثال زیر تحویل محموله به مرکز خرید Grand Indonesia East Mall را نشان می‌دهد.

مثال‌های زیر نحوه ایجاد یک وظیفه دریافت محموله با استفاده از کتابخانه جاوا 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.DELIVERY)
    .setState(Task.State.OPEN)
    .setTrackingId("my-tracking-id")
    .setPlannedLocation(               // Grand Indonesia East Mall
      LocationInfo.newBuilder().setPoint(
        LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setTaskDuration(
      Duration.newBuilder().setSeconds(2 * 60))
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
    .addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
    .addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
    .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;
  }

استراحت

برای ایجاد یک وظیفه دریافت محموله از محیط سرور، یک فراخوانی 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, $TRACKING_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": "DELIVERY",
   "state": "OPEN",
   "trackingId": "${TRACKING_ID}",
   "plannedLocation": {
      "point": {
         "latitude": -6.195139,
         "longitude": 106.820826
      }
   },
   "taskDuration": "90s",
   "targetTimeWindow": {
     "startTime": "2023-03-29T21:00:00Z",
     "endTime": "2023-03-29T23:00:00Z"
   }
 }
 EOM
 ```

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