वाहन की डिलीवरी से जुड़े टास्क अपडेट करें

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

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

वाहन के टास्क को कभी भी अपडेट किया जा सकता है. हालांकि, आम तौर पर ऐसा इन कामों के लिए किया जाता है:

  • किसी वाहन के लिए टास्क शेड्यूल करें. ऐसा करने के लिए, अपडेट का अनुरोध करें. इस अनुरोध में, वाहन के लिए नया स्टॉप जोड़ा जा सकता है या किसी मौजूदा स्टॉप में नया टास्क जोड़ा जा सकता है.
  • किसी वाहन स्टॉप से जुड़े मौजूदा टास्क का क्रम अपडेट करना.
  • टास्क पूरा होने की जगह बदलें. डिफ़ॉल्ट रूप से, Fleet Engine, टास्क पूरा होने की जगह को उसी जगह के तौर पर मार्क करता है जहां टास्क के लिए वाहन को रोका गया था. अगर आप चाहें, तो अलग-अलग टास्क के लिए खास जगहें बताई जा सकती हैं. उदाहरण के लिए, हो सकता है कि आपके पास कई पैकेज डिलीवर करने के लिए, किसी बड़े कॉम्प्लेक्स में वाहन को रोकने की ज़रूरत हो. इनमें से हर पैकेज के लिए, मेल डिलीवरी का एक अलग रूम असाइन किया गया हो.
  • पहले से असाइन किए गए किसी भी टास्क को बंद करें, ताकि वे अपडेट किए गए क्रम में न दिखें. ज़्यादा जानकारी के लिए, टास्क पूरे करना लेख पढ़ें.

डिलीवरी के टास्क शेड्यूल करना या उनमें बदलाव करना

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

किसी शिपमेंट को एक वाहन से दूसरे वाहन पर भेजने के लिए, ओरिजनल टास्क को बंद करें और किसी दूसरे वाहन को असाइन करने से पहले उसे फिर से बनाएं. अगर डिलीवरी वाहन को अपडेट करके, उसमें कोई ऐसा टास्क शामिल किया जाता है जो पहले से ही किसी दूसरे वाहन को असाइन किया गया है, तो आपको गड़बड़ी का मैसेज मिलेगा.

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

इस सेक्शन में, वाहन के लिए टास्क अपडेट करते समय सेट किए जाने वाले ज़रूरी फ़ील्ड के बारे में बताया गया है. कोई वैकल्पिक फ़ील्ड नहीं दिया गया है. फ़्लीट इंजन, अपडेट के लिए इकाई के अन्य सभी फ़ील्ड को अनदेखा करता है.

फ़ील्ड भरना ज़रूरी हैमान
remainingVehicleJourneySegments टास्क के लिए, प्रोसेस के सेगमेंट की सूची, जिस क्रम में उन्हें पूरा किया जाना चाहिए. सूची में मौजूद पहला टास्क पहले पूरा किया जाता है.
remainingVehicleJourneySegments[i].stop सूची में टास्क i के लिए स्टॉप.
remainingVehicleJourneySegments[i].stop.plannedLocation बस के रुकने की तय जगह.
remainingVehicleJourneySegments[i].stop.tasks इस बस स्टॉप पर किए जाने वाले टास्क की सूची.
remainingVehicleJourneySegments[i].stop.state State.NEW

टास्क असाइन करने का उदाहरण

यहां दिए गए उदाहरणों में, वाहन के लिए दो नए टास्क जोड़ने के लिए, UpdateDeliveryVehicle में Java gRPC लाइब्रेरी और एचटीटीपी REST कॉल का इस्तेमाल करने का तरीका बताया गया है.

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String VEHICLE_ID = "vehicle-8241890";
 static final String TASK1_ID = "task-756390";
 static final String TASK2_ID = "task-849263";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Vehicle settings
 String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
 DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
     .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.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 updateDeliveryRequest =
   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>, आपके फ़्लीट में मौजूद डिलीवरी वाहन का यूनीक आइडेंटिफ़ायर होता है. यह वह आइडेंटिफ़ायर है जिसे आपने वाहन बनाते समय डाला था.

  • अनुरोध हेडर में अनुमति फ़ील्ड होना चाहिए, जिसकी वैल्यू 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.7749,
              "longitude": -122.084061
            }
          },
          "tasks": [
            {
              "taskId": "${TASK1_ID}"
            }
          ]
        }
      },
      {
        "stop": {
          "state": "NEW",
          "plannedLocation": {
            "point": {
              "latitude": 37.3382,
              "longitude": 121.8863
            }
          },
          "tasks": [
            {
              "taskId": "${TASK2_ID}"
            }
          ]
        }
      }
    ]
  }
  EOM

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