diff --git a/BMA.EHR.Application/Repositories/GenericRepository.cs b/BMA.EHR.Application/Repositories/GenericRepository.cs index 1f10ca37..b5519c15 100644 --- a/BMA.EHR.Application/Repositories/GenericRepository.cs +++ b/BMA.EHR.Application/Repositories/GenericRepository.cs @@ -113,6 +113,7 @@ namespace BMA.EHR.Application.Repositories { try { + var json = JsonConvert.SerializeObject(body); var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); //stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); diff --git a/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs b/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs index 19fe5ce4..1e0dcac7 100644 --- a/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs @@ -1575,6 +1575,11 @@ namespace BMA.EHR.Application.Repositories.Reports } } + public void CalculateInsigniaRequestBkkByType(string type = "officer") + { + CalInsigniaRequestBkkByType(type).GetAwaiter().GetResult(); + } + //คำนวนผู้ได้รับเครื่องราชฯ public async Task CalInsigniaRequestBkkByType(string type = "officer") { @@ -1583,12 +1588,10 @@ namespace BMA.EHR.Application.Repositories.Reports .AsQueryable() .ToListAsync(); insigniaPeriods = insigniaPeriods - .Where(x => x.StartDate <= DateTime.Now.Date || x.InsigniaRequests.Count == 0).ToList(); + .Where(x => x.StartDate <= DateTime.Now.Date && x.InsigniaRequests.Where(x => x.ProfileType!.ToLower().Trim() == type.Trim().ToLower()).Count() == 0).ToList(); foreach (var insigniaPeriod in insigniaPeriods) { - if (insigniaPeriod.StartDate >= DateTime.Now.Date || insigniaPeriod.InsigniaRequests.Count > 0) - continue; var organizations = await _userProfileRepository.GetActiveRootLatestAsync(AccessToken); if (organizations == null) continue; diff --git a/BMA.EHR.Application/Repositories/UserProfileRepository.cs b/BMA.EHR.Application/Repositories/UserProfileRepository.cs index a5812b2a..2b420e5d 100644 --- a/BMA.EHR.Application/Repositories/UserProfileRepository.cs +++ b/BMA.EHR.Application/Repositories/UserProfileRepository.cs @@ -66,7 +66,7 @@ namespace BMA.EHR.Application.Repositories { try { - var apiPath = $"{_configuration["API"]}/org/dotnet/root/officer/{rootId}"; + var apiPath = $"{_configuration["API"]}/org/unauthorize/root/officer/{rootId}"; var apiKey = _configuration["API_KEY"]; @@ -132,7 +132,7 @@ namespace BMA.EHR.Application.Repositories { try { - var apiPath = $"{_configuration["API"]}/org/dotnet/find/employee/position"; + var apiPath = $"{_configuration["API"]}/org/unauthorize/find/employee/position"; var apiKey = _configuration["API_KEY"]; var body = new @@ -146,7 +146,7 @@ namespace BMA.EHR.Application.Repositories // สร้าง HTTP content //var body = new StringContent(bodyJson, Encoding.UTF8, "application/json"); - var apiResult = await PostExternalAPIAsync(apiPath, accessToken, body, apiKey); + var apiResult = await PostExternalAPIAsync(apiPath, accessToken ?? "", body, apiKey); if (apiResult != null) { @@ -157,7 +157,7 @@ namespace BMA.EHR.Application.Repositories return null; } - catch + catch(Exception ex) { throw; } @@ -1088,7 +1088,7 @@ namespace BMA.EHR.Application.Repositories { try { - var apiPath = $"{_configuration["API"]}/org/active/root/all"; + var apiPath = $"{_configuration["API"]}/org/unauthorize/active/root/all"; var apiKey = _configuration["API_KEY"]; var apiResult = await GetExternalAPIAsync(apiPath, accessToken ?? "", apiKey); diff --git a/BMA.EHR.Insignia/Controllers/InsigniaManageController.cs b/BMA.EHR.Insignia/Controllers/InsigniaManageController.cs index aaf9dffc..67002911 100644 --- a/BMA.EHR.Insignia/Controllers/InsigniaManageController.cs +++ b/BMA.EHR.Insignia/Controllers/InsigniaManageController.cs @@ -791,7 +791,7 @@ namespace BMA.EHR.Insignia.Service.Controllers var insigniaManageOrganiation = await _context.InsigniaManageOrganiations.AsQueryable() .Include(x => x.InsigniaManageProfiles) - .FirstOrDefaultAsync(x => x.OrganizationId == insigniaNoteProfile.RootId && x.InsigniaManage == insigniaManage); + .FirstOrDefaultAsync(x => x.OrganizationId == insigniaNoteProfile.RootId && x.InsigniaManage.Id == insigniaManage.Id); // แก้เป็นหาจากหน่วยงานยืมเพิม manage id if (insigniaManageOrganiation == null) return Error(GlobalMessages.InsigniaManageOrgNotFound); diff --git a/BMA.EHR.Insignia/Controllers/InsigniaRequestController.cs b/BMA.EHR.Insignia/Controllers/InsigniaRequestController.cs index dbb553ee..005f9882 100644 --- a/BMA.EHR.Insignia/Controllers/InsigniaRequestController.cs +++ b/BMA.EHR.Insignia/Controllers/InsigniaRequestController.cs @@ -286,6 +286,14 @@ namespace BMA.EHR.Insignia.Service.Controllers #endregion + [HttpGet("test")] + [AllowAnonymous] + public async Task> Test() + { + await _insigniaReportRepository.CalInsigniaRequestBkkByType("employee"); + return Success(); + } + #region " จัดทำรายชื่อครูที่มีสิทธิในการยืนขอเครื่องราชฯ " /// diff --git a/BMA.EHR.Insignia/Program.cs b/BMA.EHR.Insignia/Program.cs index cd3684fe..a4dd716a 100644 --- a/BMA.EHR.Insignia/Program.cs +++ b/BMA.EHR.Insignia/Program.cs @@ -125,9 +125,14 @@ var builder = WebApplication.CreateBuilder(args); DashboardJobListLimit = 50000, TransactionTimeout = TimeSpan.FromMinutes(1), InvisibilityTimeout = TimeSpan.FromHours(3), - TablesPrefix = "Hangfire" + TablesPrefix = "Hangfire_Insignia" }))); - builder.Services.AddHangfireServer(); + builder.Services.AddHangfireServer(options => + { + options.ServerName = "Insignia-Server"; // ← ระบุชื่อ server + options.WorkerCount = 5; // ← + options.Queues = new[] { "insignia" }; // ← worker จะรันเฉพาะ queue "insignia" + }); // RabbitMQ @@ -184,10 +189,34 @@ var app = builder.Build(); { manager.AddOrUpdate("แจ้งเตือนรอบเครื่องราชฯ", Job.FromExpression(x => x.NotifyInsignia()), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local); manager.AddOrUpdate("ล็อกข้อมูลรอบเครื่องราชฯ", Job.FromExpression(x => x.LockInsignia()), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local); - manager.AddOrUpdate("คำนวนผู้ได้รับเครื่องราชฯ", Job.FromExpression(x => x.CalInsigniaRequestBkkByType("officer")), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local); - manager.AddOrUpdate("คำนวนผู้ได้รับเครื่องราชฯ Employee", Job.FromExpression(x => x.CalInsigniaRequestBkkByType("employee")), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local); + //manager.AddOrUpdate("คำนวนผู้ได้รับเครื่องราชฯ", () => CalculateInsigniaRequestBkkByType("officer"), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local); + //manager.AddOrUpdate("คำนวนผู้ได้รับเครื่องราชฯ Employee", Job.FromExpression(x => x.CalInsigniaRequestBkkByType("employee")), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local); } + RecurringJob.AddOrUpdate( + "คำนวนผู้ได้รับเครื่องราชฯ", + x => x.CalculateInsigniaRequestBkkByType("officer"), + Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]) - 5, + Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), + new RecurringJobOptions + { + TimeZone = TimeZoneInfo.Local, + QueueName = "insignia" // ← กำหนด queue + } + ); + + RecurringJob.AddOrUpdate( + "คำนวนผู้ได้รับเครื่องราชฯ Employee", + x => x.CalculateInsigniaRequestBkkByType("employee"), + Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]) - 4, + Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), + new RecurringJobOptions + { + TimeZone = TimeZoneInfo.Local, + QueueName = "insignia" // ← กำหนด queue + } + ); + // apply migrations await using var scope = app.Services.CreateAsyncScope(); await using var db = scope.ServiceProvider.GetRequiredService(); @@ -196,9 +225,13 @@ var app = builder.Build(); //var rabbitMQConsumer = app.Services.GetRequiredService(); //rabbitMQConsumer.StartReceiving(); + + app.Run(); } + + void ConfigureLogs() { var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementResignEmployeeController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementResignEmployeeController.cs index d5b7037d..3f1e0cdc 100644 --- a/BMA.EHR.Retirement.Service/Controllers/RetirementResignEmployeeController.cs +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementResignEmployeeController.cs @@ -2364,6 +2364,7 @@ namespace BMA.EHR.Retirement.Service.Controllers commandCode = r.commandCode, commandName = r.commandName, remark = r.remark, + resignId = p.Id, }).ToList(); var baseAPIOrg = _configuration["API"];