อัปเดตสถานะจุดแวะ

เอกสารนี้ถือว่ามีความคุ้นเคยกับสิ่งต่อไปนี้

ตามที่ระบุไว้ในงานที่กำหนดเวลาไว้ในส่วน Fleet Engine Essentials ให้คุณสร้างงานและเชื่อมโยงงานเหล่านั้นกับยานพาหนะ เป็นโมเดลการเชื่อมโยงในโลกแห่งความเป็นจริงระหว่างงานกับ ตำแหน่งที่คาดว่ารถจะจอดเพื่อให้คนขับดำเนินการได้ งานนั้น

จากนั้นคุณจะจัดการความคืบหน้าของงานได้ตลอดวงจรโดย ส่งการอัปเดตไปยัง Fleet Engine เพื่อให้กำหนดเส้นทางและสถานะได้ดีที่สุด อัปเดตตลอดเส้นทางของงาน วิธีหนึ่งที่ทำได้คือการอัปเดต ป้ายจอดรถเมื่อรถเข้าใกล้ มาถึง และออกจากป้ายจอดรถ วิธีนี้จะทำให้สามารถรายงานและการวิเคราะห์ความคืบหน้าของงานได้สำหรับทั้ง 2 ที่ โอเปอเรเตอร์กลุ่มและผู้ใช้ปลายทาง การอัปเดตสถานะมีดังต่อไปนี้

  • เส้นทาง: enum STATE สำหรับ VehicleStop ใช้ ENROUTE เพื่อ ระบุว่าจุดแวะพักอยู่ในลำดับถัดไปในรายการสำหรับแผนการเดินทางของยานพาหนะ ในมุมมองของงานนั้น งานดังกล่าวหมายถึงงานที่เกี่ยวข้องกับการหยุดทำงาน ก็เป็นลำดับถัดไปที่ต้องทำให้เสร็จ
  • มาถึงแล้ว: enum STATE ของ VehicleStop ใช้ ARRIVED เพื่อระบุว่า ที่รถมาถึงป้ายหยุดแล้ว จากมุมมองของงาน หมายความถึงงานที่เกี่ยวข้องกับการหยุดทำงานนั้น
  • เสร็จแล้ว: คุณทำเครื่องหมายจุดแวะที่เสร็จสมบูรณ์โดยนำออกจากรายการ สำหรับยานพาหนะ เมื่อทำเช่นนี้ Fleet Engine จะทำเครื่องหมายโดยอัตโนมัติ งานที่เกี่ยวข้องทั้งหมดเป็น "ปิด" แล้ว ดูรายละเอียดเพิ่มเติมเกี่ยวกับการปิดงานได้ที่ สรุปงาน

เอกสารนี้จะอธิบายวิธีการอัปเดตสถานะหยุดโดยใช้แนวทางฝั่งเซิร์ฟเวอร์ คุณ ก็ทำเช่นนี้ได้จากแอปไดรเวอร์หากคนขับสามารถ จัดการงานต่างๆ โดยใช้อุปกรณ์ที่เชื่อถือได้ ใช้เพียงวิธีเดียวเพื่อหลีกเลี่ยงการแข่งขัน เงื่อนไข และดูแลรักษาแหล่งข้อมูลที่ถูกต้องแห่งเดียว

รถกำลังอยู่ระหว่างแวะพัก

ระบบของคุณควรแจ้งให้ Fleet Engine ทราบ เมื่อรถเริ่มนำทางไปยัง จุดแวะถัดไป การดำเนินการนี้จะช่วยปรับปรุงการคำนวณเวลาถึงโดยประมาณและเส้นทาง

ฟิลด์ที่จำเป็นสำหรับการหยุดอัปเดต

Fleet Engine ไม่สนใจช่องอื่นๆ ทั้งหมดในเอนทิตีสำหรับการแจ้งเตือน

ช่องค่า
remainingVehicleJourneySegments รายการป้ายจอดรถที่เหลืออยู่ซึ่งมีรัฐมีสถานะเป็น "รัฐ" ใหม่

ตัวอย่างระหว่างกำหนดเส้นทางเพื่อหยุด

ตัวอย่างต่อไปนี้แสดงวิธีแจ้งให้ Fleet Engine ทราบว่ามียานพาหนะ เปลี่ยนเส้นทางไปยังจุดแวะถัดไปโดยใช้ไลบรารี Java gRPC หรือ HTTP การเรียก 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`
  • &lt;id&gt; เป็นตัวระบุที่ไม่ซ้ำสำหรับงาน
  • ส่วนหัวของคำขอต้องมีช่อง 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 รายการป้ายจอดรถที่เหลืออยู่ซึ่งมีรัฐมีสถานะเป็น "รัฐ" ใหม่

ตัวอย่างถึงจุดหมาย

ตัวอย่างต่อไปนี้แสดงวิธีแจ้ง Fleet Engine ว่ายานพาหนะมาถึง ตรงจุดแวะ โดยใช้ไลบรารี Java gRPC หรือการเรียก HTTP 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`
  • &lt;id&gt; เป็นตัวระบุที่ไม่ซ้ำสำหรับงาน
  • ส่วนหัวของคำขอต้องมีช่อง 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 เมื่อยานพาหนะจอดเสร็จแล้ว ซึ่งทำให้ งานทั้งหมดที่เชื่อมโยงกับจุดแวะเพื่อตั้งค่าเป็นสถานะ "ปิด"

ฟิลด์ที่จำเป็นสำหรับการหยุดอัปเดต

Fleet Engine ไม่สนใจช่องอื่นๆ ทั้งหมดในเอนทิตีสำหรับการแจ้งเตือน

ช่องค่า
remainingVehicleJourneySegments รายการป้ายจอดรถที่เหลืออยู่ซึ่งมีรัฐมีสถานะเป็น "รัฐ" ใหม่ จุดแวะแรกในรายการต้องมีการทำเครื่องหมายสถานะเป็น State.ENROUTE

ทำให้ตัวอย่างหยุดเสร็จสมบูรณ์

ตัวอย่างต่อไปนี้แสดงวิธีแจ้ง Fleet Engine ว่ายานพาหนะมาถึง ตรงจุดแวะ โดยใช้ไลบรารี Java gRPC หรือการเรียก HTTP 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`
  • &lt;id&gt; เป็นตัวระบุที่ไม่ซ้ำสำหรับงาน
  • ส่วนหัวของคำขอต้องมีช่อง 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

ขั้นตอนถัดไป