Feature #25669
[Call System][Call Monitor] Document Running Logic (Monthly by sys_doc_number)
0%
Description
Logic สำหรับ Generate เลขเอกสาร (Document Number) โดยอ้างอิงตาราง sys_doc_number
รองรับการ:
- แยก Running ตาม doc_type
- แยก Running ตามรายเดือน (date_format)
- Reset เลขใหม่เมื่อขึ้นเดือนใหม่
- ป้องกันเลขซ้ำกรณีมี concurrent request
Database Reference
Table: public.sys_doc_number
prefix = ตัวอักษรนำหน้า (เช่น REQ, INV)
doc_type = ประเภทเอกสาร
date_format = ค่าเดือน/ปี เช่น 0226, 0326 (เก็บเป็นค่า ไม่ใช่ format function)
running_length = จำนวนหลักของ running
doc_number = เลข running ปัจจุบันที่ตัดในแต่ละเดือน
Business Logic
Step 1: รับค่า doc_type
ระบบต้องรับค่า doc_type ของเอกสารที่กำลังสร้าง
Step 2: คำนวณค่าเดือนปัจจุบัน กรณีต้องสร้าง record ที่ 2 จาก record ตั้งต้นเดิม
ระบบต้องคำนวณ current_month_format
เช่น MMYY → 0326
Step 3: ค้นหา record
ค้นหาใน sys_doc_number โดยใช้เงื่อนไข:- doc_type
- date_format = current_month_format
Step 4: กรณีไม่พบ record (เดือนใหม่)
ให้ระบบ:
Insert record ใหม่
กำหนดค่า:
- prefix (ตาม doc_type)
- running_length (ตาม config)
- date_format = current_month_format
- doc_number = 1
Step 5: กรณีพบ record (เดือนปัจจุบัน)
ให้ระบบ:
- Update doc_number = doc_number + 1
- Update updated_date
- นำค่ามาประกอบเป็นเลขเอกสาร
ตัวอย่าง:
เดิม: REQ-0226209
ใหม่: REQ-0226210
Output Format
ระบบต้องแสดงเลขเอกสารตามรูปแบบ: prefix + '-' + date_format + running (padding ตาม running_length)- ไม่มี “-” คั่นก่อน running
- running ต้องเติม 0 ตาม running_length
ตัวอย่าง
prefix = REQ
date_format = 0226
running_length = 3
doc_number = 1
ผลลัพธ์: REQ-0226001
History
Updated by Benjamaporn Kueaduang 2 months ago
เปลี่ยน date_format เป็น YYMM ป้องกันปัญหาการ sort จากเลขเอกสารที่เป็น string
เวลาเรียงแบบตัวอักษร (String Sort)
มันจะเรียงตามตัวแรก -> 1 มาก่อน 0 ทำให้ปี/เดือนปนกัน
Updated by kittipong banawitit about 2 months ago
- Status changed from In Progress to Resolved
- Assignee changed from kittipong banawitit to Benjamaporn Kueaduang