แก้ total

This commit is contained in:
Bright 2025-09-24 11:35:58 +07:00
parent 5c0f183ba2
commit 0d2ca8889f

View file

@ -2015,6 +2015,7 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers
var data = new List<dynamic>(); var data = new List<dynamic>();
var p_Id = new MySqlParameter("@id", id); var p_Id = new MySqlParameter("@id", id);
int total = 0;
// --------------------------- // ---------------------------
// 1. ดึงรายละเอียดสอบ (exam_info) // 1. ดึงรายละเอียดสอบ (exam_info)
@ -2022,15 +2023,15 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers
using (var cmd = _context.Database.GetDbConnection().CreateCommand()) using (var cmd = _context.Database.GetDbConnection().CreateCommand())
{ {
cmd.CommandTimeout = 0; cmd.CommandTimeout = 0;
var sb = new StringBuilder();
// ปรับ SELECT * → SELECT เฉพาะ field ที่ C# ใช้ var sb = new StringBuilder();
sb.Append(@" sb.Append(@"
SELECT SELECT
examID, profileID, prefix, fullName, dateofbirth, gender, degree, major, majorgroup, examID, profileID, prefix, fullName, dateofbirth, gender, degree, major, majorgroup,
certificateno, certificateIssueDate, score, result, examAttribute, remark, isspecial, certificateno, certificateIssueDate, score, result, examAttribute, remark, isspecial,
applydate, university, position_name, hddPosition, typeTest, position_level, position_type, applydate, university, position_name, hddPosition, typeTest, position_level, position_type,
exam_name, exam_order, score_year exam_name, exam_order, score_year,
COUNT(*) OVER() AS total_count
FROM exam_info FROM exam_info
WHERE disable_import_id = @id WHERE disable_import_id = @id
"); ");
@ -2038,20 +2039,7 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers
cmd.Parameters.Clear(); cmd.Parameters.Clear();
cmd.Parameters.Add(p_Id); cmd.Parameters.Add(p_Id);
//// เพิ่ม dynamic filter var keywordParam = req.keyword?.Trim();
//if (!string.IsNullOrWhiteSpace(req.ExamAttribute))
//{
// sb.Append(" AND examAttribute = @a ");
// cmd.Parameters.Add(new MySqlParameter("@a", req.ExamAttribute));
//}
//if (!string.IsNullOrWhiteSpace(req.ExamResult))
//{
// sb.Append(" AND result = @r ");
// cmd.Parameters.Add(new MySqlParameter("@r", req.ExamResult));
//}
var keywordParam = req.keyword?.Trim(); // Keyword จาก FE
if (!string.IsNullOrWhiteSpace(keywordParam)) if (!string.IsNullOrWhiteSpace(keywordParam))
{ {
sb.Append(@" sb.Append(@"
@ -2067,7 +2055,9 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers
cmd.Parameters.Add(new MySqlParameter("@kw", $"%{keywordParam}%")); cmd.Parameters.Add(new MySqlParameter("@kw", $"%{keywordParam}%"));
} }
// Paging และ sorting // ---------------------------
// Paging + Sorting
// ---------------------------
sb.Append(" ORDER BY examID "); sb.Append(" ORDER BY examID ");
sb.Append(" LIMIT @PageSize OFFSET @Offset "); sb.Append(" LIMIT @PageSize OFFSET @Offset ");
cmd.Parameters.Add(new MySqlParameter("@PageSize", req.PageSize)); cmd.Parameters.Add(new MySqlParameter("@PageSize", req.PageSize));
@ -2078,12 +2068,15 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers
_context.Database.OpenConnection(); _context.Database.OpenConnection();
// --------------------------- // ---------------------------
// 2. ใช้ DbDataReader แทน DataTable → ประหยัด memory และเร็วขึ้น // ดึงข้อมูล + total
// --------------------------- // ---------------------------
using (var reader = cmd.ExecuteReader()) using (var reader = cmd.ExecuteReader())
{ {
while (reader.Read()) while (reader.Read())
{ {
if (total == 0)
total = Convert.ToInt32(reader["total_count"]);
data.Add(new data.Add(new
{ {
examID = reader["examID"].ToString(), examID = reader["examID"].ToString(),
@ -2165,6 +2158,7 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers
return Success(new return Success(new
{ {
data = data, data = data,
total = total,
header = header, header = header,
round = periodExam.Round, round = periodExam.Round,
year = periodExam.Year year = periodExam.Year