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

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

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

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