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

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

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

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

از آنجا، پیشرفت تکالیف را درطول چرخه حیاتشان با ارسال به‌روزرسانی‌ها به 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;
 }

استراحت

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

استراحت

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

استراحت

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