स्टॉप की स्थिति अपडेट करें

इस दस्तावेज़ में यह माना गया है कि आपको इनके बारे में जानकारी है:

Fleet Engine Essentials में शेड्यूल किए गए टास्क में बताया गया है कि टास्क बनाए जाते हैं और उन्हें किसी वाहन के स्टॉप से जोड़ा जाता है. ऐसा इसलिए किया जाता है, ताकि टास्क और उस जगह के बीच के संबंध को मॉडल किया जा सके जहां वाहन को रुकना है. इससे ड्राइवर को टास्क पूरा करने में मदद मिलती है.

यहां से, टास्क के पूरे लाइफ़साइकल के दौरान उनकी प्रोग्रेस को मैनेज किया जाता है. इसके लिए, Fleet Engine को अपडेट भेजे जाते हैं, ताकि वह टास्क के दौरान रूटिंग और स्टेटस अपडेट को बेहतर तरीके से मैनेज कर सके. इसके लिए, वाहन के स्टॉप के पास पहुंचने, वहां पहुंचने, और वहां से निकलने पर, वाहन के स्टॉप की जानकारी अपडेट करें. इससे फ़्लीट ऑपरेटर और असली उपयोगकर्ताओं, दोनों के लिए टास्क की प्रोग्रेस के बारे में रिपोर्टिंग और विश्लेषण किया जा सकता है. स्टेटस अपडेट ये हैं:

  • रास्ते में है: VehicleStop के लिए STATE enum, ENROUTE का इस्तेमाल करता है. इससे यह पता चलता है कि वाहन के यात्रा कार्यक्रम में, अगला स्टॉप यही है. टास्क के हिसाब से इसका मतलब है कि स्टॉप से जुड़ा कोई भी टास्क, पूरा किए जाने वाले टास्क की सूची में सबसे ऊपर है.
  • पहुंच गया: VehicleStop के लिए STATE enum, ARRIVED का इस्तेमाल करके यह दिखाता है कि वाहन स्टॉप पर पहुंच गया है. टास्क के हिसाब से इसका मतलब है कि स्टॉप से जुड़ा कोई भी टास्क, जिस पर अभी काम चल रहा है.
  • पूरा हुआ: किसी स्टॉप को पूरा हुआ तब माना जाता है, जब उसे वाहन के स्टॉप की सूची से हटा दिया जाता है. ऐसा करने पर, Fleet Engine इससे जुड़े सभी टास्क को अपने-आप CLOSED के तौर पर मार्क कर देता है. टास्क बंद करने के बारे में ज़्यादा जानकारी के लिए, टास्क पूरा करना लेख पढ़ें.

इस दस्तावेज़ में, सर्वर-साइड के तरीकों का इस्तेमाल करके, स्टॉप के स्टेटस को अपडेट करने का तरीका बताया गया है. अगर आपने ड्राइवर को भरोसेमंद डिवाइस का इस्तेमाल करके टास्क मैनेज करने की सुविधा दी है, तो ड्राइवर ऐप्लिकेशन से भी ऐसा किया जा सकता है. सिर्फ़ एक तरीके का इस्तेमाल करें, ताकि रेस की स्थितियों से बचा जा सके और एक ही सोर्स से डेटा को अपडेट किया जा सके.

वाहन, स्टॉप की ओर जा रहा है

जब वाहन अगले स्टॉप के लिए नेविगेट करना शुरू करे, तब आपके सिस्टम को Fleet Engine को इसकी सूचना देनी चाहिए. इससे पहुंचने का अनुमानित समय और रास्ते की जानकारी को बेहतर तरीके से कैलकुलेट किया जा सकता है.

अपडेट रोकने के लिए ज़रूरी फ़ील्ड

Fleet Engine, सूचना के लिए इकाई में मौजूद अन्य सभी फ़ील्ड को अनदेखा कर देता है.

फ़ील्डमान
remainingVehicleJourneySegments वाहन के बाकी स्टॉप की सूची. इसमें उनकी स्थिति को State.NEW के तौर पर मार्क किया गया है.

रुकने के रास्ते का उदाहरण

यहां दिए गए उदाहरणों में, Fleet Engine को यह सूचना देने का तरीका बताया गया है कि कोई वाहन अपने अगले स्टॉप की ओर जा रहा है. इसके लिए, Java gRPC लाइब्रेरी या UpdateDeliveryVehicle को HTTP REST कॉल का इस्तेमाल किया गया है. अन्य सभी स्टॉप को नए के तौर पर मार्क किया गया है.

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> को आपका सर्वर जारी करता है. यह सेवा खाते की भूमिकाओं और 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 को इसकी सूचना दी जानी चाहिए.

अपडेट रोकने के लिए ज़रूरी फ़ील्ड

Fleet Engine, सूचना के लिए इकाई में मौजूद अन्य सभी फ़ील्ड को अनदेखा कर देता है.

फ़ील्डमान
remainingVehicleJourneySegments वाहन के बाकी स्टॉप की सूची. इसमें उनकी स्थिति को State.NEW के तौर पर मार्क किया गया है.

स्टॉप पर पहुंचने का उदाहरण

यहां दिए गए उदाहरणों में, Fleet Engine को यह सूचना देने का तरीका बताया गया है कि कोई वाहन स्टॉप पर पहुंच गया है. इसके लिए, Java gRPC लाइब्रेरी या UpdateDeliveryVehicle को HTTP REST कॉल का इस्तेमाल किया जा सकता है. बाकी सभी स्टॉप को नए के तौर पर मार्क किया जाता है.

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> को आपका सर्वर जारी करता है. यह सेवा खाते की भूमिकाओं और 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 को इसकी सूचना दी जानी चाहिए. इस वजह से, स्टॉप से जुड़े सभी टास्क को 'पूरा हो गया' स्टेटस पर सेट कर दिया जाता है.

अपडेट रोकने के लिए ज़रूरी फ़ील्ड

Fleet Engine, सूचना के लिए इकाई में मौजूद अन्य सभी फ़ील्ड को अनदेखा कर देता है.

फ़ील्डमान
remainingVehicleJourneySegments वाहन के बाकी स्टॉप की सूची. इसमें उनकी स्थिति को State.NEW के तौर पर मार्क किया गया है. सूची में मौजूद पहले स्टॉप की स्थिति, State.ENROUTE के तौर पर मार्क होनी चाहिए.

स्टॉप का उदाहरण पूरा करता है

यहां दिए गए उदाहरणों में, Fleet Engine को यह सूचना देने का तरीका बताया गया है कि कोई वाहन स्टॉप पर पहुंच गया है. इसके लिए, Java gRPC लाइब्रेरी या UpdateDeliveryVehicle को HTTP REST कॉल का इस्तेमाल किया जा सकता है. बाकी सभी स्टॉप को नए के तौर पर मार्क किया जाता है.

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> को आपका सर्वर जारी करता है. यह सेवा खाते की भूमिकाओं और 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

आगे क्या करना है