diff --git a/Controllers/DisableController.cs b/Controllers/DisableController.cs
index c982f03..5f48c51 100644
--- a/Controllers/DisableController.cs
+++ b/Controllers/DisableController.cs
@@ -2187,8 +2187,8 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers
.Where(x => x.ExamId == examId)
.Join(_context.DisableScores.AsQueryable()
.Include(x => x.ScoreImport),
- rc => new { PeriodExamId = rc.PeriodExam.Id, rc.ExamId },
- sc => new { PeriodExamId = sc.ScoreImport.PeriodExamId, sc.ExamId },
+ rc => new { /*rc.PeriodExam.Year,*/ rc.ExamId },
+ sc => new { /*sc.ScoreImport.Year,*/ sc.ExamId },
(p, sr) => new
{
ExamID = p.ExamId,
diff --git a/Controllers/PeriodExamController.cs b/Controllers/PeriodExamController.cs
index 84ea0d9..b52b0f6 100644
--- a/Controllers/PeriodExamController.cs
+++ b/Controllers/PeriodExamController.cs
@@ -749,56 +749,6 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers
}
}
- ///
- /// ดาวน์โหลดรายชื่อผู้มีสิทธิ์สอบ
- ///
- /// รหัสรอบสมัคร
- ///
- /// เมื่อทำการอ่านโหลดผู้สมัครสอบสำเร็จ
- /// ไม่ได้ Login เข้าระบบ
- /// เมื่อเกิดข้อผิดพลาดในการทำงาน
- [HttpGet("download/candidate-exam/{examId:length(36)}")]
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status401Unauthorized)]
- [ProducesResponseType(StatusCodes.Status500InternalServerError)]
- public async Task> DownloadCandidateExamAsync(string examId)
- {
- try
- {
- var data = await _periodExamService.DownloadCandidateExamAsync(examId);
- return Success(data);
- }
- catch (Exception ex)
- {
- return Error(ex);
- }
- }
-
- ///
- /// ดาวน์โหลดรายชื่อผู้สอบคัดเลือกได้
- ///
- /// รหัสรอบสมัคร
- ///
- /// เมื่อทำการอ่านโหลดผู้สมัครสอบสำเร็จ
- /// ไม่ได้ Login เข้าระบบ
- /// เมื่อเกิดข้อผิดพลาดในการทำงาน
- [HttpGet("download/pass-exam/{examId:length(36)}")]
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status401Unauthorized)]
- [ProducesResponseType(StatusCodes.Status500InternalServerError)]
- public async Task> DownloadPassExamAsync(string examId)
- {
- try
- {
- var data = await _periodExamService.DownloadPassExamAsync(examId);
- return Success(data);
- }
- catch (Exception ex)
- {
- return Error(ex, "เกิดข้อผิดพลาดในการแสดงรายงาน");
- }
- }
-
///
/// โหลดผู้สมัครสอบ
///
diff --git a/Core/RequestLoggingMiddleware.cs b/Core/RequestLoggingMiddleware.cs
index a39a4d9..6d306de 100644
--- a/Core/RequestLoggingMiddleware.cs
+++ b/Core/RequestLoggingMiddleware.cs
@@ -2,7 +2,6 @@
using Microsoft.Extensions.Configuration;
using Nest;
using System.Diagnostics;
-using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text.Encodings.Web;
using System.Text.Json;
@@ -30,49 +29,6 @@ namespace BMA.EHR.Recurit.Exam.Service.Core
SystemName = "recruiting";
}
- ///
- /// แกะ JWT token เพื่อดึง claims ต่างๆ
- ///
- private JwtSecurityToken? ParseToken(string token)
- {
- try
- {
- var tokenHandler = new JwtSecurityTokenHandler();
- var jwtToken = tokenHandler.ReadJwtToken(token.Replace("Bearer ", ""));
- return jwtToken;
- }
- catch
- {
- return null;
- }
- }
-
- ///
- /// ดึงค่า claim จาก token โดยลองชื่อหลายแบบ
- ///
- private string? GetClaimValue(JwtSecurityToken? token, params string[] claimNames)
- {
- if (token == null) return null;
-
- foreach (var name in claimNames)
- {
- var claim = token.Claims.FirstOrDefault(c => c.Type == name);
- if (claim != null)
- return claim.Value;
- }
- return null;
- }
-
- ///
- /// ดึงค่า Guid claim จาก token
- ///
- private Guid? GetGuidClaim(JwtSecurityToken? token, params string[] claimNames)
- {
- var value = GetClaimValue(token, claimNames);
- if (Guid.TryParse(value, out var guid))
- return guid;
- return null;
- }
public async Task Invoke(HttpContext context)
{
@@ -136,22 +92,28 @@ namespace BMA.EHR.Recurit.Exam.Service.Core
// เปลี่ยน stream ของ Response เพื่อให้สามารถอ่านได้
context.Response.Body = memoryStream;
+
+
+ // Extract all required data from JWT token claims
var keycloakId = context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value ?? Guid.Empty.ToString("D");
- var tokenHeader = context.Request.Headers["Authorization"].ToString();
- // แกะ JWT token เพื่อดึง claims ต่างๆ
- var jwtToken = ParseToken(tokenHeader);
+ var prefix = context.User?.FindFirst("prefix")?.Value;
+ var firstName = context.User?.FindFirst("given_name")?.Value;
+ var lastName = context.User?.FindFirst("family_name")?.Value;
+ var preferredUsername = context.User?.FindFirst("preferred_username")?.Value;
- // ดึงข้อมูลจาก claims โดยลองชื่อหลายแบบ (camelCase, snake_case, ฯลฯ)
- var prefix = GetClaimValue(jwtToken, "prefix", "Prefix", "PREFIX");
- var firstName = GetClaimValue(jwtToken, "given_name", "firstname", "firstName", "FirstName", "FIRSTNAME");
- var lastName = GetClaimValue(jwtToken, "family_name", "lastname", "lastName", "LastName", "LASTNAME");
- var preferredUsername = GetClaimValue(jwtToken, "preferred_username", "preferred_username", "PreferredUsername");
- var orgRootDnaId = GetGuidClaim(jwtToken, "orgRootDnaId", "org_root_dna_id", "OrgRootDnaId", "rootDnaId");
- var orgChild1DnaId = GetGuidClaim(jwtToken, "orgChild1DnaId", "org_child1_dna", "OrgChild1Dna", "child1DnaId");
- var orgChild2DnaId = GetGuidClaim(jwtToken, "orgChild2DnaId", "org_child2_dna", "OrgChild2Dna", "child2DnaId");
- var orgChild3DnaId = GetGuidClaim(jwtToken, "orgChild3DnaId", "org_child3_dna", "OrgChild3Dna", "child3DnaId");
- var orgChild4DnaId = GetGuidClaim(jwtToken, "orgChild4DnaId", "org_child4_dna", "OrgChild4Dna", "child4DnaId");
+ var orgRootDnaId = context.User?.FindFirst("orgRootDnaId")?.Value;
+ var orgChild1DnaId = context.User?.FindFirst("orgChild1DnaId")?.Value;
+ var orgChild2DnaId = context.User?.FindFirst("orgChild2DnaId")?.Value;
+ var orgChild3DnaId = context.User?.FindFirst("orgChild3DnaId")?.Value;
+ var orgChild4DnaId = context.User?.FindFirst("orgChild4DnaId")?.Value;
+
+ // Parse Guid values safely
+ Guid? rootDnaId = Guid.TryParse(orgRootDnaId, out var rid) ? rid : null;
+ Guid? child1DnaId = Guid.TryParse(orgChild1DnaId, out var c1) ? c1 : null;
+ Guid? child2DnaId = Guid.TryParse(orgChild2DnaId, out var c2) ? c2 : null;
+ Guid? child3DnaId = Guid.TryParse(orgChild3DnaId, out var c3) ? c3 : null;
+ Guid? child4DnaId = Guid.TryParse(orgChild4DnaId, out var c4) ? c4 : null;
await _next(context); // ดำเนินการต่อไปยัง Middleware อื่น ๆ
@@ -238,7 +200,7 @@ namespace BMA.EHR.Recurit.Exam.Service.Core
{
logType = logType,
ip = context.Connection.RemoteIpAddress?.ToString(),
- rootId = orgRootDnaId?.ToString("D"),
+ rootId = rootDnaId,
systemName = SystemName,
startTimeStamp = startTime.ToString("o"),
endTimeStamp = endTime.ToString("o"),
diff --git a/Response/CandidateStatusResponse.cs b/Response/CandidateStatusResponse.cs
index ac6b699..e36d0a7 100644
--- a/Response/CandidateStatusResponse.cs
+++ b/Response/CandidateStatusResponse.cs
@@ -9,8 +9,5 @@ namespace BMA.EHR.Recurit.Exam.Service.Response
public string? RejectDetail { get; set; }
public bool? IsShowExamInfo { get; set; }
-
- public bool? IsShowResult { get; set; }
-
}
}
diff --git a/Services/CandidateService.cs b/Services/CandidateService.cs
index 64c57a6..fc1ba9f 100644
--- a/Services/CandidateService.cs
+++ b/Services/CandidateService.cs
@@ -1978,19 +1978,7 @@ namespace BMA.EHR.Recurit.Exam.Service.Services
if (candidate == null)
throw new Exception(GlobalMessages.CandidateNotFound);
- bool IsShowResult = true;
- if (exam.AnnouncementDate != null)
- {
- var showResultEndDate = exam.AnnouncementDate.Value.Date.AddDays(15);
- IsShowResult = DateTime.Now.Date <= showResultEndDate;
- }
-
- return new CandidateStatusResponse {
- Status = candidate.Status,
- RejectDetail = candidate.RejectDetail,
- IsShowExamInfo = candidate.IsShowExamInfo,
- IsShowResult = IsShowResult,
- };
+ return new CandidateStatusResponse { Status = candidate.Status, RejectDetail = candidate.RejectDetail, IsShowExamInfo = candidate.IsShowExamInfo };
}
public async Task UserCheckCandidateService(string examId, string positionId, string status)
diff --git a/Services/PeriodExamService.cs b/Services/PeriodExamService.cs
index c967bca..aeefa24 100644
--- a/Services/PeriodExamService.cs
+++ b/Services/PeriodExamService.cs
@@ -1625,101 +1625,6 @@ namespace BMA.EHR.Recurit.Exam.Service.Services
};
}
- public async Task DownloadCandidateExamAsync(string examId)
- {
- var periodExam = await _context.PeriodExams.AsQueryable()
- .Where(x => x.CheckDisability == false)
- .FirstOrDefaultAsync(x => x.Id == Guid.Parse(examId));
-
- if (periodExam == null)
- throw new Exception(GlobalMessages.ExamNotFound);
-
- var data = await _context.Candidates.AsQueryable()
- .Include(x => x.PeriodExam)
- .Where(x => x.PeriodExam == periodExam)
- .Where(x => x.Status != "register")
- .Where(x => x.ExamIdenNumber != null && x.ExamIdenNumber != "")
- .OrderBy(x => x.ExamIdenNumber)
- .Select(p => new
- {
- ExamId = p.ExamIdenNumber == null ? null : (p.ExamIdenNumber.ToThaiNumber()),
- FullName = $"{p.PrefixName}{p.FirstName} {p.LastName}",
- PositionName = "",
- ExamName =
- ($"{p.PeriodExam.Name} ครั้งที่ {p.PeriodExam.Round}/{p.PeriodExam.Year.Value.ToThaiYear()}").ToThaiNumber(),
- }).ToListAsync();
-
- if (data.Count == 0)
- throw new Exception("ไม่พบข้อมูลในระบบ");
-
- var examName = data[0].ExamName;
- return new
- {
- template = "rptCandidateList",
- reportName = $"รายชื่อผู้มีสิทธิ์สอบ_{data.First().ExamName}",
- data = new
- {
- examName = examName,
- data = data
- }
- };
- }
-
- public async Task DownloadPassExamAsync(string examId)
- {
- var periodExam = await _context.PeriodExams.AsQueryable()
- .Where(x => x.CheckDisability == false)
- .FirstOrDefaultAsync(x => x.Id == Guid.Parse(examId));
-
- if (periodExam == null)
- throw new Exception(GlobalMessages.ExamNotFound);
-
- var candidates = await _context.Candidates.AsQueryable()
- .Include(x => x.PeriodExam)
- .ThenInclude(x => x.ScoreImport)
- .Where(x => x.PeriodExam == periodExam)
- .Where(x => x.Status != "register")
- .ToListAsync();
-
- var data = candidates.Select((p, idx) => new
- {
- SeatNumber = p.SeatNumber == null ? "-" : (p.SeatNumber.ToThaiNumber()),
- CitizenId = p.CitizenId == null ? "-" : (p.CitizenId.ToThaiNumber()),
- FullName = $"{p.PrefixName}{p.FirstName} {p.LastName}",
- DateOfBirth = p.DateOfBirth == null ? "-" : (p.DateOfBirth.Value.ToThaiShortDate()),
- ExamName = ($"{p.PeriodExam.Name} ครั้งที่ {p.PeriodExam.Round}/{p.PeriodExam.Year.Value.ToThaiYear()}").ToThaiNumber(),
- Number = p.Number == null ? (idx + 1).ToString().ToThaiNumber() : p.Number.ToThaiNumber(),
- FullA = "๐",
- SumA = "๐",
- FullB = p.PointTotalB == null ? "-" : p.PointTotalB.ToString(),
- SumB = p.PointB == null ? "-" : p.PointB.ToString(),
- FullC = p.PointTotalC == null ? "-" : p.PointTotalC.ToString(),
- SumC = p.PointC == null ? "-" : p.PointC.ToString(),
- SumScore = ((Convert.ToInt32(p.PointB ?? "0") + Convert.ToInt32(p.PointC ?? "0")).ToString()).ToThaiNumber(),
- ExamResult = p.Pass,
- ExamThaiId = p.ExamIdenNumber == null ? "-" : p.ExamIdenNumber.ToThaiNumber(),
- ExamId = p.ExamIdenNumber,
- })
- .OrderBy(x => x.ExamId)
- .Where(x => x.ExamResult?.Trim() == "ได้")
- .ToList();
-
- if (data.Count == 0)
- throw new Exception("ไม่พบข้อมูลในระบบ");
-
- var examName = data[0].ExamName;
- return new
- {
- template = "rptPassExamList",
- reportName = $"รายชื่อผู้สอบแข่งขันได้_{periodExam.Name} ครั้งที่ {periodExam.Round}/{periodExam.Year.Value.ToThaiYear()}",
- data = new
- {
- examName = examName,
- data = data
- }
- };
- }
-
public async Task GetsPaymentExamAsync(string examId)
{
var periodExam = await _context.PeriodExams.AsQueryable()