Merge branch 'develop'
All checks were successful
Build & Deploy Retirement Service / build (push) Successful in 1m10s

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

View file

@ -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");

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")
{
@ -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;

View file

@ -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);

View file

@ -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);

View file

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

View file

@ -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<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.CalInsigniaRequestBkkByType("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("คำนวนผู้ได้รับเครื่องราชฯ", () => 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);
}
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
await using var scope = app.Services.CreateAsyncScope();
await using var db = scope.ServiceProvider.GetRequiredService<ApplicationDBContext>();
@ -196,9 +225,13 @@ var app = builder.Build();
//var rabbitMQConsumer = app.Services.GetRequiredService<RabbitMQConsumer>();
//rabbitMQConsumer.StartReceiving();
app.Run();
}
void ConfigureLogs()
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

View file

@ -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"];