به روز رسانی وضعیت توقف

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

همانطور که در وظایف زمان‌بندی‌شده در بخش ملزومات موتور ناوگان بیان شده است، شما وظایفی را ایجاد می‌کنید و آنها را به توقف وسیله نقلیه مرتبط می‌کنید تا ارتباط دنیای واقعی بین وظیفه و مکانی که انتظار می‌رود وسیله نقلیه در آن توقف کند، مدل‌سازی شود تا راننده بتواند وظیفه را تکمیل کند.

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

  • در مسیر : شمارشگر STATE برای VehicleStop از ENROUTE برای نشان دادن اینکه ایستگاه بعدی در لیست برنامه سفر وسیله نقلیه است استفاده می‌کند. از دیدگاه وظیفه، این بدان معناست که هر وظیفه مرتبط با ایستگاه، ایستگاه بعدی در لیست است که باید تکمیل شود.
  • Arrived : شمارشگر STATE برای VehicleStop از ARRIVED برای نشان دادن اینکه وسیله نقلیه به ایستگاه رسیده است استفاده می‌کند. از دیدگاه وظیفه، این بدان معناست که هر وظیفه مرتبط با ایستگاه به طور فعال در حال انجام است.
  • تکمیل‌شده : با حذف یک توقف از فهرست توقف‌های وسیله نقلیه، آن را تکمیل‌شده علامت‌گذاری می‌کنید. وقتی این کار را انجام می‌دهید، Fleet Engine به‌طور خودکار تمام وظایف مرتبط را به‌عنوان «بسته» علامت‌گذاری می‌کند. برای جزئیات بیشتر در مورد وظایف پایانی، به «پایانی کردن وظایف» مراجعه کنید.

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

وسیله نقلیه در مسیر توقف است

سیستم شما باید به محض شروع ناوبری وسیله نقلیه به سمت ایستگاه بعدی، به Fleet Engine اطلاع دهد. این کار باعث بهبود ETA و محاسبات مسیر می‌شود.

فیلدهای ضروری برای توقف به‌روزرسانی‌ها

موتور ناوگان، تمام فیلدهای دیگر موجود در موجودیت را برای اعلان نادیده می‌گیرد.

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

مثال از مسیر به ایستگاه

مثال‌های زیر نحوه اطلاع‌رسانی به Fleet Engine مبنی بر حرکت یک وسیله نقلیه به سمت ایستگاه بعدی را با استفاده از کتابخانه جاوا gRPC یا فراخوانی HTTP REST به UpdateDeliveryVehicle نشان می‌دهند. سایر ایستگاه‌ها به عنوان جدید علامت‌گذاری می‌شوند.

gRPC

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

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Vehicle settings
 DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
     // Next stop marked as ENROUTE
     .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.ENROUTE)))
     // All other stops marked as 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 updateDeliveryVehicleRequest =
   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> توسط سرور شما طبق دستورالعمل‌های شرح داده شده در نقش‌های حساب سرویس و توکن‌های وب 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": "ENROUTE",
         "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

وسیله نقلیه به ایستگاه توقف می‌رسد

وقتی وسیله نقلیه به توقف می‌رسد، باید به واحد موتور ناوگان اطلاع داده شود.

فیلدهای ضروری برای توقف به‌روزرسانی‌ها

موتور ناوگان، تمام فیلدهای دیگر موجود در موجودیت را برای اعلان نادیده می‌گیرد.

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

به عنوان مثال به ایستگاه می‌رسد

مثال‌های زیر نحوه اطلاع‌رسانی به Fleet Engine مبنی بر رسیدن وسیله نقلیه به ایستگاه را با استفاده از کتابخانه جاوا gRPC یا فراخوانی HTTP REST به UpdateDeliveryVehicle نشان می‌دهند. سایر ایستگاه‌ها به عنوان جدید علامت‌گذاری می‌شوند.

gRPC

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

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Vehicle settings
  String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
  DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
      // Marking the arrival at stop.
      .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
         .setStop(VehicleStop.newBuilder()
             .setPlannedLocation(LocationInfo.newBuilder()
                 .setPoint(LatLng.newBuilder()
                     .setLatitude(37.7749)
                     .setLongitude(122.4194)))
             .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
             .setState(VehicleStop.State.ARRIVED)))
      // All other remaining stops marked as 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))) // Remaining stops must be NEW.
      .build();

  // DeliveryVehicle request
  UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
    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> توسط سرور شما طبق دستورالعمل‌های شرح داده شده در نقش‌های حساب سرویس و توکن‌های وب 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": "ARRIVED",
          "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

وسیله نقلیه توقف کامل را انجام می‌دهد

وقتی وسیله نقلیه توقف کامل می‌کند، باید به Fleet Engine اطلاع داده شود. این باعث می‌شود تمام وظایف مرتبط با توقف در حالت CLOSED قرار گیرند.

فیلدهای ضروری برای توقف به‌روزرسانی‌ها

موتور ناوگان، تمام فیلدهای دیگر موجود در موجودیت را برای اعلان نادیده می‌گیرد.

میدان ارزش
remainingVehicleJourneySegments فهرست ایستگاه‌های باقی‌مانده‌ی وسایل نقلیه به همراه وضعیت آنها که با عنوان State.NEW مشخص شده‌اند. وضعیت اولین ایستگاه در فهرست باید با عنوان State.ENROUTE مشخص شده باشد.

یک مثال توقف را کامل می‌کند

مثال‌های زیر نحوه اطلاع‌رسانی به Fleet Engine مبنی بر رسیدن وسیله نقلیه به ایستگاه را با استفاده از کتابخانه جاوا gRPC یا فراخوانی HTTP REST به UpdateDeliveryVehicle نشان می‌دهند. سایر ایستگاه‌ها به عنوان جدید علامت‌گذاری می‌شوند.

gRPC

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

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Vehicle settings
  String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
  DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
      // This stop has been completed and is commented out to indicate it
      // should be removed from the list of vehicle journey segments.
      // .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
      //    .setStop(VehicleStop.newBuilder()
      //        .setPlannedLocation(LocationInfo.newBuilder()
      //            .setPoint(LatLng.newBuilder()
      //                .setLatitude(37.7749)
      //                .setLongitude(122.4194)))
      //        .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
      //        .setState(VehicleStop.State.ARRIVED)))
      // All other remaining stops marked as NEW.
      // The next stop could be marked as ENROUTE if the vehicle has begun
      // its journey to the next stop.
      .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // Next 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 updateDeliveryVehicleRequest =
    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=remaining_vehicle_journey_segments`
  • <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.3382,
             "longitude": 121.8863
           }
         },
         "tasks": [
           {
             "taskId": "${TASK2_ID}"
           }
         ]
       }
     }
   ]
 }
 EOM

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