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

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

در سناریو تحویل در دنیای واقعی، کسب‌وکارها وظایف ارسال محموله را به رانندگان واگذار می‌کنند، سپس رانندگان از وسیله نقلیه برای تحویل محموله به گیرنده در مکان برنامه‌ریزی‌شده، مانند محل سکونت یا اتاق تحویل در مجتمع ساختمانی، استفاده می‌کنند. شما با ایجاد تکلیف و صدور درخواست به‌روزرسانی وسیله نقلیه تحویل، این را در 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;
 }

استراحت

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

  • سربرگ درخواست باید فیلد Authorization (مجوز) با مقدار Bearer <token> (حامل <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

قدم بعدی چیست