สรุปงาน

เอกสารนี้ถือว่าคุณเข้าใจวิธีสร้างและใช้งานงานแล้ว มีตัวอย่างเฉพาะเจาะจงเกี่ยวกับวิธีการสรุปงานการจัดส่งดังนี้:

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

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

ปิดงาน

คุณสามารถปิดงานได้ด้วยวิธีต่อไปนี้:

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

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

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

ฟิลด์งานสำหรับการปิดงาน

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

ช่องที่ต้องกรอก ค่า
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> คือตัวระบุที่ไม่ซ้ำกันสำหรับงาน
  • ส่วนหัวของคำขอต้องมีฟิลด์ Authorization ที่มีค่าเป็น 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 จะกรอกสถานที่ตั้งผลลัพธ์ของงานโดยอัตโนมัติด้วยตำแหน่งล่าสุดที่ทราบของยานพาหนะ คุณระบุ แทนได้หากต้องการ
  • เวลาผลลัพธ์ของงาน: Fleet Engine จะไม่กรอกข้อมูลในช่องนี้ แต่คุณสามารถตั้งค่าได้

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

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

Fleet Engine จะป้องกันการอัปเดตต่อไปนี้ที่เกี่ยวข้องกับผลลัพธ์ของงาน

  • คุณจะแก้ไขผลลัพธ์ของงานไม่ได้เมื่อตั้งค่าเป็น 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> คือตัวระบุที่ไม่ซ้ำกันสำหรับงาน
  • ส่วนหัวของคำขอต้องมีฟิลด์ Authorization ที่มีค่าเป็น 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

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