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