[RM-33626]: <SPU> ตรวจสอบรายงานที่ 68

Viewed 0

Problem Summary

From Redmine:
ตรวจสอบรายงานที่ 68 ให้หน่อยนะครับ
ข้อมูลในช่อง Checkout ไม่ตรงกับวันเวลายืมจริง ๆ
ตัวอย่างเช่น A094566 ยิงยืมจริง ๆ วันที่ 24 แต่รายงานออกมาเป็นวันที่ 23 ครับ

ทางชลบุรีแจ้งว่า วันที่ 23 มี outing ไม่ได้ทำงานแน่ ๆ
เขามายิงยืมให้วันที่ 24 ครับ

Root Cause Analysis

เป็นเพราะว่าตอน Upgrade Koha ได้ลืมตั้งค่า OS timezone ให้กับ Server
ตรวจสอบพบว่าเป็น US Eastern แต่ควรเป็น Asia/Bangkok
ซึ่งทำให้เวลาที่บันทึกข้อมูลไม่ตรงกับเวลาที่จริง Offset ไป 12 ชั่วโมง

กรณีหนังสือเล่มที่แจ้ง A094566 ในรายงานที่ 68 ระบุว่ายืมเวลา 2025-12-23 21:43:10
ซึ่งล่าช้ากว่าเวลาจริง 12 ชั่วโมง (เนื่องจาก US Eastern ช้ากว่าไทย 12 ชม.)
ดังนั้นเวลาที่ถูกต้องคือการบวกเพิ่ม 12 ชั่วโมง ได้เป็น 2025-12-24 09:43:10

1 Answers

Solution / Workaround

เรื่อง timezone ได้แก้ไขไปแล้วเมื่อวันที่ 2026-01-06
แต่ยังไม่ได้แก้ไขในรายงานที่ 68 แต่ยังคงใช้เวลาที่บันทึกข้อมูลก่อนแก้ไข

ช่วงระยะเวลาที่ข้อมูลผิดคือ ตั้งแต่เริ่มระบบใหม่ 2025-12-16 ถึงวันที่ 2026-01-06 ประมาณ 20 วัน

แนวทางการดำเนินการ

  1. [เสี่ยงมาก] แก้ไขข้อมูลที่ผิดพลาดทั้งหมดในช่วงเวลาดังกล่าว
  2. [เสี่ยงปานกลาง] แก้ไขข้อมูลที่ผิดพลาดเฉพาะบางส่วนที่มีผลกระทบต่อการทำงาน เช่น ตารางยืมคืน ตารางสถิติ
  3. [ไม่เสี่ยง] ไม่แก้ไขข้อมูลที่ผิดพลาด (แจ้งเตือนให้ผู้ที่เกี่ยวข้องทราบถึงปัญหา)

ลูกค้าเลือกทางที่ 2
ตารางที่แก้ไข statistics, issues, old_issues

-- SQL UPDATE สำหรับแก้ไขข้อมูล Timezone Offset (+12 ชั่วโมง)
-- ช่วงที่ข้อมูลผิดพลาด: 2025-12-16 ถึง 2026-01-06

-- 1. ตรวจสอบจำนวนรายการก่อนแก้ไข
SELECT 'statistics' as table_name, COUNT(*) FROM statistics WHERE datetime >= '2025-12-16 00:00:00' AND datetime <= '2026-01-07 00:00:00';
SELECT 'issues' as table_name, COUNT(*) FROM issues WHERE issuedate >= '2025-12-16 00:00:00' AND issuedate <= '2026-01-07 00:00:00';
SELECT 'old_issues' as table_name, COUNT(*) FROM old_issues WHERE issuedate >= '2025-12-16 00:00:00' AND issuedate <= '2026-01-07 00:00:00';

START TRANSACTION;

-- แก้ไขตาราง statistics (สำหรับรายงาน)
UPDATE statistics 
SET datetime = DATE_ADD(datetime, INTERVAL 12 HOUR) 
WHERE datetime >= '2025-12-16 00:00:00' AND datetime <= '2026-01-07 00:00:00';

-- แก้ไขตาราง issues (ข้อมูลยืมปัจจุบัน)
UPDATE issues 
SET issuedate = DATE_ADD(issuedate, INTERVAL 12 HOUR),
    date_due = DATE_ADD(date_due, INTERVAL 12 HOUR),
    lastreneweddate = IF(lastreneweddate IS NOT NULL, DATE_ADD(lastreneweddate, INTERVAL 12 HOUR), NULL)
WHERE issuedate >= '2025-12-16 00:00:00' AND issuedate <= '2026-01-07 00:00:00';

-- แก้ไขตาราง old_issues (ประวัติการยืม)
UPDATE old_issues 
SET issuedate = DATE_ADD(issuedate, INTERVAL 12 HOUR),
    date_due = DATE_ADD(date_due, INTERVAL 12 HOUR),
    lastreneweddate = IF(lastreneweddate IS NOT NULL, DATE_ADD(lastreneweddate, INTERVAL 12 HOUR), NULL),
    returndate = IF(returndate IS NOT NULL, DATE_ADD(returndate, INTERVAL 12 HOUR), NULL)
WHERE issuedate >= '2025-12-16 00:00:00' AND issuedate <= '2026-01-07 00:00:00';

-- ตรวจสอบตัวอย่างข้อมูลหลัง Update
-- SELECT datetime FROM statistics WHERE datetime >= '2025-12-16 00:00:00' LIMIT 10;

-- หากตรวจสอบแล้วถูกต้องให้รัน:
-- COMMIT;

-- หากต้องการยกเลิกให้รัน:
-- ROLLBACK;

Verification Steps

Related