इस दस्तावेज़ में, यह मान लिया गया है कि आपको इन विषयों के बारे में जानकारी है:
- शिपमेंट के टास्क बनाना
- शेड्यूल किए गए टास्क के बारे में जानकारी. इसमें टास्क, स्टॉप, और वाहनों के बीच के संबंध के बारे में विस्तार से बताया गया है.
Scheduled tasks के बारे में Fleet Engine की ज़रूरी जानकारी में बताया गया है. इसके मुताबिक, टास्क बनाए जाते हैं और उन्हें वाहन के स्टॉप से जोड़ा जाता है. ऐसा इसलिए किया जाता है, ताकि टास्क और उस जगह के बीच के असल दुनिया के संबंध को मॉडल किया जा सके जहां वाहन के रुकने की उम्मीद होती है. इससे ड्राइवर, टास्क पूरा कर सकता है.
इसके बाद, टास्क के लाइफ़साइकल के दौरान, उनकी प्रोग्रेस को मैनेज किया जाता है. इसके लिए, Fleet Engine को अपडेट भेजे जाते हैं, ताकि वह टास्क की यात्रा के दौरान, रूटिंग और स्टेटस अपडेट को बेहतर तरीके से कर सके. इसके लिए, एक अहम तरीका यह है कि वाहन के स्टॉप पर पहुंचने, वहां से रवाना होने, और वहां पहुंचने से पहले, वाहन के स्टॉप को अपडेट किया जाए. इससे, फ़्लीट ऑपरेटर और एंड यूज़र, दोनों के लिए टास्क की प्रोग्रेस के बारे में रिपोर्टिंग और विश्लेषण किया जा सकता है. ये स्टेटस अपडेट इस तरह से होते हैं:
- रास्ते में:
STATEenum,VehicleStopके लिएENROUTEका इस्तेमाल करके यह बताता है कि वाहन के रूट में अगला स्टॉप कौन सा है. टास्क के हिसाब से, इसका मतलब है कि स्टॉप से जुड़ा कोई भी टास्क, पूरा करने के लिए सूची में अगला टास्क है. - पहुंच गया:
VehicleStopके लिएSTATEenum,ARRIVEDका इस्तेमाल करके यह बताता है कि वाहन, स्टॉप पर पहुंच गया है. टास्क के हिसाब से, इसका मतलब है कि स्टॉप से जुड़े किसी भी टास्क पर काम किया जा रहा है. - पूरा हुआ: किसी स्टॉप को पूरा हुआ मार्क करने के लिए, उसे वाहन के स्टॉप की सूची से हटा दिया जाता है. ऐसा करने पर, Fleet Engine, उससे जुड़े सभी टास्क को अपने-आप CLOSED के तौर पर मार्क कर देता है. टास्क को बंद करने के बारे में ज़्यादा जानने के लिए, टास्क फ़ाइनल करना लेख पढ़ें.
इस दस्तावेज़ में, सर्वर-साइड के तरीकों का इस्तेमाल करके, स्टॉप के स्टेटस को अपडेट करने का तरीका बताया गया है. अगर आपने ड्राइवर को भरोसेमंद डिवाइस का इस्तेमाल करके टास्क मैनेज करने की सुविधा दी है, तो ड्राइवर ऐप्लिकेशन से भी ऐसा किया जा सकता है. सिर्फ़ एक तरीका इस्तेमाल करें, ताकि रेस की स्थितियों से बचा जा सके और जानकारी का एक ही सोर्स बना रहे.
वाहन, स्टॉप पर पहुंचने वाला है
जब वाहन, अगले स्टॉप पर जाने के लिए नेविगेट करना शुरू करे, तो आपके सिस्टम को Fleet Engine को इसकी सूचना देनी चाहिए. इससे, ईटीए और रूट की कैलकुलेशन बेहतर होती है.
स्टॉप के अपडेट के लिए ज़रूरी फ़ील्ड
Fleet Engine, सूचना के लिए इकाई में मौजूद अन्य सभी फ़ील्ड को अनदेखा करता है.
| फ़ील्ड | मान |
|---|---|
remainingVehicleJourneySegments
|
वाहन के बाकी स्टॉप की सूची. इनमें स्टॉप के स्टेटस को State.NEW के तौर पर मार्क किया गया है. |
स्टॉप पर पहुंचने वाले वाहन का उदाहरण
यहां दिए गए उदाहरणों में, Fleet Engine को यह सूचना देने का तरीका बताया गया है कि कोई वाहन, अपने अगले स्टॉप पर पहुंचने वाला है. इसके लिए, Java gRPC लाइब्रेरी या एचटीटीपी
REST कॉल का इस्तेमाल किया गया है. अन्य सभी स्टॉप को नए के तौर पर मार्क किया गया है.UpdateDeliveryVehicle
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// Next stop marked as ENROUTE
.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.ENROUTE)))
// All other stops marked as 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 updateDeliveryVehicleRequest =
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": "ENROUTE",
"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
वाहन, स्टॉप पर पहुंच गया है
जब कोई वाहन, स्टॉप पर पहुंच जाए, तो Fleet Engine को इसकी सूचना मिलनी चाहिए.
स्टॉप के अपडेट के लिए ज़रूरी फ़ील्ड
Fleet Engine, सूचना के लिए इकाई में मौजूद अन्य सभी फ़ील्ड को अनदेखा करता है.
| फ़ील्ड | मान |
|---|---|
remainingVehicleJourneySegments
|
वाहन के बाकी स्टॉप की सूची. इनमें स्टॉप के स्टेटस को State.NEW के तौर पर मार्क किया गया है. |
स्टॉप पर पहुंचने वाले वाहन का उदाहरण
यहां दिए गए उदाहरणों में, Fleet Engine को यह सूचना देने का तरीका बताया गया है कि कोई वाहन, स्टॉप पर पहुंच गया है
. इसके लिए, Java gRPC लाइब्रेरी या एचटीटीपी REST कॉल का इस्तेमाल किया गया है
UpdateDeliveryVehicle. अन्य सभी स्टॉप को नए के तौर पर मार्क किया गया है.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// Marking the arrival at stop.
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.7749)
.setLongitude(122.4194)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
.setState(VehicleStop.State.ARRIVED)))
// All other remaining stops marked as 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))) // Remaining stops must be NEW.
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
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": "ARRIVED",
"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
वाहन, स्टॉप पर रुक गया है
जब कोई वाहन, स्टॉप पर रुक जाए, तो Fleet Engine को इसकी सूचना मिलनी चाहिए. इससे, स्टॉप से जुड़े सभी टास्क को CLOSED के तौर पर सेट कर दिया जाता है.
स्टॉप के अपडेट के लिए ज़रूरी फ़ील्ड
Fleet Engine, सूचना के लिए इकाई में मौजूद अन्य सभी फ़ील्ड को अनदेखा करता है.
| फ़ील्ड | मान |
|---|---|
remainingVehicleJourneySegments |
वाहन के बाकी स्टॉप की सूची. इनमें स्टॉप के स्टेटस को State.NEW के तौर पर मार्क किया गया है. सूची में मौजूद पहले स्टॉप के स्टेटस को State.ENROUTE के तौर पर मार्क किया जाना चाहिए. |
स्टॉप पर रुकने वाले वाहन का उदाहरण
यहां दिए गए उदाहरणों में, Fleet Engine को यह सूचना देने का तरीका बताया गया है कि कोई वाहन, स्टॉप पर पहुंच गया है
. इसके लिए, Java gRPC लाइब्रेरी या एचटीटीपी REST कॉल का इस्तेमाल किया गया है
UpdateDeliveryVehicle. अन्य सभी स्टॉप को नए के तौर पर मार्क किया गया है.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// This stop has been completed and is commented out to indicate it
// should be removed from the list of vehicle journey segments.
// .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
// .setStop(VehicleStop.newBuilder()
// .setPlannedLocation(LocationInfo.newBuilder()
// .setPoint(LatLng.newBuilder()
// .setLatitude(37.7749)
// .setLongitude(122.4194)))
// .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
// .setState(VehicleStop.State.ARRIVED)))
// All other remaining stops marked as NEW.
// The next stop could be marked as ENROUTE if the vehicle has begun
// its journey to the next stop.
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // Next 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 updateDeliveryVehicleRequest =
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=remaining_vehicle_journey_segments`
- <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.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM