ไอเดีย #28: ระบบติดตามรถขนส่งและใบส่งของ
"รถออกจากโกดังกี่โมง ตอนนี้อยู่ไหน ของถึงลูกค้าหรือยัง" คำถามสามข้อนี้ทำให้แอดมินของธุรกิจกระจายสินค้าเล็ก ๆ ต้องโทรหาคนขับวันละหลายสิบสาย คนขับก็ต้องจอดรถรับโทรศัพท์ ใบส่งของที่ลูกค้าเซ็นรับยังเป็นกระดาษ กว่าจะกลับมาถึงออฟฟิศบางใบก็หาย พอลูกค้าบอกว่าไม่ได้รับของ บริษัทก็ไม่มีหลักฐานยืนยัน
ใครจะใช้
- ผู้จัดการขนส่ง / dispatcher — จัดเส้นทาง มอบงานให้รถแต่ละคัน และติดตามสถานะ
- คนขับรถ — ดูรายการจุดส่ง นำทาง และบันทึกการส่งมอบผ่านแอปมือถือ
- ฝ่ายขายหรือบัญชี — ตรวจหลักฐานการส่งก่อนวางบิล
ฟีเจอร์ขั้นต่ำ (MVP)
- สร้างใบส่งของจากคำสั่งขาย ระบุลูกค้า ที่อยู่ พิกัด และรายการสินค้า
- จัดเส้นทางรายวัน (trip) มอบหมายรถและคนขับ เรียงลำดับจุดส่งได้
- แอปคนขับส่งตำแหน่ง GPS เป็นระยะ และแสดงบนแผนที่ฝั่ง dispatcher
- สถานะต่อจุดส่ง เช่น รอส่ง กำลังไป ส่งสำเร็จ ส่งไม่สำเร็จพร้อมเหตุผล
- POD (Proof of Delivery) ถ่ายรูปของที่ส่ง ให้ผู้รับเซ็นบนจอ และบันทึกเวลาพร้อมพิกัด
- พิมพ์ใบส่งของและรายงานสรุปรอบส่งรายวัน
ต่อยอดได้อีก
- คำนวณลำดับจุดส่งที่ประหยัดระยะทางด้วย routing engine
- ส่งลิงก์ติดตามรถให้ลูกค้าทาง LINE เมื่อรถใกล้ถึง
- บันทึกค่าน้ำมัน เลขไมล์ และรอบเข้าศูนย์บริการของรถ
- เก็บเงินปลายทางพร้อมบันทึกยอดที่คนขับต้องส่งคืน
โครงข้อมูลตั้งต้น
vehicles— id, plate_no, type, capacity_kgtrips— id, vehicle_id, driver_id, trip_date, status, started_at, finished_atdelivery_notes— id, doc_no, customer_id, trip_id, stop_seq, address, lat, lng, statusdelivery_items— id, delivery_note_id, product_id, qtypods— id, delivery_note_id, receiver_name, signature_file, photo_file, lat, lng, delivered_atgps_points— id, trip_id, lat, lng, speed, recorded_at
ระดับความยาก และสิ่งที่จะได้เรียนรู้
ระดับ ท้าทาย เพราะมีทั้ง backend แอปมือถือ และข้อมูลพิกัดจำนวนมาก แนะนำ Yii2 หรือ Laravel ทำ REST API คู่กับ PostgreSQL (เพิ่ม PostGIS ถ้าต้องคำนวณระยะ) และ Flutter สำหรับแอปคนขับ สิ่งที่จะได้เรียนรู้:
- การออกแบบ API สำหรับแอปที่ต้องทำงานตอนสัญญาณเน็ตไม่ดี แล้ว sync ทีหลัง
- การเก็บข้อมูล GPS ปริมาณมาก ทำ partition ตามวัน และลบข้อมูลเก่าด้วย cron
- การอัปโหลดรูปและลายเซ็นแบบบีบอัดจากมือถือ
- การแสดงตำแหน่งรถบนแผนที่แบบใกล้เคียงเรียลไทม์
ข้อควรระวัง
- ตำแหน่งของคนขับเป็นข้อมูลส่วนบุคคลตาม PDPA ควรเก็บเฉพาะช่วงเวลาทำงาน แจ้งวัตถุประสงค์ให้ชัด และกำหนดระยะเวลาเก็บ
- แอปที่ส่ง GPS ถี่เกินไปจะกินแบตและเน็ตของคนขับ ควรปรับความถี่ตามความเร็วรถ
- ข้อมูล POD ที่ส่งซ้ำจากการ sync ต้อง idempotent ไม่สร้างรายการซ้ำ
ใครเคยทำแอปคนขับหรือระบบติดตามรถมาแล้ว ใช้วิธีไหนส่งตำแหน่งตอนแอปอยู่ background และเก็บข้อมูลพิกัดยังไงไม่ให้ฐานข้อมูลบวม? ถ้าลองทำตามไอเดียนี้ เอาหน้าจอแผนที่หรือ flow การทำ POD มาแชร์ในกระทู้นี้ได้เลยครับ