به‌روزرسانی وضعیت ایستگاه

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

  • [ایجاد مأموریت مرسوله][1]
  • مقدمه [تکالیف زمان‌بندی‌شده][3] که رابطه بین تکالیف، ایستگاه‌ها، و خودروها را به‌طور مفصل پوشش می‌دهد.

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

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

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

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

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

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

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

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

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

نمونه در مسیر رسیدن به ایستگاه

نمونه‌های زیر نشان می‌دهند که چگونه بااستفاده از [کتابخانه Java gRPC][5] یا تماس HTTP REST با UpdateDeliveryVehicle به Fleet Engine اطلاع دهید که خودرو در مسیر ایستگاه بعدی است. همه ایستگاه‌های دیگر به‌عنوان جدید علامت‌گذاری می‌شوند.

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;
 }

REST

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
  • <id> شناسه یکتای تکلیف است.
  • سرایند درخواست باید حاوی فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> توسط سرور شما مطابق با دستورالعمل‌های شرح‌داده‌شده در [نقش‌های حساب سرویس][6] و [JSON Web tokens][6] صادر می‌شود.
  • بدنه درخواست باید حاوی نهاد 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

placeidtrips1: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#locationinfo placeidtrips2: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html placeidtrips3: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#maps.fleetengine.delivery.v1.LocationInfo.FIELDS.string.maps.fleetengine.delivery.v1.LocationInfo.place placeidtrips4: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html#FIELDS.place

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

وقتی خودرو به ایستگاه می‌رسد، Fleet Engine باید مطلع شود.

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

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

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

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

نمونه‌های زیر نشان می‌دهند که چگونه بااستفاده از [کتابخانه Java gRPC][5] یا تماس HTTP REST با UpdateDeliveryVehicle، به Fleet Engine اطلاع دهید که خودرو به ایستگاه رسیده است. همه ایستگاه‌های دیگر به‌عنوان جدید علامت‌گذاری می‌شوند.

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;
  }

REST

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
  • <id> شناسه یکتای تکلیف است.
  • سرایند درخواست باید حاوی فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> توسط سرور شما مطابق با دستورالعمل‌های شرح‌داده‌شده در [نقش‌های حساب سرویس][6] و [JSON Web tokens][6] صادر می‌شود.
  • بدنه درخواست باید حاوی نهاد 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 اطلاع داده شود. این کار باعث می‌شود همه تکالیف مرتبط با توقف روی وضعیت «بسته» تنظیم شوند.

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

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

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

نمونه تکمیل توقف

مثال‌های زیر نشان می‌دهند که چگونه بااستفاده از [کتابخانه Java gRPC][5] یا فراخوانی HTTP REST به UpdateDeliveryVehicle، به Fleet Engine اطلاع دهید که خودرو به ایستگاه رسیده است. همه ایستگاه‌های دیگر به‌عنوان جدید علامت‌گذاری می‌شوند.

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;
  }

REST

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remaining_vehicle_journey_segments`
  • <id> شناسه یکتای تکلیف است.
  • سرایند درخواست باید حاوی فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> توسط سرور شما مطابق با دستورالعمل‌های شرح‌داده‌شده در [نقش‌های حساب سرویس][6] و [JSON Web tokens][6] صادر می‌شود.
  • بدنه درخواست باید حاوی نهاد 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

placeidtrips1: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#locationinfo placeidtrips2: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html placeidtrips3: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#maps.fleetengine.delivery.v1.LocationInfo.FIELDS.string.maps.fleetengine.delivery.v1.LocationInfo.place placeidtrips4: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html#FIELDS.place

قدم بعدی چیست

  • [نهایی کردن تکالیف][4]

[1]: /maps/documentation/mobility/fleet-engine/journeys/tasks/create-shipment-tasks [3]: /maps/documentation/mobility/fleet-engine/essentials/tasks-intro [4]: /maps/documentation/mobility/fleet-engine/journeys/tasks/finalize-tasks [5]: /maps/documentation/mobility/fleet-engine/essentials/client-libraries-tasks [6]: /maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/service-accounts