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