עדכון המשימות של כלי הרכב

כדי להבין את המסמך הזה, צריך להכיר את הנושאים הבאים:

בתרחיש של משלוח בעולם האמיתי, עסקים מקצים משימות של משלוח לנהגים, שמשתמשים ברכב כדי להעביר את המשלוח לנמען במיקום מתוכנן, כמו בית מגורים או חדר משלוחים במתחם בניינים. כדי ליצור מודל כזה ב-Fleet Engine, יוצרים משימה ושולחים בקשה לעדכון של רכב המשלוחים. לאחר מכן, ישות הרכב מתעדכנת עם רשימה של עצירות במסלול. לכל עצירה מקצים רשימה של משימות שצריך לבצע בה.

אפשר לעדכן את המשימות של כלי הרכב בכל שלב, אבל בדרך כלל עושים את זה למטרות הבאות:

  • לתזמן משימות שהרכב צריך לבצע. אפשר לעשות את זה באמצעות בקשת עדכון שמוסיפה עצירה חדשה לרכב, או באמצעות בקשת עדכון שמוסיפה משימה חדשה לעצירה קיימת.
  • לעדכן את הסדר של המשימות הקיימות שמשויכות לעצירה נתונה של הרכב.
  • לשנות את המיקום שבו המשימה תושלם. כברירת מחדל, Fleet Engine מסמן את מיקום השלמת המשימה כמיקום זהה למיקום העצירה של הרכב שמשויך למשימה. אם אתם מעדיפים, אתם יכולים לציין מיקומים ספציפיים למשימות מסוימות. לדוגמה, יכול להיות שהרכב יעצור במתחם גדול כדי למסור כמה חבילות, ולכל אחת מהן מוקצה חדר דואר ספציפי.
  • סגרו את כל המשימות שהוקצו בעבר כדי להשאיר אותן מחוץ לסדר המעודכן. פרטים נוספים זמינים בקטע סיום משימות.

תזמון או שינוי של משימות מסירה

אתם יכולים לתזמן או לשנות משימות שהוקצו לרכב מסביבת שרת, או באמצעות Driver SDK אם אתם נותנים לנהג את היכולת לנהל משימות באמצעות מכשיר מהימן. כדי למנוע מרוץ תהליכים ולשמור על מקור אמת יחיד, צריך להשתמש רק בשיטה אחת.

כדי להעביר משלוח מרכב אחד לאחר, סוגרים את המשימה המקורית ויוצרים אותה מחדש לפני שמקצים אותה לרכב אחר. אם מעדכנים רכב למשלוחים כך שיכלול משימה שכבר הוקצתה לרכב אחר, תופיע הודעת שגיאה.

שדות חובה לעדכון משימות

בקטע הזה מפורטים שדות החובה שצריך להגדיר כשמעדכנים משימה של רכב. אין שדות אופציונליים. מנוע Fleet Engine מתעלם מכל שאר השדות בישות לצורך העדכון.

שדה חובהערך
remainingVehicleJourneySegments רשימה של מקטעי נסיעה למשימות, לפי הסדר שבו צריך לבצע אותן. המשימה הראשונה ברשימה מבוצעת ראשונה.
remainingVehicleJourneySegments[i].stop התחנה של המשימה i ברשימה.
remainingVehicleJourneySegments[i].stop.plannedLocation המיקום המתוכנן של התחנה.
remainingVehicleJourneySegments[i].stop.tasks רשימת המשימות שצריך לבצע בעצירה הזו של הרכב.
remainingVehicleJourneySegments[i].stop.state State.NEW

דוגמה להקצאת משימות

בדוגמאות הבאות מוסבר איך להשתמש בספריית Java gRPC ובקריאת HTTP REST ל-UpdateDeliveryVehicle כדי להוסיף שתי משימות חדשות לרכב.

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> הוא מזהה ייחודי של רכב משלוחים בצי שלכם שאתם רוצים לעדכן את סדר המשימות שלו. זהו המזהה שציינתם כשיצרתם את הרכב.

  • ה-request header חייב להכיל את השדה 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.7749,
              "longitude": -122.084061
            }
          },
          "tasks": [
            {
              "taskId": "${TASK1_ID}"
            }
          ]
        }
      },
      {
        "stop": {
          "state": "NEW",
          "plannedLocation": {
            "point": {
              "latitude": 37.3382,
              "longitude": 121.8863
            }
          },
          "tasks": [
            {
              "taskId": "${TASK2_ID}"
            }
          ]
        }
      }
    ]
  }
  EOM

המאמרים הבאים