โจทย์
ร้านทองหนึ่งร้านมีงานสามสายเดินไปพร้อมกัน คือซื้อขายทองหน้าร้าน รับจำนำ และรับออมทอง ซึ่งลูกค้าทยอยโอนเงินสะสมไว้จนพอแลกเป็นทองได้ เดิมร้านใช้ระบบ PHP ที่คนอื่นเขียนไว้ วางอยู่บน shared hosting
เราเขียนระบบใหม่ด้วย Laravel แล้วย้ายขึ้น VM ที่เราดูแลให้ ตั้งเป้าให้ทั้งสามงานอยู่ในระบบเดียว ราคาทองอัปเดตเอง และลูกค้าออมทองดูยอดหรือส่งสลิปได้จาก LINE โดยไม่ต้องทักถามร้านทุกครั้ง
ภาพรวมการทำงาน
flowchart LR
C[ลูกค้า] -->|ดูยอด ส่งสลิป| L[แอปใน LINE]
L --> S[(ระบบร้านทอง)]
P[พนักงานหน้าร้าน] -->|ซื้อขาย จำนำ ออมทอง| S
G[ราคาทองประจำวัน] -->|ทุก 5 นาที| S
K[SlipOK] -->|ผลตรวจสลิป| S
S -->|แจ้งเตือน| L
S -->|CSV / JSON| A[ผู้ทำบัญชี]พนักงานทำงานในระบบหลังร้าน ลูกค้าคุยกับร้านผ่าน LINE ส่วนราคาทองและการตรวจสลิประบบทำเองตามรอบ
สิ่งที่สร้าง
หน้าร้าน ซื้อ ขาย และเทิร์นทอง
หน้าจอขายออกแบบมาให้ใช้กับจอสัมผัสที่เคาน์เตอร์ พนักงานแตะเลือกสินค้าลงตะกร้า ระบบคิดราคาจากน้ำหนักกับราคาทองของวันให้เลย ราคานี้ระบบดึงมาเองทุก 5 นาที พนักงานไม่ต้องคอยแก้ตัวเลขเองทั้งวัน
- บิลซื้อและบิลขายใช้โครงเดียวกัน มีสถานะร่าง → จัดสินค้า → เสร็จ และยกเลิกได้
- เทิร์นทอง (ลูกค้าเอาทองเก่ามาแลกทองใหม่) เปิดบิลซื้อกับบิลขายพร้อมกันใน transaction เดียว
- บิลที่เสร็จแล้วตัดหรือเพิ่มสต็อกให้อัตโนมัติ พิมพ์ใบเสร็จได้ทั้งแบบเครื่องพิมพ์ความร้อนและ PDF

หน้าจอขาย: แตะสินค้าทางซ้ายลงบิล ราคาคิดจากราคาทองล่าสุดที่มุมบน (ข้อมูลตัวอย่าง)
จำนำ
ตั๋วจำนำเก็บรายการทองที่นำมาจำนำ ยอดเงินต้น และอัตราดอกเบี้ย ทุกครั้งที่ลูกค้ามาจ่ายเงิน ระบบบันทึกเป็นงวด ซึ่งมีสามแบบคือส่งดอก ไถ่ถอน หรือหลุดจำนำ
- สถานะของตั๋วคิดจากงวดที่จ่ายอย่างเดียว ถ้าลบงวดไถ่ถอนทิ้ง ตั๋วก็กลับมาเปิดเอง สถานะจึงไม่เพี้ยนจากเงินที่รับจริง
- ดอกเบี้ยอ่านจากตารางที่ร้านตั้งเอง มีดอกขั้นต่ำ และคิดตามจำนวนวันตอนไถ่ถอน
- ก่อนครบกำหนด ระบบส่ง LINE เตือนลูกค้าตอน 8 โมงเช้า

Dashboard: ยอดของวันนี้ และงวดจำนำที่ลูกค้าเพิ่งจ่าย (ข้อมูลตัวอย่าง)
ออมทอง
บัญชีออมมีสามแบบ แบบจองทองล็อกน้ำหนักและราคาไว้ตั้งแต่วันเปิด แบบฝากเงินสะสมไปเรื่อย ๆ ไม่มีเป้า และบัญชีค่าแนะนำที่ระบบเติมให้เองเมื่อเพื่อนที่ลูกค้าแนะนำมาฝากครั้งแรก
- ยอดในบัญชีคำนวณจากรายการฝากถอนทุกรายการ ไม่มีใครแก้ยอดตรง ๆ
- ตอนรับทอง ลูกค้าเลือกได้ว่าจะรับที่ร้านหรือให้ส่งพัสดุพร้อมเลขติดตาม ถ้ามีเงินเหลือ ระบบย้ายไปเปิดบัญชีฝากใหม่ให้
- บัญชีจองทองที่ขาดส่งนานเกินกำหนดของร้าน ระบบปิดให้ทุกเช้า

บัญชีออมแบบจองราคา: ยอดออม ยอดคงเหลือ และทุกงวดที่ฝากพร้อมสลิป (ข้อมูลตัวอย่าง)
แอปลูกค้าใน LINE
ลูกค้าเปิดแอปจาก LINE Official Account ของร้าน ลงทะเบียนครั้งแรกด้วยเบอร์โทร จากนั้นก็ดูบัญชีออมกับตั๋วจำนำของตัวเอง และส่งสลิปโอนเงินได้จากในแอป หรือจะส่งรูปสลิปในแชทเฉย ๆ ก็ได้
ทุกครั้งที่ฝากเงินเข้า เปิดบัญชี ส่งทอง หรือตั๋วจำนำใกล้ครบกำหนด ลูกค้าจะได้ข้อความจากร้านทาง LINE

แอปลูกค้าใน LINE: ซ้ายคือบัญชีทั้งหมดของลูกค้า ขวาคือรายละเอียดบัญชีออมกับสลิปที่รอตรวจ (ข้อมูลตัวอย่าง)

ข้อความที่ลูกค้าได้รับในแชท LINE ของร้าน: ฝากเงินสำเร็จ และแจ้งเตือนครบกำหนดจำนำ (ข้อมูลตัวอย่าง)
หลังร้าน
ฝั่งพนักงานกับเจ้าของร้านใช้ระบบหลังร้านที่ทำด้วย Filament มี dashboard ดอกเบี้ยจำนำและยอดออม สรุปรายวัน รายเดือน รายปี รายงานภาษี ส่งออก Excel และค้นหาลูกค้าจากเครื่องอ่านบัตรประชาชนได้
เชื่อมกับระบบภายนอก
- LINE Messaging API: รับรูปสลิปที่ลูกค้าส่งในแชทผ่าน webhook ระบบเก็บข้อมูลแล้วตอบ LINE ทันที ค่อยโหลดรูปและสร้างรายการสลิปทีหลัง และกันการสร้างซ้ำด้วยรหัสข้อความของ LINE ส่วนขาออกใช้ส่งแจ้งเตือนทุกเรื่องข้างบน
- LINE LIFF: แอปลูกค้าที่เปิดใน LINE ใช้ guard แยกจากพนักงาน
- SlipOK: ตรวจสลิปโอนเงิน ระบบไม่ปัดตกสลิปเอง สลิปที่อ่านไม่ได้จะส่งให้พนักงานดู และระบบเช็กทั้งสลิปซ้ำกับบัญชีผู้รับที่ไม่ใช่บัญชีของร้าน
- ราคาทองประจำวัน: ดึงราคารับซื้อและขายออกทุก 5 นาที ราคาในบิล จำนำ และออมทองใช้ตัวเลขชุดนี้ทั้งหมด
- ผู้ทำบัญชี: ดึงบิลซื้อขาย การปรับและโอนสต็อก และรายชื่อลูกค้าเป็น CSV หรือ JSON เปิดใน spreadsheet ได้ตรง ๆ ผ่านลิงก์ที่มี token ของแต่ละร้าน

สลิปที่รอตรวจ: ระบบบอกว่ามาจากแชท LINE หรือลูกค้าอัปโหลดเอง และผลตรวจคือปกติ ซ้ำ หรือรอพนักงานดู (ข้อมูลตัวอย่าง)
หลายร้านจากโค้ดชุดเดียว
ตอนนี้ระบบใช้งานจริง 3 ร้าน ทุกร้านใช้โค้ดชุดเดียวกัน แต่แยก deploy แยกฐานข้อมูล และแยกค่าตั้งค่าแบบเข้ารหัสไว้ต่อร้าน ข้อมูลของแต่ละร้านจึงไม่ปนกัน และพอแก้บั๊กหรือเพิ่มฟีเจอร์ ทุกร้านก็ได้ไปพร้อมกัน
ผลลัพธ์
ร้านใช้ระบบนี้มาตั้งแต่ปี 2566 และเราดูแลพัฒนาต่อทุกปีตามงานของร้าน
- 2566 ย้ายจากระบบเดิมมาเป็น Laravel ราคาทองอัปเดตเอง ร้านที่สองเริ่มใช้ในเดือนเดียวกัน
- 2567 หน้าจอขายแบบจอสัมผัส ระบบสต็อก และการคำนวณราคาสินค้า
- 2568 ปรับระบบจ่ายงวดจำนำ ร้านที่สามเริ่มใช้ รับสลิปผ่าน LINE และตรวจด้วย SlipOK
- 2569 อัปเกรดเป็น Laravel 13 กับ Filament 5 ย้าย CI/CD ไป GitHub Actions และเพิ่มชุดทดสอบครอบหน้าจอหลัก
ระบบเขียนด้วย Laravel 13 ใช้ Filament 5 กับ Livewire 4 ทำระบบหลังร้าน ใช้ Tailwind CSS ทำแอปลูกค้าใน LINE ฐานข้อมูลเป็น MariaDB งานเบื้องหลังรันบน Horizon และ CI รันชุดทดสอบ Pest ก่อน deploy ทุกครั้ง



