Files
T
2026-09-16 23:20:08 +07:00

25 lines
6.9 KiB
Plaintext

เอกสารอธิบายการทำงานของระบบแจ้งเตือนส่งงาน
=========================================
1. การทำงานของระบบแจ้งเตือน และวิธีการแจ้งเตือนผู้ใช้เมื่อใกล้กำหนดส่ง
ระบบแจ้งเตือนถูกออกแบบมาเพื่อป้องกันการลืมส่งงานของนักเรียน โดยแบ่งการทำงานออกเป็น 2 ช่องทางหลัก:
- แจ้งเตือนบนหน้าเว็บไซต์ (In-app Popup Alert): ทันทีที่นักเรียนเข้าสู่ระบบ (Login) สำเร็จ ระบบจะเช็คข้อมูลงานทั้งหมดที่สถานะยังเป็น "รอดำเนินการ" และตรวจสอบว่ามีงานใดที่เข้าข่าย "ใกล้ถึงกำหนดส่ง" หรือ "เลยกำหนดส่ง" ไปแล้ว หากพบระบบจะเด้งหน้าต่าง Popup แสดงรายการงานเหล่านั้นขึ้นมากลางหน้าจอทันที (โดยจะแสดงแค่ 1 ครั้งต่อการล็อกอิน เพื่อไม่ให้รบกวนการใช้งานหน้าอื่นๆ)
- แจ้งเตือนผ่านแอปพลิเคชันแชท (LINE Notify / Telegram): ระบบจะมีสคริปต์ทำงานอยู่เบื้องหลัง (Cron Job) ที่จะถูกสั่งให้รันตามเวลาที่กำหนดไว้ทุกวัน (เช่น 08:00 น. ของทุกวัน) สคริปต์นี้จะกวาดข้อมูลงานที่ใกล้ถึงกำหนดส่งทั้งหมด แล้วส่งข้อความสรุปแจ้งเตือนเข้าไปยังกลุ่มแชทของห้องเรียนผ่าน API แบบอัตโนมัติ
2. วิธีการนำวันและเวลามาใช้ เพื่อคำนวณและแจ้งเตือน
ระบบใช้หลักการเปรียบเทียบ "วันปัจจุบัน" กับ "กำหนดส่ง" เพื่อสร้างเงื่อนไขการแจ้งเตือนดังนี้:
- การเก็บข้อมูล: วันกำหนดส่ง (Due Date) จะถูกบันทึกลงในฐานข้อมูลในรูปแบบ YYYY-MM-DD
- การหาจำนวนวันที่เหลือ: ระบบใช้ฟังก์ชันหาส่วนต่างของวัน (เช่น DATEDIFF ใน SQL) โดยนำ "วันที่กำหนดส่ง" มาลบด้วย "วันที่ปัจจุบัน" เพื่อหาค่า "จำนวนวันที่เหลือ"
- เงื่อนไขการแจ้งเตือน: แอดมินสามารถกำหนดค่า "จำนวนวันล่วงหน้าที่จะให้ระบบเริ่มเตือน" ได้ในหน้าตั้งค่า (ตัวอย่างเช่น กำหนดไว้ 3 วัน)
* ถ้า (วันกำหนดส่ง - วันปัจจุบัน) < 0 หมายถึง "เลยกำหนดส่ง" ระบบจะขึ้นป้ายสีดำ
* ถ้า (วันกำหนดส่ง - วันปัจจุบัน) <= 3 หมายถึง "ใกล้กำหนดส่ง" ระบบจะขึ้นป้ายสีส้ม และนำงานนี้ไปใส่ใน Popup แจ้งเตือน และส่งเข้าแชท LINE/Telegram
* ถ้าเหลือมากกว่า 3 วัน หมายถึงเวลายังเหลือเยอะ ระบบจะยังไม่แจ้งเตือน เพื่อป้องกันข้อความขยะ (Spam)
3. ส่วนประกอบหลักของระบบ
ระบบถูกแบ่งการทำงานออกเป็นส่วนต่างๆ อย่างชัดเจน ดังนี้:
- หน้าบันทึกงาน (หน้า "จัดการงาน"): เป็นส่วนของแอดมินหรือครู มีฟอร์มสำหรับเพิ่มงานใหม่ ระบุชื่องาน/ชื่อวิชา, ใส่รายละเอียด, เลือกตัวนักเรียน, และตั้งวันกำหนดส่ง ทันทีที่บันทึก ข้อมูลจะถูกลงฐานข้อมูลและเริ่มเข้าสู่กระบวนการนับถอยหลังทันที
- หน้าดูรายการงาน (หน้า "Dashboard" และ "งานของฉัน"): เป็นหน้าแสดงผลรายการงานทั้งหมดในรูปแบบตาราง (DataTables) โดยมีการเรียงลำดับจากงานที่ถูกสั่งล่าสุด (รัน Running Number) และแสดง "ป้ายสี" ท้ายวันที่กำหนดส่งเพื่อบอกสถานะความเร่งด่วน
- หน้า/ส่วนของการแจ้งเตือน (Notification Module):
* แจ้งเตือนฝั่งผู้ใช้งานเว็บ: มีการฝังสคริปต์ไว้ในส่วน Footer ของเว็บ เมื่อนักเรียนล็อกอิน ระบบจะเรียกใช้ AJAX ไปดึงข้อมูลงานที่เข้าเงื่อนไขเตือน มาแสดงเป็นกราฟิกสวยงามผ่าน SweetAlert2
* แจ้งเตือนฝั่งแชท: มีไฟล์ cron_notify.php ที่ทำหน้าที่สรุปข้อมูลเป็นข้อความตัวอักษร และยิงข้อมูลไปที่ Server ของ LINE หรือ Telegram ตาม Token ที่แอดมินตั้งค่าไว้