แก้บัญหาการโหลดข้อมูลช้า

- รายชื่อเครื่องราชย์
This commit is contained in:
Suphonchai Phoonsawat 2024-07-04 14:32:50 +07:00
parent e27577bccb
commit 1e9b7d8769

View file

@ -1,26 +1,21 @@
using System.Runtime.InteropServices; using BMA.EHR.Application.Repositories;
using System.Security.Claims;
using BMA.EHR.Application.Repositories;
using BMA.EHR.Application.Repositories.MessageQueue; using BMA.EHR.Application.Repositories.MessageQueue;
using BMA.EHR.Application.Requests; using BMA.EHR.Application.Requests;
using BMA.EHR.Application.Responses.Insignias; using BMA.EHR.Application.Responses.Insignias;
using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Common;
using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Extensions;
using BMA.EHR.Domain.Models.HR;
using BMA.EHR.Domain.Models.Insignias; using BMA.EHR.Domain.Models.Insignias;
using BMA.EHR.Domain.Models.MetaData;
using BMA.EHR.Domain.Shared; using BMA.EHR.Domain.Shared;
using BMA.EHR.Infrastructure.Persistence; using BMA.EHR.Infrastructure.Persistence;
using BMA.EHR.Insignia.Service.Requests; using BMA.EHR.Insignia.Service.Requests;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal; using Microsoft.EntityFrameworkCore.Metadata.Internal;
using Newtonsoft.Json; using Newtonsoft.Json;
using OfficeOpenXml; using OfficeOpenXml;
using Swashbuckle.AspNetCore.Annotations; using Swashbuckle.AspNetCore.Annotations;
using static System.Collections.Specialized.BitVector32; using System.Security.Claims;
namespace BMA.EHR.Insignia.Service.Controllers namespace BMA.EHR.Insignia.Service.Controllers
{ {
@ -41,13 +36,16 @@ namespace BMA.EHR.Insignia.Service.Controllers
private readonly string Royal_Type = "Royal"; private readonly string Royal_Type = "Royal";
private readonly UserProfileRepository _userProfileRepository; private readonly UserProfileRepository _userProfileRepository;
private readonly InsigniaPeriodsRepository _insigniaPeriodRepository;
public InsigniaRequestController(ApplicationDBContext context, public InsigniaRequestController(ApplicationDBContext context,
MinIOService documentService, MinIOService documentService,
InsigniaPeriodsRepository repository, InsigniaPeriodsRepository repository,
NotificationRepository repositoryNoti, NotificationRepository repositoryNoti,
IWebHostEnvironment hostingEnvironment, IWebHostEnvironment hostingEnvironment,
IHttpContextAccessor httpContextAccessor, IHttpContextAccessor httpContextAccessor,
UserProfileRepository userProfileRepository) UserProfileRepository userProfileRepository,
InsigniaPeriodsRepository insigniaPeriodRepository)
{ {
_context = context; _context = context;
_documentService = documentService; _documentService = documentService;
@ -56,6 +54,7 @@ namespace BMA.EHR.Insignia.Service.Controllers
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
_hostingEnvironment = hostingEnvironment; _hostingEnvironment = hostingEnvironment;
_userProfileRepository = userProfileRepository; _userProfileRepository = userProfileRepository;
_insigniaPeriodRepository = insigniaPeriodRepository;
} }
#region " Properties " #region " Properties "
@ -212,6 +211,66 @@ namespace BMA.EHR.Insignia.Service.Controllers
return list; return list;
} }
private dynamic FormatRequestProfiles(List<InsigniaRequestProfile> requestProfiles)
{
var rawData = requestProfiles
.Select(irp => new
{
request_id = irp.Request.Id,
isApprove = irp.IsApprove,
statusInstitute = irp.IsApprove.ToString(),
request_date = irp.RequestDate,
profile = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken),
instituteName = "",
instituteId = -1,
requestInsigniaLevel = irp.RequestInsignia.InsigniaType.Name,
requestInsigniaName = irp.RequestInsignia.Name,
requestQua = "",// irp.QualificationStatus,
requestDoc = "", //irp.DocumentStatus,
requestNote = "", // irp.Note,
requestSalary = irp.Salary,
matchingConditions = JsonConvert.DeserializeObject<List<MatchingCondition>>(irp.MatchingConditions)
})
.ToList();
var dataResult = rawData
.Select(irp => new
{
irp.request_id,
irp.isApprove,
irp.statusInstitute,
irp.request_date,
profileId = irp.profile == null ? Guid.Empty : irp.profile.Id,
citizenId = irp.profile == null ? "" : irp.profile.CitizenId,
prefix = irp.profile == null ? "" : irp.profile.Prefix,
firstname = irp.profile == null ? "" : irp.profile.FirstName,
lastname = irp.profile == null ? "" : irp.profile.LastName,
type = irp.profile == null ? "" : irp.profile.ProfileType,
position = irp.profile == null ? "" : irp.profile.Position,
posno = irp.profile == null ? "" :
irp.profile.ProfileSalary == null || irp.profile.ProfileSalary.Count == 0 ? "" :
irp.profile.ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PosNo,
rank = irp.profile == null ? "" : $"{irp.profile.PosType.PosTypeName}/{irp.profile.PosLevel.PosLevelName}",
irp.instituteName,
irp.instituteId,
lastInsigniaName = irp.profile == null ? "" :
irp.profile.ProfileInsignia == null || irp.profile.ProfileInsignia.Count == 0 ? "" :
_insigniaPeriodRepository.GetInsigniaById(irp.profile.ProfileInsignia.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value) == null ? "" :
_insigniaPeriodRepository.GetInsigniaById(irp.profile.ProfileInsignia.OrderByDescending(x => x.Year).FirstOrDefault().InsigniaId.Value).Name,
irp.requestInsigniaLevel,
irp.requestInsigniaName,
irp.requestQua,
irp.requestDoc,
irp.requestNote,
irp.requestSalary,
irp.matchingConditions
})
.OrderBy(y => y.citizenId)
.ToList();
return dataResult;
}
#endregion #endregion
#region " ดึงเครื่องราชฯ ล่าสุดของครู (GetInsigniaLast) " #region " ดึงเครื่องราชฯ ล่าสุดของครู (GetInsigniaLast) "
@ -410,20 +469,6 @@ namespace BMA.EHR.Insignia.Service.Controllers
[HttpGet("{insigniaPeriodId:length(36)}/{ocId:length(36)}/{role}/{status}")] [HttpGet("{insigniaPeriodId:length(36)}/{ocId:length(36)}/{role}/{status}")]
public async Task<ActionResult<ResponseObject>> GetInsignaiRequestBkk(Guid insigniaPeriodId, Guid ocId, string role, string status) public async Task<ActionResult<ResponseObject>> GetInsignaiRequestBkk(Guid insigniaPeriodId, Guid ocId, string role, string status)
{ {
// var profile = await _context.Profiles.AsQueryable()
// .FirstOrDefaultAsync(x => x.KeycloakId == (UserId != null && UserId != "" ? Guid.Parse(UserId) : Guid.Parse("00000000-0000-0000-0000-000000000000")));
// if (profile == null)
// return Error(GlobalMessages.DataNotFound);
// var organizationAgencyId = await _context.ProfilePositions.AsQueryable()
// .Where(x => x.Profile == profile)
// .Where(x => x.OrganizationPosition != null)
// .Where(x => x.OrganizationPosition.Organization != null)
// .Where(x => x.OrganizationPosition.Organization.OrganizationAgencyId != null)
// .Select(x => x.OrganizationPosition.Organization.OrganizationAgencyId)
// .FirstOrDefaultAsync();
// if (organizationAgencyId == null)
// return Error(GlobalMessages.OrganizationNotFound);
// var ocId = organizationAgencyId.Value;
var result = await _repository.GetInsigniaRequest(insigniaPeriodId, ocId); var result = await _repository.GetInsigniaRequest(insigniaPeriodId, ocId);
if (result != null) if (result != null)
{ {
@ -483,47 +528,46 @@ namespace BMA.EHR.Insignia.Service.Controllers
// fkDivision = ir.Organization.Name, // fkDivision = ir.Organization.Name,
fkInstitute = "", fkInstitute = "",
fkPeriodId = ir.Period.Id, fkPeriodId = ir.Period.Id,
insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable() insigniaRequestHasProfile = FormatRequestProfiles(ir.RequestProfiles.AsQueryable()
//.Include(x => x.Profile)
//.ThenInclude(x => x.Position)
//.Include(x => x.Profile)
// .ThenInclude(x => x.PositionNumber)
//.Include(x => x.Profile)
// .ThenInclude(x => x.AcademicStanding)
.Include(x => x.RequestInsignia) .Include(x => x.RequestInsignia)
.ThenInclude(x => x.InsigniaType) .ThenInclude(x => x.InsigniaType)
.Select(irp => new .Where(x => x.IsApprove)
{ .ToList())
request_id = irp.Request.Id, //insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable()
isApprove = irp.IsApprove, // .Include(x => x.RequestInsignia)
statusInstitute = irp.IsApprove.ToString(), // .ThenInclude(x => x.InsigniaType)
request_date = irp.RequestDate, // .Select(irp => new
profileId = irp.ProfileId, // {
prefix = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).Prefix, //irp.Profile.Prefix, // request_id = irp.Request.Id,
firstname = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).FirstName, //irp.Profile.FirstName, // isApprove = irp.IsApprove,
lastname = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).LastName, //irp.Profile.LastName, // statusInstitute = irp.IsApprove.ToString(),
posno = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileSalary.Count == 0 || // request_date = irp.RequestDate,
_userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileSalary == null ? "" : // profileId = irp.ProfileId,
_userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PosNo,// irp.Profile.PositionNumber.Id, // prefix = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).Prefix, //irp.Profile.Prefix,
type = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileType, //irp.Profile.ProfileType, // firstname = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).FirstName, //irp.Profile.FirstName,
position = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).Position, // irp.Profile.Position.Name, // lastname = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).LastName, //irp.Profile.LastName,
rank = $"{_userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).PosType.PosTypeName}/{_userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).PosLevel.PosLevelName}", // $"{irp.Profile.PositionType.Name}/{irp.Profile.PositionLevel.Name}", // posno = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileSalary.Count == 0 ||
instituteName = "", // _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileSalary == null ? "" :
instituteId = -1, // _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PosNo,// irp.Profile.PositionNumber.Id,
// divisionName = irp.Profile.OrganizationOrganization.Name, // type = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileType, //irp.Profile.ProfileType,
// divisionId = irp.Profile.OrganizationOrganization.Id, // position = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).Position, // irp.Profile.Position.Name,
lastInsigniaName = "", // rank = $"{_userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).PosType.PosTypeName}/{_userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).PosLevel.PosLevelName}", // $"{irp.Profile.PositionType.Name}/{irp.Profile.PositionLevel.Name}",
requestInsigniaLevel = irp.RequestInsignia.InsigniaType.Name, // instituteName = "",
requestInsigniaName = irp.RequestInsignia.Name, // instituteId = -1,
requestQua = "",// irp.QualificationStatus, // // divisionName = irp.Profile.OrganizationOrganization.Name,
requestDoc = "", //irp.DocumentStatus, // // divisionId = irp.Profile.OrganizationOrganization.Id,
requestNote = "", // irp.Note, // lastInsigniaName = "",
requestSalary = irp.Salary, // requestInsigniaLevel = irp.RequestInsignia.InsigniaType.Name,
matchingConditions = JsonConvert.DeserializeObject<List<MatchingCondition>>(irp.MatchingConditions) // requestInsigniaName = irp.RequestInsignia.Name,
}) // requestQua = "",// irp.QualificationStatus,
.Where(x => x.isApprove) // requestDoc = "", //irp.DocumentStatus,
.OrderBy(y => y.profileId) // requestNote = "", // irp.Note,
.ToList() // requestSalary = irp.Salary,
// matchingConditions = JsonConvert.DeserializeObject<List<MatchingCondition>>(irp.MatchingConditions)
// })
// .Where(x => x.isApprove)
// .OrderBy(y => y.profileId)
// .ToList()
}) })
.ToList() .ToList()
.FirstOrDefault(); .FirstOrDefault();
@ -543,47 +587,52 @@ namespace BMA.EHR.Insignia.Service.Controllers
// fkDivision = ir.Organization.Name, // fkDivision = ir.Organization.Name,
fkInstitute = "", fkInstitute = "",
fkPeriodId = ir.Period.Id, fkPeriodId = ir.Period.Id,
insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable() insigniaRequestHasProfile = FormatRequestProfiles(ir.RequestProfiles.AsQueryable()
//.Include(x => x.Profile)
//.ThenInclude(x => x.Position)
//.Include(x => x.Profile)
// .ThenInclude(x => x.PositionNumber)
//.Include(x => x.Profile)
// .ThenInclude(x => x.AcademicStanding)
.Include(x => x.RequestInsignia) .Include(x => x.RequestInsignia)
.ThenInclude(x => x.InsigniaType) .ThenInclude(x => x.InsigniaType)
.Select(irp => new .Where(x => !x.IsApprove)
{ .ToList())
request_id = irp.Request.Id, //insigniaRequestHasProfile = ir.RequestProfiles.AsQueryable()
isApprove = irp.IsApprove, // //.Include(x => x.Profile)
statusInstitute = irp.IsApprove.ToString(), // //.ThenInclude(x => x.Position)
request_date = irp.RequestDate, // //.Include(x => x.Profile)
profileId = irp.ProfileId, // // .ThenInclude(x => x.PositionNumber)
prefix = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).Prefix, //irp.Profile.Prefix, // //.Include(x => x.Profile)
firstname = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).FirstName, //irp.Profile.FirstName, // // .ThenInclude(x => x.AcademicStanding)
lastname = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).LastName, //irp.Profile.LastName, // .Include(x => x.RequestInsignia)
posno = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileSalary.Count == 0 || // .ThenInclude(x => x.InsigniaType)
_userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileSalary == null ? "" : // .Select(irp => new
_userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PosNo,// irp.Profile.PositionNumber.Id, // {
type = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileType, //irp.Profile.ProfileType, // request_id = irp.Request.Id,
position = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).Position, // irp.Profile.Position.Name, // isApprove = irp.IsApprove,
rank = $"{_userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).PosType.PosTypeName}/{_userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).PosLevel.PosLevelName}", // $"{irp.Profile.PositionType.Name}/{irp.Profile.PositionLevel.Name}", // statusInstitute = irp.IsApprove.ToString(),
instituteName = "", // request_date = irp.RequestDate,
instituteId = -1, // profileId = irp.ProfileId,
// divisionName = irp.Profile.OrganizationOrganization.Name, // prefix = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).Prefix, //irp.Profile.Prefix,
// divisionId = irp.Profile.OrganizationOrganization.Id, // firstname = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).FirstName, //irp.Profile.FirstName,
lastInsigniaName = "", // lastname = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).LastName, //irp.Profile.LastName,
requestInsigniaLevel = irp.RequestInsignia.InsigniaType.Name, // posno = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileSalary.Count == 0 ||
requestInsigniaName = irp.RequestInsignia.Name, // _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileSalary == null ? "" :
requestQua = "", //irp.QualificationStatus, // _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileSalary.OrderByDescending(x => x.Order).FirstOrDefault().PosNo,// irp.Profile.PositionNumber.Id,
requestDoc = "", //irp.DocumentStatus, // type = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).ProfileType, //irp.Profile.ProfileType,
requestNote = "", //irp.Note, // position = _userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).Position, // irp.Profile.Position.Name,
requestSalary = irp.Salary, // rank = $"{_userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).PosType.PosTypeName}/{_userProfileRepository.GetOfficerProfileById(irp.ProfileId, AccessToken).PosLevel.PosLevelName}", // $"{irp.Profile.PositionType.Name}/{irp.Profile.PositionLevel.Name}",
matchingConditions = JsonConvert.DeserializeObject<List<MatchingCondition>>(irp.MatchingConditions) // instituteName = "",
}) // instituteId = -1,
.Where(x => !x.isApprove) // // divisionName = irp.Profile.OrganizationOrganization.Name,
.OrderBy(y => y.profileId) // // divisionId = irp.Profile.OrganizationOrganization.Id,
.ToList() // lastInsigniaName = "",
// requestInsigniaLevel = irp.RequestInsignia.InsigniaType.Name,
// requestInsigniaName = irp.RequestInsignia.Name,
// requestQua = "", //irp.QualificationStatus,
// requestDoc = "", //irp.DocumentStatus,
// requestNote = "", //irp.Note,
// requestSalary = irp.Salary,
// matchingConditions = JsonConvert.DeserializeObject<List<MatchingCondition>>(irp.MatchingConditions)
// })
// .Where(x => !x.isApprove)
// .OrderBy(y => y.profileId)
// .ToList()
}) })
.ToList() .ToList()
.FirstOrDefault(); .FirstOrDefault();