به‌روزرسانی تکالیف خودرو تحویل

این سند فرض می‌کند که با موارد زیر آشنایی دارید:

در سناریو ارسال در دنیای واقعی، کسب‌وکارها وظایف ارسال محموله را به رانندگان واگذار می‌کنند، سپس رانندگان از وسیله نقلیه برای ارسال آن‌ها به گیرنده در مکان برنامه‌ریزی‌شده، مانند محل سکونت یا اتاق تحویل در مجتمع ساختمانی، استفاده می‌کنند. شما این را در Fleet Engine با ایجاد تکلیف و صدور درخواست به‌روزرسانی خودروِ تحویل مدل‌سازی می‌کنید، که سپس موجودیت خودرو را با فهرستی از توقف‌ها برای سفر به‌روز می‌کند. برای هر توقف، فهرستی از تکالیف را که باید در آن توقف تکمیل شود اختصاص می‌دهید.

هرزمان بخواهید می‌توانید تکالیف خودرو را به‌روز کنید، اما معمولاً این کار را برای اهداف زیر انجام می‌دهید:

  • تکالیف را برای خودرو زمان‌بندی کنید تا تکمیل کند. می‌توانید این کار را با درخواست به‌روزرسانی که ایستگاه جدیدی به خودرو اضافه می‌کند یا با درخواست به‌روزرسانی که تکلیف جدیدی به ایستگاه موجود اضافه می‌کند انجام دهید.
  • ترتیب تکالیف موجود مرتبط با توقف خودروی مشخصی را به‌روز کنید.
  • مکان تکمیل تکلیف را تغییر دهید. به‌طور پیش‌فرض، Fleet Engine مکان تکمیل تکلیف را همان مکان توقف خودرو مرتبط با تکلیف علامت‌گذاری می‌کند. اگر ترجیح می‌دهید، می‌توانید مکان‌های خاصی را برای تکالیف جداگانه مشخص کنید. برای مثال، ممکن است خودرویی در مجتمعی بزرگ توقف کند تا تعدادی بسته را تحویل دهد که هرکدام به اتاق تحویل نامه خاصی اختصاص داده شده است.
  • تکالیف قبلاً واگذارشده را ببندید تا در ترتیب به‌روزشده قرار نگیرند. برای جزئیات، نهایی کردن تکالیف را ببینید.

زمان‌بندی یا تغییر تکالیف تحویل

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

برای تغییر دادن محموله از یک خودرو به خودرو دیگر، تکلیف اصلی را ببندید و آن را قبل‌از واگذار کردن به خودرو دیگر دوباره ایجاد کنید. اگر وسیله نقلیه تحویل را به‌روز کنید تا شامل تکلیفی شود که قبلاً به وسیله نقلیه دیگری واگذار شده است، خطا دریافت می‌کنید.

فیلدهای الزامی برای به‌روزرسانی تکالیف

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

قسمت الزامیمقدار
remainingVehicleJourneySegments فهرستی از بخش‌های سفر برای تکالیف به‌ترتیبی که باید اجرا شوند. اولین تکلیف در فهرست ابتدا اجرا می‌شود.
remainingVehicleJourneySegments[i].stop توقف برای تکلیف i در فهرست.
remainingVehicleJourneySegments[i].stop.plannedLocation مکان برنامه‌ریزی‌شده برای توقف.
remainingVehicleJourneySegments[i].stop.tasks فهرست تکالیفی که باید در این توقف خودرو انجام شود.
remainingVehicleJourneySegments[i].stop.state State.NEW

نمونه اختصاص دادن تکالیف

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

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String VEHICLE_ID = "vehicle-8241890";
 static final String TASK1_ID = "task-756390";
 static final String TASK2_ID = "task-849263";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Vehicle settings
 String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
 DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
     .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
        .setStop(VehicleStop.newBuilder()
            .setPlannedLocation(LocationInfo.newBuilder()
                .setPoint(LatLng.newBuilder()
                    .setLatitude(37.7749)
                    .setLongitude(122.4194)))
            .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
            .setState(VehicleStop.State.NEW)))
     .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
        .setStop(VehicleStop.newBuilder()
            .setPlannedLocation(LocationInfo.newBuilder()
                .setPoint(LatLng.newBuilder()
                    .setLatitude(37.3382)
                    .setLongitude(121.8863)))
            .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
            .setState(VehicleStop.State.NEW)))
     .build();

 // DeliveryVehicle request
 UpdateDeliveryVehicleRequest updateDeliveryRequest =
   UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
       .setName(vehicleName)
       .setDeliveryVehicle(deliveryVehicle)
       .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
       .build();

 try {
   DeliveryVehicle updatedDeliveryVehicle =
       deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
 } catch (StatusRuntimeException e) {
   Status s = e.getStatus();
   switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
   }
   return;
 }

REST

 PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
  • <id> شناسه یکتایی برای خودروِ تحویل در ناوگان شما است که می‌خواهید ترتیب وظایف آن را به‌روز کنید. این شناسه همان شناسه‌ای است که هنگام ایجاد خودرو مشخص کرده‌اید.

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

  • بدنه درخواست باید حاوی نهاد DeliveryVehicle باشد

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

  # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
  # environment
  curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
    "remainingVehicleJourneySegments": [
      {
        "stop": {
          "state": "NEW",
          "plannedLocation": {
            "point": {
              "latitude": 37.7749,
              "longitude": -122.084061
            }
          },
          "tasks": [
            {
              "taskId": "${TASK1_ID}"
            }
          ]
        }
      },
      {
        "stop": {
          "state": "NEW",
          "plannedLocation": {
            "point": {
              "latitude": 37.3382,
              "longitude": 121.8863
            }
          },
          "tasks": [
            {
              "taskId": "${TASK2_ID}"
            }
          ]
        }
      }
    ]
  }
  EOM

قدم بعدی چیست