Merge branch 'develop'

This commit is contained in:
Adisak 2025-11-11 12:05:33 +07:00
commit b985a5575a
7 changed files with 59 additions and 13 deletions

View file

@ -113,6 +113,7 @@ namespace BMA.EHR.Application.Repositories
{ {
try try
{ {
var json = JsonConvert.SerializeObject(body); var json = JsonConvert.SerializeObject(body);
var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
//stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); //stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

View file

@ -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") public async Task CalInsigniaRequestBkkByType(string type = "officer")
{ {
@ -1583,12 +1588,10 @@ namespace BMA.EHR.Application.Repositories.Reports
.AsQueryable() .AsQueryable()
.ToListAsync(); .ToListAsync();
insigniaPeriods = insigniaPeriods 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) foreach (var insigniaPeriod in insigniaPeriods)
{ {
if (insigniaPeriod.StartDate >= DateTime.Now.Date || insigniaPeriod.InsigniaRequests.Count > 0)
continue;
var organizations = await _userProfileRepository.GetActiveRootLatestAsync(AccessToken); var organizations = await _userProfileRepository.GetActiveRootLatestAsync(AccessToken);
if (organizations == null) if (organizations == null)
continue; continue;

View file

@ -66,7 +66,7 @@ namespace BMA.EHR.Application.Repositories
{ {
try try
{ {
var apiPath = $"{_configuration["API"]}/org/dotnet/root/officer/{rootId}"; var apiPath = $"{_configuration["API"]}/org/unauthorize/root/officer/{rootId}";
var apiKey = _configuration["API_KEY"]; var apiKey = _configuration["API_KEY"];
@ -132,7 +132,7 @@ namespace BMA.EHR.Application.Repositories
{ {
try 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 apiKey = _configuration["API_KEY"];
var body = new var body = new
@ -146,7 +146,7 @@ namespace BMA.EHR.Application.Repositories
// สร้าง HTTP content // สร้าง HTTP content
//var body = new StringContent(bodyJson, Encoding.UTF8, "application/json"); //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) if (apiResult != null)
{ {
@ -157,7 +157,7 @@ namespace BMA.EHR.Application.Repositories
return null; return null;
} }
catch catch(Exception ex)
{ {
throw; throw;
} }
@ -1088,7 +1088,7 @@ namespace BMA.EHR.Application.Repositories
{ {
try try
{ {
var apiPath = $"{_configuration["API"]}/org/active/root/all"; var apiPath = $"{_configuration["API"]}/org/unauthorize/active/root/all";
var apiKey = _configuration["API_KEY"]; var apiKey = _configuration["API_KEY"];
var apiResult = await GetExternalAPIAsync(apiPath, accessToken ?? "", apiKey); var apiResult = await GetExternalAPIAsync(apiPath, accessToken ?? "", apiKey);

View file

@ -791,7 +791,7 @@ namespace BMA.EHR.Insignia.Service.Controllers
var insigniaManageOrganiation = await _context.InsigniaManageOrganiations.AsQueryable() var insigniaManageOrganiation = await _context.InsigniaManageOrganiations.AsQueryable()
.Include(x => x.InsigniaManageProfiles) .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) if (insigniaManageOrganiation == null)
return Error(GlobalMessages.InsigniaManageOrgNotFound); return Error(GlobalMessages.InsigniaManageOrgNotFound);

View file

@ -286,6 +286,14 @@ namespace BMA.EHR.Insignia.Service.Controllers
#endregion #endregion
[HttpGet("test")]
[AllowAnonymous]
public async Task<ActionResult<ResponseObject>> Test()
{
await _insigniaReportRepository.CalInsigniaRequestBkkByType("employee");
return Success();
}
#region " จัดทำรายชื่อครูที่มีสิทธิในการยืนขอเครื่องราชฯ " #region " จัดทำรายชื่อครูที่มีสิทธิในการยืนขอเครื่องราชฯ "
/// <summary> /// <summary>

View file

@ -125,9 +125,14 @@ var builder = WebApplication.CreateBuilder(args);
DashboardJobListLimit = 50000, DashboardJobListLimit = 50000,
TransactionTimeout = TimeSpan.FromMinutes(1), TransactionTimeout = TimeSpan.FromMinutes(1),
InvisibilityTimeout = TimeSpan.FromHours(3), 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 // RabbitMQ
@ -184,10 +189,34 @@ var app = builder.Build();
{ {
manager.AddOrUpdate("แจ้งเตือนรอบเครื่องราชฯ", Job.FromExpression<InsigniaReportRepository>(x => x.NotifyInsignia()), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local); manager.AddOrUpdate("แจ้งเตือนรอบเครื่องราชฯ", Job.FromExpression<InsigniaReportRepository>(x => x.NotifyInsignia()), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local);
manager.AddOrUpdate("ล็อกข้อมูลรอบเครื่องราชฯ", Job.FromExpression<InsigniaReportRepository>(x => x.LockInsignia()), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local); manager.AddOrUpdate("ล็อกข้อมูลรอบเครื่องราชฯ", Job.FromExpression<InsigniaReportRepository>(x => x.LockInsignia()), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local);
manager.AddOrUpdate("คำนวนผู้ได้รับเครื่องราชฯ", Job.FromExpression<InsigniaReportRepository>(x => x.CalInsigniaRequestBkkByType("officer")), 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<InsigniaReportRepository>(x => x.CalInsigniaRequestBkkByType("employee")), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local); //manager.AddOrUpdate("คำนวนผู้ได้รับเครื่องราชฯ Employee", Job.FromExpression<InsigniaReportRepository>(x => x.CalInsigniaRequestBkkByType("employee")), Cron.Daily(Int32.Parse(builder.Configuration["KeycloakCron:Hour"]), Int32.Parse(builder.Configuration["KeycloakCron:Minute"])), TimeZoneInfo.Local);
} }
RecurringJob.AddOrUpdate<InsigniaReportRepository>(
"คำนวนผู้ได้รับเครื่องราชฯ",
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<InsigniaReportRepository>(
"คำนวนผู้ได้รับเครื่องราชฯ 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 // apply migrations
await using var scope = app.Services.CreateAsyncScope(); await using var scope = app.Services.CreateAsyncScope();
await using var db = scope.ServiceProvider.GetRequiredService<ApplicationDBContext>(); await using var db = scope.ServiceProvider.GetRequiredService<ApplicationDBContext>();
@ -196,9 +225,13 @@ var app = builder.Build();
//var rabbitMQConsumer = app.Services.GetRequiredService<RabbitMQConsumer>(); //var rabbitMQConsumer = app.Services.GetRequiredService<RabbitMQConsumer>();
//rabbitMQConsumer.StartReceiving(); //rabbitMQConsumer.StartReceiving();
app.Run(); app.Run();
} }
void ConfigureLogs() void ConfigureLogs()
{ {
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

View file

@ -2364,6 +2364,7 @@ namespace BMA.EHR.Retirement.Service.Controllers
commandCode = r.commandCode, commandCode = r.commandCode,
commandName = r.commandName, commandName = r.commandName,
remark = r.remark, remark = r.remark,
resignId = p.Id,
}).ToList(); }).ToList();
var baseAPIOrg = _configuration["API"]; var baseAPIOrg = _configuration["API"];