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

המסמך הזה מבוסס על ההנחה שאתם מכירים את:

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

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

בדוגמאות הבאות מוסבר איך להשתמש בספריית 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`
  • &lt;id&gt; הוא מזהה ייחודי של רכב משלוח בארגון שלך שעבורו אתם מתכוונים לעדכן את סדר המשימות. זה המזהה שציינת כשיצרת את הרכב.

  • כותרת הבקשה חייבת לכלול את השדה 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

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