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

این سند مستلزم آشنایی با موارد زیر است:

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

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

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

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

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

هنگامی که وسیله نقلیه ناوبری را به ایستگاه بعدی آغاز کرد، سیستم شما باید به Fleet Engine اطلاع دهد. این امر محاسبات ETA و مسیر را بهبود می بخشد.

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

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

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

مثال در مسیر توقف

مثال‌های زیر نشان می‌دهند که چگونه می‌توان به Fleet Engine اطلاع داد که وسیله نقلیه به ایستگاه بعدی خود می‌رود، با استفاده از کتابخانه Java 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> یک شناسه منحصر به فرد برای کار است.
  • سرصفحه درخواست باید حاوی یک فیلد مجوز با مقدار حامل <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

خودرو در ایستگاه می رسد

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

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

Fleet Engine تمام فیلدهای دیگر موجود در اعلان را نادیده می گیرد.

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

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

مثال‌های زیر نشان می‌دهند که چگونه می‌توان به Fleet Engine اطلاع داد که یک وسیله نقلیه به ایستگاه رسیده است، با استفاده از کتابخانه Java 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> یک شناسه منحصر به فرد برای کار است.
  • سرصفحه درخواست باید حاوی یک فیلد مجوز با مقدار حامل <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 تمام فیلدهای دیگر موجود در اعلان را نادیده می گیرد.

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

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

مثال‌های زیر نشان می‌دهند که چگونه می‌توان به Fleet Engine اطلاع داد که یک وسیله نقلیه به ایستگاه رسیده است، با استفاده از کتابخانه Java 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> یک شناسه منحصر به فرد برای کار است.
  • سرصفحه درخواست باید حاوی یک فیلد مجوز با مقدار حامل <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

بعدش چی