แก้ total

This commit is contained in:
Bright 2025-09-24 11:25:47 +07:00
parent 608e2ea49b
commit 48447d065c

View file

@ -1961,6 +1961,7 @@ namespace BMA.EHR.Recruit.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)
@ -1968,15 +1969,15 @@ namespace BMA.EHR.Recruit.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 recruit_import_id = @id WHERE recruit_import_id = @id
"); ");
@ -1984,20 +1985,7 @@ namespace BMA.EHR.Recruit.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(@"
@ -2013,7 +2001,9 @@ namespace BMA.EHR.Recruit.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));
@ -2024,12 +2014,15 @@ namespace BMA.EHR.Recruit.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(),
@ -2124,7 +2117,7 @@ namespace BMA.EHR.Recruit.Service.Controllers
return Success(new return Success(new
{ {
data = data, data = data,
total = data.Count, total = total,
header = header, header = header,
period = period, period = period,
}); });