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