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