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