This commit is contained in:
parent
125dd59348
commit
5c0f183ba2
2 changed files with 266 additions and 91 deletions
|
|
@ -1858,8 +1858,151 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers
|
|||
}
|
||||
}
|
||||
|
||||
//[HttpPost("exam/{id:length(36)}")]
|
||||
//public ActionResult<ResponseObject> GetExamResultById([FromBody] DisableExamRequest req, Guid id)
|
||||
//{
|
||||
// try
|
||||
// {
|
||||
// var periodExam = _context.PeriodExams.AsQueryable()
|
||||
// .Where(x => x.CheckDisability == true)
|
||||
// .FirstOrDefault(x => x.Id == id);
|
||||
|
||||
// if (periodExam == null)
|
||||
// return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
|
||||
|
||||
// var p_Id = new MySqlParameter("@id", id);
|
||||
// var data = new List<dynamic>();
|
||||
// using (var cmd = _context.Database.GetDbConnection().CreateCommand())
|
||||
// {
|
||||
// cmd.CommandTimeout = 0;
|
||||
// var sb = new StringBuilder();
|
||||
// cmd.Parameters.Clear();
|
||||
// sb.Clear();
|
||||
// sb.Append(" SELECT * ");
|
||||
// sb.Append(" FROM exam_info ");
|
||||
// sb.Append(" WHERE disable_import_id = @id ");
|
||||
// cmd.Parameters.Add(p_Id);
|
||||
|
||||
// if (req.ExamAttribute != null && req.ExamAttribute != "")
|
||||
// {
|
||||
// sb.Append(" AND examAttribute = @a ");
|
||||
// cmd.Parameters.Add(new MySqlParameter("@a", req.ExamAttribute));
|
||||
// }
|
||||
|
||||
// if (req.ExamResult != null && req.ExamResult != "")
|
||||
// {
|
||||
// sb.Append(" AND result = @r ");
|
||||
// cmd.Parameters.Add(new MySqlParameter("@r", req.ExamResult));
|
||||
// }
|
||||
|
||||
// sb.Append(" ORDER BY examID ");
|
||||
// sb.Append(" LIMIT @PageSize OFFSET @Offset ");
|
||||
// cmd.Parameters.Add(new MySqlParameter("@PageSize", req.PageSize));
|
||||
// cmd.Parameters.Add(new MySqlParameter("@Offset", ((req.Page - 1) * req.PageSize)));
|
||||
|
||||
// cmd.CommandText = sb.ToString();
|
||||
|
||||
// _context.Database.OpenConnection();
|
||||
// var da = new MySqlDataAdapter(cmd as MySqlCommand);
|
||||
// var dt = new DataTable();
|
||||
// da.Fill(dt);
|
||||
|
||||
// foreach (DataRow dr in dt.Rows)
|
||||
// {
|
||||
// data.Add(new
|
||||
// {
|
||||
// examID = dr["examID"].ToString(),
|
||||
// profileID = dr["profileID"].ToString(),
|
||||
// prefix = dr["prefix"].ToString(),
|
||||
// fullName = dr["fullName"].ToString(),
|
||||
// dateOfBirth = dr["dateofbirth"] == null || Convert.ToDateTime(dr["dateofbirth"]) == DateTime.MinValue ? "" : Convert.ToDateTime(dr["dateofbirth"]).ToThaiShortDate(),
|
||||
// gender = dr["gender"].ToString(),
|
||||
// degree = dr["degree"].ToString(),
|
||||
// major = dr["major"].ToString(),
|
||||
// majorgroup = dr["majorgroup"].ToString(),
|
||||
// certificateNo = dr["certificateno"].ToString(),
|
||||
// certificateIssueDate = dr["certificateIssueDate"] == null || Convert.ToDateTime(dr["certificateIssueDate"]) == DateTime.MinValue ? "" : Convert.ToDateTime(dr["certificateIssueDate"]).ToThaiShortDate(),
|
||||
// ExamScore = dr["score"] == null ? 0 : dr["score"].ToString().ToInteger(),
|
||||
// ExamResult = dr["result"].ToString(),
|
||||
// ExamAttribute = dr["examAttribute"].ToString(),
|
||||
// Remark = dr["remark"].ToString(),
|
||||
// IsSpecial = dr["isspecial"].ToString(),
|
||||
// applyDate = dr["applydate"] == null || Convert.ToDateTime(dr["applydate"]) == DateTime.MinValue ? "" : Convert.ToDateTime(dr["applydate"]).ToThaiShortDate(),
|
||||
// university = dr["university"].ToString(),
|
||||
// position_name = dr["position_name"].ToString(),
|
||||
// hddPosition = dr["hddPosition"].ToString(),
|
||||
// typeTest = dr["typeTest"].ToString(),
|
||||
// position_level = dr["position_level"].ToString(),
|
||||
// position_type = dr["position_type"].ToString(),
|
||||
// exam_name = dr["exam_name"].ToString(),
|
||||
// exam_order = dr["exam_order"].ToString(),
|
||||
// score_year = Convert.ToInt32(dr["score_year"]).ToThaiYear().ToString(),
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
|
||||
// //if (data != null && data.Count > 0)
|
||||
// // data = data.Skip((req.Page - 1) * req.PageSize).Take(req.PageSize).ToList();
|
||||
|
||||
// dynamic header = null;
|
||||
// using (var cmd = _context.Database.GetDbConnection().CreateCommand())
|
||||
// {
|
||||
// var sb = new StringBuilder();
|
||||
// cmd.CommandTimeout = 0;
|
||||
// cmd.Parameters.Clear();
|
||||
// sb.Clear();
|
||||
// sb.Append(" SELECT * ");
|
||||
// sb.Append(" FROM sum_exam_info ");
|
||||
// sb.Append(" WHERE disable_import_id = @id ");
|
||||
// cmd.Parameters.Add(p_Id);
|
||||
|
||||
// cmd.CommandText = sb.ToString();
|
||||
|
||||
// _context.Database.OpenConnection();
|
||||
// MySqlDataAdapter da = new MySqlDataAdapter(cmd as MySqlCommand);
|
||||
// DataTable dt = new DataTable();
|
||||
// da.Fill(dt);
|
||||
// if (dt.Rows.Count == 0)
|
||||
// {
|
||||
// header = new
|
||||
// {
|
||||
// count = 0,
|
||||
// pass = 0,
|
||||
// notpass = 0,
|
||||
// missed_exam = 0,
|
||||
// other = 0
|
||||
// };
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// var dr = dt.Rows[0];
|
||||
// header = new
|
||||
// {
|
||||
// count = dr["count"].ToString().ToInteger(),
|
||||
// pass = dr["pass"].ToString().ToInteger(),
|
||||
// notpass = dr["notpass"].ToString().ToInteger(),
|
||||
// missed_exam = dr["missed_exam"].ToString().ToInteger(),
|
||||
// other = dr["other"].ToString().ToInteger()
|
||||
// };
|
||||
// }
|
||||
// }
|
||||
|
||||
// return Success(new
|
||||
// {
|
||||
// data = data,
|
||||
// header = header,
|
||||
// round = periodExam.Round,
|
||||
// year = periodExam.Year
|
||||
// });
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// return Error(ex);
|
||||
// }
|
||||
//}
|
||||
|
||||
[HttpPost("exam/{id:length(36)}")]
|
||||
public ActionResult<ResponseObject> GetExamResultById([FromBody] DisableExamRequest req, Guid id)
|
||||
public async Task<ActionResult<ResponseObject>> GetNewExamResultById([FromBody] DisableExamRequest req, Guid id)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
|
@ -1870,122 +2013,154 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers
|
|||
if (periodExam == null)
|
||||
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
|
||||
|
||||
var p_Id = new MySqlParameter("@id", id);
|
||||
var data = new List<dynamic>();
|
||||
var p_Id = new MySqlParameter("@id", id);
|
||||
|
||||
// ---------------------------
|
||||
// 1️. ดึงรายละเอียดสอบ (exam_info)
|
||||
// ---------------------------
|
||||
using (var cmd = _context.Database.GetDbConnection().CreateCommand())
|
||||
{
|
||||
cmd.CommandTimeout = 0;
|
||||
var sb = new StringBuilder();
|
||||
|
||||
// ปรับ SELECT * → SELECT เฉพาะ field ที่ C# ใช้
|
||||
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
|
||||
FROM exam_info
|
||||
WHERE disable_import_id = @id
|
||||
");
|
||||
|
||||
cmd.Parameters.Clear();
|
||||
sb.Clear();
|
||||
sb.Append(" SELECT * ");
|
||||
sb.Append(" FROM exam_info ");
|
||||
sb.Append(" WHERE disable_import_id = @id ");
|
||||
cmd.Parameters.Add(p_Id);
|
||||
|
||||
if (req.ExamAttribute != null && req.ExamAttribute != "")
|
||||
//// เพิ่ม 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
|
||||
if (!string.IsNullOrWhiteSpace(keywordParam))
|
||||
{
|
||||
sb.Append(" AND examAttribute = @a ");
|
||||
cmd.Parameters.Add(new MySqlParameter("@a", req.ExamAttribute));
|
||||
}
|
||||
|
||||
if (req.ExamResult != null && req.ExamResult != "")
|
||||
{
|
||||
sb.Append(" AND result = @r ");
|
||||
cmd.Parameters.Add(new MySqlParameter("@r", req.ExamResult));
|
||||
sb.Append(@"
|
||||
AND (
|
||||
examID LIKE @kw
|
||||
OR profileID LIKE @kw
|
||||
OR prefix LIKE @kw
|
||||
OR fullName LIKE @kw
|
||||
OR hddPosition LIKE @kw
|
||||
OR position_name LIKE @kw
|
||||
)
|
||||
");
|
||||
cmd.Parameters.Add(new MySqlParameter("@kw", $"%{keywordParam}%"));
|
||||
}
|
||||
|
||||
// Paging และ sorting
|
||||
sb.Append(" ORDER BY examID ");
|
||||
sb.Append(" LIMIT @PageSize OFFSET @Offset ");
|
||||
cmd.Parameters.Add(new MySqlParameter("@PageSize", req.PageSize));
|
||||
cmd.Parameters.Add(new MySqlParameter("@Offset", ((req.Page - 1) * req.PageSize)));
|
||||
cmd.Parameters.Add(new MySqlParameter("@Offset", (req.Page - 1) * req.PageSize));
|
||||
|
||||
cmd.CommandText = sb.ToString();
|
||||
|
||||
_context.Database.OpenConnection();
|
||||
var da = new MySqlDataAdapter(cmd as MySqlCommand);
|
||||
var dt = new DataTable();
|
||||
da.Fill(dt);
|
||||
|
||||
foreach (DataRow dr in dt.Rows)
|
||||
// ---------------------------
|
||||
// 2️. ใช้ DbDataReader แทน DataTable → ประหยัด memory และเร็วขึ้น
|
||||
// ---------------------------
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
data.Add(new
|
||||
while (reader.Read())
|
||||
{
|
||||
examID = dr["examID"].ToString(),
|
||||
profileID = dr["profileID"].ToString(),
|
||||
prefix = dr["prefix"].ToString(),
|
||||
fullName = dr["fullName"].ToString(),
|
||||
dateOfBirth = dr["dateofbirth"] == null || Convert.ToDateTime(dr["dateofbirth"]) == DateTime.MinValue ? "" : Convert.ToDateTime(dr["dateofbirth"]).ToThaiShortDate(),
|
||||
gender = dr["gender"].ToString(),
|
||||
degree = dr["degree"].ToString(),
|
||||
major = dr["major"].ToString(),
|
||||
majorgroup = dr["majorgroup"].ToString(),
|
||||
certificateNo = dr["certificateno"].ToString(),
|
||||
certificateIssueDate = dr["certificateIssueDate"] == null || Convert.ToDateTime(dr["certificateIssueDate"]) == DateTime.MinValue ? "" : Convert.ToDateTime(dr["certificateIssueDate"]).ToThaiShortDate(),
|
||||
ExamScore = dr["score"] == null ? 0 : dr["score"].ToString().ToInteger(),
|
||||
ExamResult = dr["result"].ToString(),
|
||||
ExamAttribute = dr["examAttribute"].ToString(),
|
||||
Remark = dr["remark"].ToString(),
|
||||
IsSpecial = dr["isspecial"].ToString(),
|
||||
applyDate = dr["applydate"] == null || Convert.ToDateTime(dr["applydate"]) == DateTime.MinValue ? "" : Convert.ToDateTime(dr["applydate"]).ToThaiShortDate(),
|
||||
university = dr["university"].ToString(),
|
||||
position_name = dr["position_name"].ToString(),
|
||||
hddPosition = dr["hddPosition"].ToString(),
|
||||
typeTest = dr["typeTest"].ToString(),
|
||||
position_level = dr["position_level"].ToString(),
|
||||
position_type = dr["position_type"].ToString(),
|
||||
exam_name = dr["exam_name"].ToString(),
|
||||
exam_order = dr["exam_order"].ToString(),
|
||||
score_year = Convert.ToInt32(dr["score_year"]).ToThaiYear().ToString(),
|
||||
});
|
||||
data.Add(new
|
||||
{
|
||||
examID = reader["examID"].ToString(),
|
||||
profileID = reader["profileID"].ToString(),
|
||||
prefix = reader["prefix"].ToString(),
|
||||
fullName = reader["fullName"].ToString(),
|
||||
dateOfBirth = reader["dateofbirth"] == DBNull.Value ? "" : Convert.ToDateTime(reader["dateofbirth"]).ToThaiShortDate(),
|
||||
gender = reader["gender"].ToString(),
|
||||
degree = reader["degree"].ToString(),
|
||||
major = reader["major"].ToString(),
|
||||
majorgroup = reader["majorgroup"].ToString(),
|
||||
certificateNo = reader["certificateno"].ToString(),
|
||||
certificateIssueDate = reader["certificateIssueDate"] == DBNull.Value ? "" : Convert.ToDateTime(reader["certificateIssueDate"]).ToThaiShortDate(),
|
||||
ExamScore = reader["score"] == DBNull.Value ? 0 : Convert.ToDecimal(reader["score"]),
|
||||
ExamResult = reader["result"].ToString(),
|
||||
ExamAttribute = reader["examAttribute"].ToString(),
|
||||
Remark = reader["remark"].ToString(),
|
||||
IsSpecial = reader["isspecial"].ToString(),
|
||||
applyDate = reader["applydate"] == DBNull.Value ? "" : Convert.ToDateTime(reader["applydate"]).ToThaiShortDate(),
|
||||
university = reader["university"].ToString(),
|
||||
position_name = reader["position_name"].ToString(),
|
||||
hddPosition = reader["hddPosition"].ToString(),
|
||||
typeTest = reader["typeTest"].ToString(),
|
||||
position_level = reader["position_level"].ToString(),
|
||||
position_type = reader["position_type"].ToString(),
|
||||
exam_name = reader["exam_name"].ToString(),
|
||||
exam_order = reader["exam_order"].ToString(),
|
||||
score_year = Convert.ToInt32(reader["score_year"]).ToThaiYear().ToString()
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//if (data != null && data.Count > 0)
|
||||
// data = data.Skip((req.Page - 1) * req.PageSize).Take(req.PageSize).ToList();
|
||||
|
||||
// ---------------------------
|
||||
// 3️. ดึงสรุปคะแนน
|
||||
// ---------------------------
|
||||
dynamic header = null;
|
||||
using (var cmd = _context.Database.GetDbConnection().CreateCommand())
|
||||
int _count = await _context.Disables.Where(x=> x.PeriodExam.Id == id).CountAsync();
|
||||
if (data.Count > 0)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
cmd.CommandTimeout = 0;
|
||||
cmd.Parameters.Clear();
|
||||
sb.Clear();
|
||||
sb.Append(" SELECT * ");
|
||||
sb.Append(" FROM sum_exam_info ");
|
||||
sb.Append(" WHERE disable_import_id = @id ");
|
||||
cmd.Parameters.Add(p_Id);
|
||||
|
||||
cmd.CommandText = sb.ToString();
|
||||
|
||||
_context.Database.OpenConnection();
|
||||
MySqlDataAdapter da = new MySqlDataAdapter(cmd as MySqlCommand);
|
||||
DataTable dt = new DataTable();
|
||||
da.Fill(dt);
|
||||
if (dt.Rows.Count == 0)
|
||||
{
|
||||
header = new
|
||||
{
|
||||
count = 0,
|
||||
pass = 0,
|
||||
notpass = 0,
|
||||
missed_exam = 0,
|
||||
other = 0
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
var dr = dt.Rows[0];
|
||||
header = new
|
||||
{
|
||||
count = dr["count"].ToString().ToInteger(),
|
||||
pass = dr["pass"].ToString().ToInteger(),
|
||||
notpass = dr["notpass"].ToString().ToInteger(),
|
||||
missed_exam = dr["missed_exam"].ToString().ToInteger(),
|
||||
other = dr["other"].ToString().ToInteger()
|
||||
};
|
||||
}
|
||||
header = await _context.DisableScores
|
||||
.Include(x => x.ScoreImport)
|
||||
.Where(x => x.ScoreImport.PeriodExamId == id)
|
||||
.GroupBy(x => 1)
|
||||
.Select(g => new
|
||||
{
|
||||
count = _count,
|
||||
pass = g.Count(x => x.ExamStatus == "ผ่าน"),
|
||||
notpass = g.Count(x => x.ExamStatus == "ไม่ผ่าน"),
|
||||
missed_exam = g.Count(x => x.ExamStatus == "ขส."),
|
||||
other = g.Count(x =>
|
||||
string.IsNullOrEmpty(x.ExamStatus) ||
|
||||
!new[] { "ผ่าน", "ไม่ผ่าน", "ขส." }.Contains(x.ExamStatus)
|
||||
)
|
||||
})
|
||||
.FirstOrDefaultAsync()
|
||||
?? new // ใช้ null-coalescing กันกรณีไม่มีข้อมูล (แทน else เดิม)
|
||||
{
|
||||
count = _count,
|
||||
pass = 0,
|
||||
notpass = 0,
|
||||
missed_exam = 0,
|
||||
other = 0
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
header = new
|
||||
{
|
||||
count = _count,
|
||||
pass = 0,
|
||||
notpass = 0,
|
||||
missed_exam = 0,
|
||||
other = 0
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
return Success(new
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue