สรุปงาน

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

  • ปิดงาน: การปิดงานการจัดส่งจะเปลี่ยนสถานะเป็น CLOSED และบ่งบอกว่างานนั้นไม่มีการใช้งานอีกต่อไป

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

ปิดงาน

คุณปิดงานได้ดังนี้

  • อัปเดตสถานะการหยุดของยานพาหนะ คุณนำป้ายจอดรถออกจากยานพาหนะ ซึ่งจะเป็นการปิดงานทั้งหมดที่เชื่อมโยงกับป้ายจอดรถ ดูรายละเอียดได้ที่สถานะการหยุดอัปเดต
  • นำงานออกจากรายการป้ายจอดรถ ซึ่งเกี่ยวข้องกับการอัปเดตรายการงานของจุดหยุด แต่งานที่ถูกปิดจะไม่อยู่ในรายการอีกต่อไป ดูอัปเดตลําดับงานในอัปเดตงาน
  • ตั้งค่าสถานะงานเป็น CLOSED ซึ่งทำได้เฉพาะกับงานที่ไม่ได้กำหนดให้กับยานพาหนะเท่านั้น ส่วนนี้จะแสดงแนวทางนี้

เมื่อปิดงานแล้ว คุณจะเปิดงานนั้นอีกครั้งไม่ได้

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

ช่องงานสำหรับการปิดงาน

ส่วนนี้จะแสดงช่องที่ต้องกรอกเมื่อปิดงาน เครื่องมือจัดการกลุ่มจะละเว้นช่องอื่นๆ ทั้งหมดในเอนทิตีสำหรับการอัปเดต

ช่องที่ต้องกรอก ค่า
state State.CLOSED

ปิดงานโดยตรง

ตัวอย่างต่อไปนี้แสดงวิธีตั้งค่างานที่ยังไม่ได้มอบหมายเป็นสถานะ "ปิด" ไม่ว่าจะใน gRPC หรือใช้การเรียกคําขอ HTTP REST ไปยัง UpdateTask

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setState(Task.State.CLOSED) // You can only directly CLOSE a
   .build();                    // task that is NOT assigned to a vehicle.

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } 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>/tasks/<id>?updateMask=state

  • <id> คือตัวระบุที่ไม่ซ้ำกันสำหรับงาน
  • ส่วนหัวคำขอต้องมีช่องการให้สิทธิ์ซึ่งมีค่าเป็น Bearer <token> โดยที่ <token> มาจากเซิร์ฟเวอร์ของคุณตามหลักเกณฑ์ที่อธิบายไว้ในบทบาทของบัญชีบริการและโทเค็นเว็บ JSON
  • คุณต้องใส่เอนทิตี Task ในเนื้อหาคำขอ

ตัวอย่างคำสั่ง curl

 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "state": "CLOSED",
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
 }
 EOM

ตั้งค่าผลลัพธ์ของงาน

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

รายละเอียดผลลัพธ์ของงาน

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

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

คุณใช้วิธีการใดก็ได้ต่อไปนี้ในการตั้งค่า task_outcome_location และ task_outcome_time

  • อัปเดตในคำขอเดียวกันที่กำหนดผลลัพธ์ของงาน
  • อัปเดตในภายหลังหลังจากที่คุณตั้งค่าผลลัพธ์ของงานแล้ว
  • แก้ไขอีกครั้งหลังจากตั้งค่าแล้ว

เครื่องมือจัดการฟลีตจะป้องกันไม่ให้อัปเดตต่อไปนี้ที่เกี่ยวข้องกับผลลัพธ์ของงาน

  • คุณจะแก้ไขผลลัพธ์ของงานไม่ได้เมื่อตั้งค่าเป็น SUCCEEDED หรือ FAILED แล้ว
  • คุณไม่สามารถตั้งค่าสถานที่หรือเวลาของผลลัพธ์ของงานสำหรับงานที่ไม่มีผลลัพธ์ที่กำหนด

ช่องงานสำหรับการตั้งค่าผลลัพธ์

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

ช่องที่ต้องกรอก ค่า
taskOutcome Outcome.SUCCEEDED หรือ Outcome.FAILED

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

ตัวอย่างผลลัพธ์ของงาน

ตัวอย่างต่อไปนี้แสดงวิธีใช้ไลบรารี gRPC ของ Java และการเรียก HTTP REST ไปยัง UpdateTask เพื่อตั้งค่าผลลัพธ์ของงานเป็น SUCCEEDED และตั้งค่าตำแหน่งที่งานเสร็จสมบูรณ์

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setTaskOutcome(TaskOutcome.SUCCEEDED)
   .setTaskOutcomeTime(now())
   .setTaskOutcomeLocation(               // Grand Indonesia East Mall
     LocationInfo.newBuilder().setPoint(
       LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
   .build();

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } 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>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation

  • <id> คือตัวระบุที่ไม่ซ้ำกันสำหรับงาน
  • ส่วนหัวคำขอต้องมีช่องการให้สิทธิ์ซึ่งมีค่าเป็น Bearer <token> โดยที่ <token> มาจากเซิร์ฟเวอร์ของคุณตามหลักเกณฑ์ที่อธิบายไว้ในบทบาทของบัญชีบริการและโทเค็นเว็บ JSON
  • เนื้อหาของคำขอต้องมีเอนทิตี Task
 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
   "taskOutcomeLocation": {
     "point": {
       "latitude": -6.195139,
       "longitude": 106.820826
     }
   }
 }
 EOM

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