using IdentityModel.Client; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Npgsql.Internal.TypeHandlers.DateTimeHandlers; using NPOI.POIFS.Properties; using NUglify.Helpers; using Shentun.Peis.AsbitemGuides; using Shentun.Peis.DiagnosisFunctions; using Shentun.Peis.Enums; using Shentun.Peis.LisRequests; using Shentun.Peis.Models; using Shentun.Peis.OcCheckTypes; using Shentun.Peis.OccupationalDiseases; using Shentun.Peis.PatientRegisters; using Shentun.Peis.Reports; using Shentun.Peis.Reports.ConvertRpt; using Shentun.Peis.SumSuggestionContents; using Shentun.Peis.SumSuggestionHeaders; using Shentun.Peis.SumSummaryContents; using Shentun.Peis.SumSummaryHeaders; using Shentun.Peis.SumSummaryReports; using Shentun.Peis.SysParmValues; using SqlSugar.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Volo.Abp.Identity; using Volo.Abp.ObjectMapping; using Volo.Abp.Uow; using static Microsoft.EntityFrameworkCore.DbLoggerCategory; namespace Shentun.Peis.PrintReports { /// /// 打印报告服务 /// [ApiExplorerSettings(GroupName = "Work")] [Authorize] public class PrintReportAppService : ApplicationService { private readonly IRepository _customerOrgRepository; private readonly IRepository _customerOrgGroupRepository; private readonly IRepository _patientRepository; private readonly IRepository _patientRegisterRepository; private readonly IRepository _registerCheckAsbitemRepository; private static IRepository _registerCheckAsbitemStaticRepository; private readonly IRepository _registerCheckItemRepository; private readonly IRepository _registerCheckSummaryRepository; private readonly IRepository _registerCheckPictureRepository; private readonly IRepository _asbitemRepository; private readonly IRepository _itemRepository; private readonly IRepository _medicalPackageRepository; private readonly IRepository _medicalReportTypeRepository; private readonly IRepository _itemTypeRepository; private readonly IRepository _lisRequestRepository; private readonly IRepository _sampleGroupRepository; private readonly IRepository _sampleGroupDetailRepository; private readonly IRepository _sampleContainerRepository; private readonly IRepository _sampleTypeRepository; private readonly IRepository _sexRegisterRepository; private readonly IRepository _resultStatusRepository; private readonly IRepository _sumSummaryHeaderRepository; private readonly IRepository _identityUserRepository; private readonly IRepository _sumSuggestionHeaderRepository; private readonly IRepository _registerCheckRepository; private readonly IRepository _personnelTypeRepository; //private readonly IOrganizationUnitRepository _organizationUnitRepository; private readonly IRepository _organizationUnitRepository; private readonly IPatientRegisterGuideReportRepository _patientRegisterGuideReportRepository; private readonly ILisRequestReportRepository _lisRequestReportRepository; //private readonly ICheckRequestNoReportRepository _checkRequestNoReportRepository; private readonly IChargeReportRepository _chargeReportRepository; private readonly SysParmValueManager _sysParmValueManager; private readonly CacheService _cacheService; private readonly LisRequestManager _lisRequestManager; private readonly IUnitOfWorkManager _unitOfWorkManager; private static AsbitemGuideManager _asbitemGuideManager; private readonly IConfiguration _configuration; private readonly IRepository _patientOccupationalDiseaseRepository; private readonly IRepository _patientOccupationalHistoryRepository; private readonly IRepository _patientPoisonRepository; private readonly IRepository _patientSymptomRepository; private readonly IRepository _patientOccupationalMedicalHistoryRepository; private readonly IRepository _patientPastMedicalHistoryRepository; private readonly IRepository _ocCheckTypeRepository; private readonly IRepository _poisonRepository; private readonly IRepository _occupationalAbnormalRepository; private readonly IRepository _symptomRepository; public PrintReportAppService( IRepository patientRepository, IRepository customerOrgRepository, IRepository customerOrgGroupRepository, IRepository patientRegisterRepository, IRepository registerCheckAsbitemRepository, IRepository registerCheckItemRepository, IRepository registerCheckSummaryRepository, IRepository registerCheckPictureRepository, IRepository asbitemRepository, IRepository itemRepository, IRepository medicalPackageRepository, IRepository medicalReportTypeRepository, IRepository itemTypeRepository, IRepository lisRequestRepository, IRepository sampleGroupRepository, IRepository sampleContainerRepository, IRepository sampleTypeRepository, IRepository sexRegisterRepository, IRepository personnelTypeRepository, IRepository resultStatusRepository, IRepository sumSummaryHeaderRepository, IRepository identityUserRepository, IRepository sumSuggestionHeaderRepository, IRepository registerCheckRepository, //IOrganizationUnitRepository organizationUnitRepository, IRepository organizationUnitRepository, IPatientRegisterGuideReportRepository patientRegisterGuideReportRepository, ILisRequestReportRepository lisRequestReportRepository, //ICheckRequestNoReportRepository checkRequestNoReportRepository, IChargeReportRepository chargeReportRepository, SysParmValueManager sysParmValueManager, CacheService cacheService, LisRequestManager lisRequestManager, IUnitOfWorkManager unitOfWorkManager, AsbitemGuideManager asbitemGuideManager, IConfiguration configuration, IRepository patientOccupationalDiseaseRepository, IRepository patientOccupationalHistoryRepository, IRepository patientPoisonRepository, IRepository patientSymptomRepository, IRepository patientOccupationalMedicalHistoryRepository, IRepository patientPastMedicalHistoryRepository , IRepository ocCheckTypeRepository, IRepository poisonRepository, IRepository occupationalAbnormalRepository, IRepository symptomRepository, IRepository sampleGroupDetailRepository) { this._customerOrgRepository = customerOrgRepository; this._patientRegisterRepository = patientRegisterRepository; this._sexRegisterRepository = sexRegisterRepository; this._resultStatusRepository = resultStatusRepository; this._sumSummaryHeaderRepository = sumSummaryHeaderRepository; this._identityUserRepository = identityUserRepository; this._sumSuggestionHeaderRepository = sumSuggestionHeaderRepository; this._registerCheckRepository = registerCheckRepository; this._organizationUnitRepository = organizationUnitRepository; this._patientRegisterGuideReportRepository = patientRegisterGuideReportRepository; this._lisRequestReportRepository = lisRequestReportRepository; //this._checkRequestNoReportRepository = checkRequestNoReportRepository; this._chargeReportRepository = chargeReportRepository; this._sysParmValueManager = sysParmValueManager; _registerCheckAsbitemRepository = registerCheckAsbitemRepository; _registerCheckAsbitemStaticRepository = registerCheckAsbitemRepository; _registerCheckItemRepository = registerCheckItemRepository; _registerCheckSummaryRepository = registerCheckSummaryRepository; _registerCheckPictureRepository = registerCheckPictureRepository; _asbitemRepository = asbitemRepository; _itemRepository = itemRepository; _medicalReportTypeRepository = medicalReportTypeRepository; _itemTypeRepository = itemTypeRepository; _lisRequestRepository = lisRequestRepository; _sampleGroupRepository = sampleGroupRepository; _sampleContainerRepository = sampleContainerRepository; _sampleTypeRepository = sampleTypeRepository; _cacheService = cacheService; _lisRequestManager = lisRequestManager; _unitOfWorkManager = unitOfWorkManager; _patientRepository = patientRepository; _asbitemGuideManager = asbitemGuideManager; _customerOrgGroupRepository = customerOrgGroupRepository; _medicalPackageRepository = medicalPackageRepository; _personnelTypeRepository = personnelTypeRepository; _configuration = configuration; _organizationUnitRepository = organizationUnitRepository; _patientOccupationalDiseaseRepository = patientOccupationalDiseaseRepository; _patientOccupationalHistoryRepository = patientOccupationalHistoryRepository; _patientPoisonRepository = patientPoisonRepository; _patientSymptomRepository = patientSymptomRepository; _patientOccupationalMedicalHistoryRepository = patientOccupationalMedicalHistoryRepository; _patientPastMedicalHistoryRepository = patientPastMedicalHistoryRepository; _ocCheckTypeRepository = ocCheckTypeRepository; _poisonRepository = poisonRepository; _occupationalAbnormalRepository = occupationalAbnormalRepository; _symptomRepository = symptomRepository; _sampleGroupDetailRepository = sampleGroupDetailRepository; } /// /// 获取体检人员指引单报告数据 /// /// /// [HttpPost("api/app/PrintReport/getpatientregisterguidereport")] public async Task GetPatientRegisterGuideReportAsync(Guid PatientRegisterId) { //return await _patientRegisterGuideReportRepository.GetPatientRegisterGuideReportAsync(PatientRegisterId); //_cacheService.GetMedicalTypeNameAsync var apiUrl = _configuration.GetValue("HostUrl:ApiUrl") + "/"; var patientRegister = await _patientRegisterRepository.GetAsync(o => o.Id == PatientRegisterId); Guid medicalCenterId = patientRegister.MedicalCenterId; #region 系统参数配置 var MedicalCenterAddress = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "medical_center_address"); var MedicalCenterFax = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "medical_center_fax"); var MedicalCenterTelphone = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "medical_center_telphone"); #endregion //var customerOrgList = await _customerOrgRepository.GetListAsync(); var query = from a in await _patientRegisterRepository.GetQueryableAsync() join b in await _sexRegisterRepository.GetQueryableAsync() on a.SexId equals b.Id join c in await _customerOrgGroupRepository.GetQueryableAsync() on a.CustomerOrgGroupId equals c.Id into cc from ac in cc.DefaultIfEmpty() join d in await _medicalPackageRepository.GetQueryableAsync() on a.MedicalPackageId equals d.Id into dd from ad in dd.DefaultIfEmpty() join e in await _patientRepository.GetQueryableAsync() on a.PatientId equals e.Id join f in await _personnelTypeRepository.GetQueryableAsync() on a.PersonnelTypeId equals f.Id into ff from af in ff.DefaultIfEmpty() join g in await _organizationUnitRepository.GetQueryableAsync() on a.MedicalCenterId equals g.Id into gg from ag in gg.DefaultIfEmpty() where (a.Id == PatientRegisterId) select new PatientRegisterGuideReportDto { Age = a.Age, PatientRegisterId = a.Id, CustomerOrgGroupName = ac.DisplayName, CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(a.CustomerOrgId).GetAwaiter().GetResult(), CustomerOrgShortName = _cacheService.GetTopCustomerOrgAsync(a.CustomerOrgId).GetAwaiter().GetResult().ShortName, DepartmentName = _cacheService.GetAllDepartmentNameAsync(a.CustomerOrgId).GetAwaiter().GetResult(), IdNo = e.IdNo, JobCardNo = a.JobCardNo, MedicalCardNo = a.MedicalCardNo, MedicalCenterAddress = MedicalCenterAddress, MedicalCenterFax = MedicalCenterFax, MedicalCenterTelphone = MedicalCenterTelphone, MedicalPackageName = ad.DisplayName, MedicalTimes = a.MedicalTimes, MobileTelephone = e.MobileTelephone, PatientName = a.PatientName, PatientNo = e.PatientNo, PatientRegisterNo = a.PatientRegisterNo, PersonnelTypeName = af.DisplayName, SexName = b.DisplayName, // Photo = string.IsNullOrEmpty(a.Photo) ? "" : ImageHelper.GetImageBase64StringAsync( a.Photo), Photo = string.IsNullOrEmpty(a.Photo) ? "" : apiUrl + a.Photo, MedicalStartDate = Convert.ToDateTime(a.MedicalStartDate.ToString()).ToString("yyyy-MM-dd"), OrganizationUnitId = a.MedicalCenterId, OrganizationUnitName = ag.DisplayName, Detail = PatientRegisterGuideAsbitem(a.Id, a.PatientRegisterNo, medicalCenterId, a.SexId), HisPatientId = a.HisPatientId, MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(a.MedicalTypeId).Result, }; return query.FirstOrDefault(); } /// /// 获取体检人员指引单报告数据 不需要转换版本 /// /// /// [HttpPost("api/app/PrintReport/GetPatientRegisterGuideReportConvertToReport")] public async Task GetPatientRegisterGuideReportConvertToReportAsync(Guid PatientRegisterId) { var oldDto = await GetPatientRegisterGuideReportAsync(PatientRegisterId); var entDto = await ConvertToReport.ToPatientGuideReportDataAsync(oldDto); return entDto; } /// /// 批量获取体检人员指引单报告数据 /// /// /// [HttpPost("api/app/printreport/getpatientregisterguidereportmany")] public async Task> GetPatientRegisterGuideReportManyAsync(List PatientRegisterIds) { return await _patientRegisterGuideReportRepository.GetPatientRegisterGuideReportManyAsync(PatientRegisterIds); } /// /// 打印检验申请单 /// /// [HttpPost("api/app/PrintReport/GetLisRequestReportByPatientRegisterId")] public async Task> GetLisRequestReportByPatientRegisterIdAsync(PatientRegisterIdInputDto input) { //生成LIS条码 var lisRequests = await _lisRequestManager.SetLisRequestAsync(input.PatientRegisterId); await _unitOfWorkManager.Current.SaveChangesAsync(); await _unitOfWorkManager.Current.CompleteAsync(); var entlist = new List(); //检索条码数据 using (var uow = _unitOfWorkManager.Begin( requiresNew: false, isTransactional: false )) { var query = (from patient in await _patientRepository.GetQueryableAsync() join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on patient.Id equals patientRegister.PatientId join sex in await _sexRegisterRepository.GetQueryableAsync() on patientRegister.SexId equals sex.Id join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on patientRegister.Id equals registerCheckAsbitem.PatientRegisterId join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id join lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id join sampleContainer in await _sampleContainerRepository.GetQueryableAsync() on lisRequest.SampleContainerId equals sampleContainer.Id into dd from sampleContainerHaveEmpty in dd.DefaultIfEmpty() join sampleType in await _sampleTypeRepository.GetQueryableAsync() on lisRequest.SampleTypeId equals sampleType.Id into ee from sampleTypeHaveEmpty in ee.DefaultIfEmpty() join sampleGroupDetail in await _sampleGroupDetailRepository.GetQueryableAsync() on asbitem.Id equals sampleGroupDetail.AsbitemId into sampleGroupDetailTemp from sampleTypeHaveEmptyHaveEmpty in sampleGroupDetailTemp.DefaultIfEmpty() join sampleGroup in await _sampleGroupRepository.GetQueryableAsync() on sampleTypeHaveEmptyHaveEmpty.SampleGroupId equals sampleGroup.Id into sampleGroupTemp from sampleGroupHaveEmpty in sampleGroupTemp.DefaultIfEmpty() where (patientRegister.Id == input.PatientRegisterId && registerCheckAsbitem.LisRequestId != null) select new { patient, patientRegister, sex, registerCheckAsbitem, asbitem, lisRequest, sampleContainerHaveEmpty, sampleTypeHaveEmpty, sampleGroupName = sampleGroupHaveEmpty != null ? sampleGroupHaveEmpty.DisplayName : "", samplePrintCount = sampleGroupHaveEmpty != null ? sampleGroupHaveEmpty.SamplePrintCount : 0 } ).ToList(); if (query.Count == 0) { return new List(); } lisRequests = query.Select(o => o.lisRequest).Distinct().ToList(); //发送第三方LIS申请 if (lisRequests != null) { foreach (var lisRequest in lisRequests) { await _lisRequestManager.SendThirdLisRequestAsync(lisRequest.Id); } } var lisRequestReportDtoList = query.Select(o => new LisRequestReportDto { LisRequestId = o.lisRequest.Id, PatientNo = o.patient.PatientNo, Age = o.patientRegister.Age, AsbitemNames = string.IsNullOrEmpty(o.asbitem.ShortName) ? o.asbitem.DisplayName : o.asbitem.ShortName, LisRequestNo = o.lisRequest.LisRequestNo, PatientName = o.patientRegister.PatientName, PatientRegisterNo = o.patientRegister.PatientRegisterNo, SampleContainerName = (o.sampleContainerHaveEmpty == null) ? "" : o.sampleContainerHaveEmpty.DisplayName, ContainerColor = (o.sampleContainerHaveEmpty == null) ? 16777215 : o.sampleContainerHaveEmpty.ContainerColor, SampleContainerRemark = (o.sampleContainerHaveEmpty == null) ? "" : o.sampleContainerHaveEmpty.ContainerRemark, SampleTypeName = (o.sampleTypeHaveEmpty == null) ? "" : o.sampleTypeHaveEmpty.DisplayName, SexName = o.sex.DisplayName, CustomerOrgName = _cacheService.GetTopCustomerOrgShortNameAsync(o.patientRegister.CustomerOrgId).Result, DepartmentName = _cacheService.GetAllDepartmentNameAsync(o.patientRegister.CustomerOrgId).Result, IsPrint = o.lisRequest.IsPrint, IsSignIn = o.lisRequest.IsSignIn, SamplingTime = o.lisRequest.SamplingTime, SignInOrder = o.lisRequest.SignInOrder, SignInPerson = o.lisRequest.SignInPerson, SignInTime = o.lisRequest.SignInTime, SampleGroupName = o.sampleGroupName, MobileTelephone = o.patient.MobileTelephone, SamplePrintCount = o.samplePrintCount, DeviceLisRequestPrintTimes = o.lisRequest.DeviceLisRequestPrintTimes }).ToList(); var lisRequestNoPrintMode = await _sysParmValueManager.GetSysParmValueAsync(query.FirstOrDefault().patientRegister.MedicalCenterId, "lis_request_no_print_mode"); if (string.IsNullOrWhiteSpace(lisRequestNoPrintMode)) lisRequestNoPrintMode = "0"; //var entlist = lisRequestReportDtoList.GroupBy(g => new //{ // g.LisRequestNo, // g.SampleGroupName //}) // .Select(s => new LisRequestReportDto // { // PatientNo = s.FirstOrDefault().PatientNo, // LisRequestId = s.FirstOrDefault().LisRequestId, // SexName = s.FirstOrDefault().SexName, // SampleTypeName = s.FirstOrDefault().SampleTypeName, // SampleContainerRemark = s.FirstOrDefault().SampleContainerRemark, // SampleContainerName = s.FirstOrDefault().SampleContainerName, // ContainerColor = s.FirstOrDefault().ContainerColor, // PatientRegisterNo = s.FirstOrDefault().PatientRegisterNo, // PatientName = s.FirstOrDefault().PatientName, // Age = s.FirstOrDefault().Age, // LisRequestNo = lisRequestNoPrintMode == "0" ? s.Key.LisRequestNo : s.FirstOrDefault().PatientRegisterNo, // CustomerOrgName = s.FirstOrDefault().CustomerOrgName, // DepartmentName = s.FirstOrDefault().DepartmentName, // AsbitemNames = string.Join(",", s.Select(d => d.AsbitemNames)), // IsPrint = s.FirstOrDefault().IsPrint, // IsSignIn = s.FirstOrDefault().IsSignIn, // SamplingTime = s.FirstOrDefault().SamplingTime, // SignInOrder = s.FirstOrDefault().SignInOrder, // SignInPerson = s.FirstOrDefault().SignInPerson, // SignInTime = s.FirstOrDefault().SignInTime, // SampleGroupName = s.Key.SampleGroupName, // MobileTelephone = s.FirstOrDefault().MobileTelephone, // SamplePrintCount = s.FirstOrDefault().SamplePrintCount // }).ToList(); entlist = lisRequestReportDtoList.GroupBy(g => new { g.PatientNo, g.LisRequestId, g.LisRequestNo, g.Age, g.PatientName, g.PatientRegisterNo, g.SampleContainerName, g.ContainerColor, g.SampleContainerRemark, g.SampleTypeName, g.SexName, g.CustomerOrgName, g.DepartmentName, g.IsPrint, g.IsSignIn, g.SamplingTime, g.SignInOrder, g.SignInPerson, g.SignInTime, g.MobileTelephone, g.SampleGroupName }) .Select(s => new LisRequestReportDto { PatientNo = s.Key.PatientNo, LisRequestId = s.Key.LisRequestId, SexName = s.Key.SexName, SampleTypeName = s.Key.SampleTypeName, SampleContainerRemark = s.Key.SampleContainerRemark, SampleContainerName = s.Key.SampleContainerName, ContainerColor = s.Key.ContainerColor, PatientRegisterNo = s.Key.PatientRegisterNo, PatientName = s.Key.PatientName, Age = s.Key.Age, LisRequestNo = lisRequestNoPrintMode == "0" ? s.Key.LisRequestNo : s.Key.PatientRegisterNo, CustomerOrgName = s.Key.CustomerOrgName, DepartmentName = s.Key.DepartmentName, AsbitemNames = string.Join(",", s.Select(d => d.AsbitemNames)), IsPrint = s.Key.IsPrint, IsSignIn = s.Key.IsSignIn, SamplingTime = s.Key.SamplingTime, SignInOrder = s.Key.SignInOrder, SignInPerson = s.Key.SignInPerson, SignInTime = s.Key.SignInTime, SampleGroupName = s.Key.SampleGroupName, MobileTelephone = s.Key.MobileTelephone, SamplePrintCount = s.FirstOrDefault().SamplePrintCount, DeviceLisRequestPrintTimes = s.FirstOrDefault().DeviceLisRequestPrintTimes }).ToList(); await uow.CompleteAsync(); } return entlist; } /// /// 打印检验申请单 不需要转换版本 /// /// [HttpPost("api/app/PrintReport/GetLisRequestReportByPatientRegisterIdConvertToReport")] public async Task GetLisRequestReportByPatientRegisterIdConvertToReportAsync(PatientRegisterIdInputDto input) { var oldDto = await GetLisRequestReportByPatientRegisterIdAsync(input); var entDto = await ConvertToReport.ToLisRequestReportDataAsync(oldDto); return entDto; } /// /// 单个打印检验条码 /// /// /// [HttpPost("api/app/PrintReport/GetLisRequestReportByLisRequestId")] public async Task GetLisRequestReportByLisRequestIdAsync(LisRequestIdInputDto input) { var lisRequestNoPrintMode = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "lis_request_no_print_mode"); if (string.IsNullOrWhiteSpace(lisRequestNoPrintMode)) lisRequestNoPrintMode = "0"; var list = (from patient in await _patientRepository.GetQueryableAsync() join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on patient.Id equals patientRegister.PatientId join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id join lisRequest in await _lisRequestReportRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id join sampleContainer in await _sampleContainerRepository.GetQueryableAsync() on lisRequest.SampleContainerId equals sampleContainer.Id join sampleType in await _sampleTypeRepository.GetQueryableAsync() on lisRequest.SampleTypeId equals sampleType.Id join sampleGroupDetail in await _sampleGroupDetailRepository.GetQueryableAsync() on asbitem.Id equals sampleGroupDetail.AsbitemId into sampleGroupDetailTemp from sampleTypeHaveEmptyHaveEmpty in sampleGroupDetailTemp.DefaultIfEmpty() join sampleGroup in await _sampleGroupRepository.GetQueryableAsync() on sampleTypeHaveEmptyHaveEmpty.SampleGroupId equals sampleGroup.Id into sampleGroupTemp from sampleGroupHaveEmpty in sampleGroupTemp.DefaultIfEmpty() where lisRequest.Id == input.LisRequestId select new { patient, patientRegister, asbitem, lisRequest, sampleContainer, sampleType, sampleGroupName = sampleGroupHaveEmpty != null ? sampleGroupHaveEmpty.DisplayName : "", samplePrintCount = sampleGroupHaveEmpty != null ? sampleGroupHaveEmpty.SamplePrintCount : 1 }).Distinct().ToList(); if (!list.Any()) { return null; } var lisRequestDtoList = new List(); var lisRequestInfo = list.First(); var lisRequestDto = new LisRequestReportDto() { LisRequestId = input.LisRequestId, LisRequestNo = lisRequestNoPrintMode == "0" ? lisRequestInfo.lisRequest.LisRequestNo : lisRequestInfo.patientRegister.PatientRegisterNo, PatientNo = lisRequestInfo.patient.PatientNo, PatientRegisterNo = lisRequestInfo.patientRegister.PatientRegisterNo, PatientName = lisRequestInfo.patientRegister.PatientName, SexName = _cacheService.GetSexNameAsync(lisRequestInfo.patientRegister.SexId).Result, Age = lisRequestInfo.patientRegister.Age, IsPrint = lisRequestInfo.lisRequest.IsPrint, IsSignIn = lisRequestInfo.lisRequest.IsSignIn, SamplingTime = lisRequestInfo.lisRequest.SamplingTime, SignInOrder = lisRequestInfo.lisRequest.SignInOrder, SignInPerson = lisRequestInfo.lisRequest.SignInPerson, SignInTime = lisRequestInfo.lisRequest.SignInTime, SampleTypeName = lisRequestInfo.sampleType.DisplayName, SampleContainerName = lisRequestInfo.sampleContainer.DisplayName, ContainerColor = lisRequestInfo.sampleContainer.ContainerColor, SampleContainerRemark = lisRequestInfo.sampleContainer.ContainerRemark, AsbitemNames = string.Join(",", list.OrderBy(o => o.asbitem.DisplayOrder).Select(o => o.asbitem.DisplayName).Distinct()), CustomerOrgName = _cacheService.GetTopCustomerOrgShortNameAsync(lisRequestInfo.patientRegister.CustomerOrgId).Result, DepartmentName = _cacheService.GetAllDepartmentNameAsync(lisRequestInfo.patientRegister.CustomerOrgId).Result, SampleGroupName = lisRequestInfo.sampleGroupName, MobileTelephone = lisRequestInfo.patient.MobileTelephone, SamplePrintCount = lisRequestInfo.samplePrintCount }; return lisRequestDto; } /// /// 单个打印检验条码 不需要转换版本 /// /// /// [HttpPost("api/app/PrintReport/GetLisRequestReportByLisRequestIdConvertToReport")] public async Task GetLisRequestReportByLisRequestIdConvertToReportAsync(LisRequestIdInputDto input) { var oldDto = await GetLisRequestReportByLisRequestIdAsync(input); var entDto = await ConvertToReport.ToLisRequestReportDataAsync(new List { oldDto }); return entDto; } /// /// 打印体检报告 /// /// [HttpPost("api/app/PrintReport/GetMedicalReport")] public async Task GetMedicalReportAsync(PatientRegisterIdInputDto input) { var patientRegister = (await _patientRegisterRepository.GetQueryableAsync()) .Include(x => x.Patient) .Where(m => m.Id == input.PatientRegisterId).FirstOrDefault(); if (patientRegister == null) { throw new UserFriendlyException("人员登记信息不存在"); } var medicalReportDto = await GetMedicalReportDto(patientRegister); //获取综述 medicalReportDto.SumSummarys = await GetMedicalReportSummaryDtos(patientRegister); //获取建议 medicalReportDto.SumSuggestions = await GetMedicalReportSuggestinoDtos(patientRegister); //设置明细结果 await SetMedicalReportRegisterChecks(patientRegister, medicalReportDto); //项目对比结果 medicalReportDto.ItemContrasts = await GetMedicalReportItemContrastListAsync(patientRegister); return medicalReportDto; } /// /// 打印体检报告 不需要转换版本 /// /// [HttpPost("api/app/PrintReport/GetMedicalReportConvertToReport")] public async Task GetMedicalReportConvertToReportAsync(PatientRegisterIdInputDto input) { var oldDto = await GetMedicalReportAsync(input); var entDto = await ConvertToReport.ToHealthReportDataAsync(oldDto); return entDto; } /// /// 获取职业病体检报告 /// /// /// [HttpPost("api/app/PrintReport/GetOccupationalDiseaseMedicalReport")] public async Task GetOccupationalDiseaseMedicalReportAsync(PatientRegisterIdInputDto input) { var result = new OccupationalDiseaseMedicalReportDto(); var patientOccupationalDiseaseEnt = (from patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() join ocCheckType in await _ocCheckTypeRepository.GetQueryableAsync() on patientOccupationalDisease.OcCheckTypeId equals ocCheckType.Id where patientOccupationalDisease.PatientRegisterId == input.PatientRegisterId select new { ocCheckTypeName = ocCheckType.DisplayName, patientOccupationalDisease }).FirstOrDefault(); if (patientOccupationalDiseaseEnt == null) { throw new UserFriendlyException("当前人员无职业病信息"); } //基础报告信息 var medicalReportDto = await GetMedicalReportAsync(input); result = ObjectMapper.Map(medicalReportDto); #region 检查类别 var ocCheckTypeList = (await _ocCheckTypeRepository.GetQueryableAsync()).OrderBy(o => o.DisplayOrder); if (ocCheckTypeList.Any()) { result.OcCheckTypeDtos = ocCheckTypeList.Select(s => new OccupationalDiseaseMedicalReport_OcCheckTypeDto { DisplayName = s.DisplayName, DisplayOrder = s.DisplayOrder, OcCheckTypeId = s.Id, SimpleCode = s.SimpleCode }).ToList(); } #endregion #region 职业病基本信息 result.PatientOccupationalDisease = new OccupationalDiseaseMedicalReport_PatientOccupationalDiseaseDto { OcCheckTypeName = patientOccupationalDiseaseEnt.ocCheckTypeName, AbnormalTimes = patientOccupationalDiseaseEnt.patientOccupationalDisease.AbnormalTimes, AbortionTimes = patientOccupationalDiseaseEnt.patientOccupationalDisease.AbortionTimes, ChildrenNum = patientOccupationalDiseaseEnt.patientOccupationalDisease.ChildrenNum, DrinkFlag = patientOccupationalDiseaseEnt.patientOccupationalDisease.DrinkFlag, DrinkNum = patientOccupationalDiseaseEnt.patientOccupationalDisease.DrinkNum, DrinkNumMax = patientOccupationalDiseaseEnt.patientOccupationalDisease.DrinkNum != null ? patientOccupationalDiseaseEnt.patientOccupationalDisease.DrinkNum.Value + 50 : null, DrinkYears = patientOccupationalDiseaseEnt.patientOccupationalDisease.DrinkYears, FirstMenstruation = patientOccupationalDiseaseEnt.patientOccupationalDisease.FirstMenstruation, HandleSuggestion = patientOccupationalDiseaseEnt.patientOccupationalDisease.HandleSuggestion, JobType = patientOccupationalDiseaseEnt.patientOccupationalDisease.JobType, LastMenstrualPeriodDate = DataHelper.ConversionDateShortToString(patientOccupationalDiseaseEnt.patientOccupationalDisease.LastMenstrualPeriodDate), MenstruationCycle = patientOccupationalDiseaseEnt.patientOccupationalDisease.MenstruationCycle, MenstruationEndAge = patientOccupationalDiseaseEnt.patientOccupationalDisease.MenstruationEndAge, MenstruationFlag = patientOccupationalDiseaseEnt.patientOccupationalDisease.MenstruationFlag, MenstruationTimeLength = patientOccupationalDiseaseEnt.patientOccupationalDisease.MenstruationTimeLength, NoOccupAbSuggestion = patientOccupationalDiseaseEnt.patientOccupationalDisease.NoOccupAbSuggestion, NoOccupationalAbnormal = patientOccupationalDiseaseEnt.patientOccupationalDisease.NoOccupationalAbnormal, OcCheckTypeId = patientOccupationalDiseaseEnt.patientOccupationalDisease.OcCheckTypeId, OccupationalAbnormal = patientOccupationalDiseaseEnt.patientOccupationalDisease.OccupationalAbnormal, OccupationalAbSuggestion = patientOccupationalDiseaseEnt.patientOccupationalDisease.OccupationalAbSuggestion, Other = patientOccupationalDiseaseEnt.patientOccupationalDisease.Other, PoisonWorkTime = patientOccupationalDiseaseEnt.patientOccupationalDisease.PoisonWorkTime, PrematureBirthTimes = patientOccupationalDiseaseEnt.patientOccupationalDisease.PrematureBirthTimes, FamilyGeneticHistory = patientOccupationalDiseaseEnt.patientOccupationalDisease.FamilyGeneticHistory, RiskFactors = patientOccupationalDiseaseEnt.patientOccupationalDisease.RiskFactors, SmokeFlag = patientOccupationalDiseaseEnt.patientOccupationalDisease.SmokeFlag, SmokeNum = patientOccupationalDiseaseEnt.patientOccupationalDisease.SmokeNum, SmokeNumMax = patientOccupationalDiseaseEnt.patientOccupationalDisease.SmokeNum != null ? patientOccupationalDiseaseEnt.patientOccupationalDisease.SmokeNum + 5 : null, SmokeYears = patientOccupationalDiseaseEnt.patientOccupationalDisease.SmokeYears, StillbirthTimes = patientOccupationalDiseaseEnt.patientOccupationalDisease.StillbirthTimes, TotalWorkTime = patientOccupationalDiseaseEnt.patientOccupationalDisease.TotalWorkTime, OccupationalDiseaseNumber = patientOccupationalDiseaseEnt.patientOccupationalDisease.OccupationalDiseaseNumber }; #endregion #region 职业史 var patientOccupationalHistoryList = (await _patientOccupationalHistoryRepository.GetQueryableAsync()).Where(m => m.PatientRegisterId == input.PatientRegisterId) .OrderBy(o => o.CreationTime).ToList(); result.PatientOccupationalHistoryDtos = patientOccupationalHistoryList.Select(s => new OccupationalDiseaseMedicalReport_PatientOccupationalHistoryDto { BeginDate = DataHelper.ConversionDateShortToString(s.BeginDate), EndDate = DataHelper.ConversionDateShortToString(s.EndDate), Org = s.Org, Poison = s.Poison, ProtectiveMeasures = s.ProtectiveMeasures, WorkShop = s.WorkShop, WorkType = s.WorkType, DisplayOrder = patientOccupationalHistoryList.IndexOf(s) + 1 }).ToList(); #endregion #region 毒害因素 var patientPoisonDtoList = (from patientPoison in await _patientPoisonRepository.GetQueryableAsync() join poison in await _poisonRepository.GetQueryableAsync() on patientPoison.PoisonId equals poison.Id into poisonTemp from poisonHaveEmpty in poisonTemp.DefaultIfEmpty() join occupationalAbnormal in await _occupationalAbnormalRepository.GetQueryableAsync() on patientPoison.OccupationalAbnormalId equals occupationalAbnormal.Id into occupationalAbnormalTemp from occupationalAbnormalHaveEmpty in occupationalAbnormalTemp.DefaultIfEmpty() where patientPoison.PatientRegisterId == input.PatientRegisterId orderby patientPoison.CreationTime ascending select new { OccupationalAbnormalName = occupationalAbnormalHaveEmpty != null ? occupationalAbnormalHaveEmpty.DisplayName : "", PoisonName = poisonHaveEmpty != null ? poisonHaveEmpty.DisplayName : "" }).ToList(); result.PatientPoisonDtos = patientPoisonDtoList.Select(s => new OccupationalDiseaseMedicalReport_PatientPoisonDto { OccupationalAbnormalName = s.OccupationalAbnormalName, PoisonName = s.PoisonName, DisplayOrder = patientPoisonDtoList.IndexOf(s) + 1 }).ToList(); #endregion #region 职业病症状 var patientSymptomList = (from patientSymptom in await _patientSymptomRepository.GetQueryableAsync() join symptom in await _symptomRepository.GetQueryableAsync() on patientSymptom.SymptomId equals symptom.Id into symptomTemp from symptomHaveEmpty in symptomTemp.DefaultIfEmpty() where patientSymptom.PatientRegisterId == input.PatientRegisterId orderby patientSymptom.CreationTime ascending select new { patientSymptom, SymptomName = symptomHaveEmpty != null ? symptomHaveEmpty.DisplayName : "" }).ToList(); result.PatientSymptomDtos = patientSymptomList.Select(s => new OccupationalDiseaseMedicalReport_PatientSymptomDto { Degree = s.patientSymptom.Degree, SymptomName = s.SymptomName, TimeLength = s.patientSymptom.TimeLength, DisplayOrder = patientSymptomList.IndexOf(s) + 1 }).ToList(); #endregion #region 职业病史 var patientOccupationalMedicalHistoryList = (await _patientOccupationalMedicalHistoryRepository.GetQueryableAsync()) .Where(m => m.PatientRegisterId == input.PatientRegisterId).OrderBy(o => o.CreationTime).ToList(); result.PatientOccupationalMedicalHistoryDtos = patientOccupationalMedicalHistoryList.Select(s => new OccupationalDiseaseMedicalReport_PatientOccupationalMedicalHistoryDto { DiagnosisDate = DataHelper.ConversionDateShortToString(s.DiagnosisDate), DiagnosisHospital = s.DiagnosisHospital, IsRecovery = s.IsRecovery == 'Y' ? "治愈" : "未愈", OccupationalDisease = s.OccupationalDisease, TreatmentMethods = s.TreatmentMethods, DisplayOrder = patientOccupationalMedicalHistoryList.IndexOf(s) + 1 }).ToList(); #endregion #region 既往病史 var patientPastMedicalHistoryList = (await _patientPastMedicalHistoryRepository.GetQueryableAsync()) .Where(m => m.PatientRegisterId == input.PatientRegisterId).OrderBy(o => o.CreationTime).ToList(); result.PatientPastMedicalHistoryDtos = patientPastMedicalHistoryList.Select(s => new OccupationalDiseaseMedicalReport_PatientOccupationalMedicalHistoryDto { DiagnosisDate = DataHelper.ConversionDateShortToString(s.DiagnosisDate), DiagnosisHospital = s.DiagnosisHospital, IsRecovery = s.IsRecovery == 'Y' ? "治愈" : "未愈", OccupationalDisease = s.OccupationalDisease, TreatmentMethods = s.TreatmentMethods, DisplayOrder = patientPastMedicalHistoryList.IndexOf(s) + 1 }).ToList(); #endregion return result; } /// /// 获取职业病体检报告 不需要转换版本 /// /// /// [HttpPost("api/app/PrintReport/GetOccupationalDiseaseMedicalReportConvertToReport")] public async Task GetOccupationalDiseaseMedicalReportConvertToReportAsync(PatientRegisterIdInputDto input) { var oldDto = await GetOccupationalDiseaseMedicalReportAsync(input); var entDto = await ConvertToReport.ToOccupationalDiseaseReportDataAsync(oldDto); return entDto; } /// /// 打印Pacs条码数据 /// /// /// [HttpPost("api/app/PrintReport/getpacsnoreport")] public async Task> GetPacsNoReportAsync(PatientRegisterIdInputDto input) { var query = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id into asbitemTemp from asbitemHaveEmpty in asbitemTemp.DefaultIfEmpty() join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitemHaveEmpty.ItemTypeId equals itemType.Id into itemTypeTemp from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty() where (patientRegister.Id == input.PatientRegisterId && !string.IsNullOrEmpty(registerCheck.CheckRequestNo) && asbitemHaveEmpty.BarcodeMode != BarcodeModeFlag.NoPrint ) select new { Age = patientRegister.Age, AsbitemName = asbitemHaveEmpty.DisplayName, CheckRequestNo = registerCheck.CheckRequestNo, RegisterCheckId = registerCheck.Id, PatientName = patientRegister.PatientName, PatientRegisterNo = patientRegister.PatientRegisterNo, SexName = _cacheService.GetSexNameAsync(patientRegister.SexId).Result, IsCheckRequest = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.IsCheckRequest : 'N', BarcodeMode = asbitemHaveEmpty != null ? asbitemHaveEmpty.BarcodeMode : '0', CustomerOrgId = patientRegister.CustomerOrgId, MobileTelephone = patient.MobileTelephone, DeviceCheckRequestPrintTimes = registerCheck.DeviceCheckRequestPrintTimes }).ToList(); var queryGroup = query.GroupBy(g => g.CheckRequestNo); List pacsNoReportDtos = new List(); foreach (var s in queryGroup) { if (s.Where(m => m.BarcodeMode == '0' && m.IsCheckRequest == 'Y').Count() > 0) { pacsNoReportDtos.Add(new PacsNoReportDto { Age = s.FirstOrDefault().Age, AsbitemName = string.Join(',', s.Select(s => s.AsbitemName)), CheckRequestNo = s.FirstOrDefault().CheckRequestNo, RegisterCheckId = s.FirstOrDefault().RegisterCheckId, PatientName = s.FirstOrDefault().PatientName, PatientRegisterNo = s.FirstOrDefault().PatientRegisterNo, SexName = s.FirstOrDefault().SexName, CustomerOrgName = _cacheService.GetTopCustomerOrgShortNameAsync(s.FirstOrDefault().CustomerOrgId).Result, DepartmentName = _cacheService.GetAllDepartmentNameAsync(s.FirstOrDefault().CustomerOrgId).Result, MobileTelephone = s.FirstOrDefault().MobileTelephone, DeviceCheckRequestPrintTimes = s.FirstOrDefault().DeviceCheckRequestPrintTimes }); } else if (s.Where(m => m.BarcodeMode == '1').Count() > 0) { pacsNoReportDtos.Add(new PacsNoReportDto { Age = s.FirstOrDefault().Age, AsbitemName = string.Join(',', s.Select(s => s.AsbitemName)), CheckRequestNo = s.FirstOrDefault().PatientRegisterNo, RegisterCheckId = s.FirstOrDefault().RegisterCheckId, PatientName = s.FirstOrDefault().PatientName, PatientRegisterNo = s.FirstOrDefault().PatientRegisterNo, SexName = s.FirstOrDefault().SexName, CustomerOrgName = _cacheService.GetTopCustomerOrgShortNameAsync(s.FirstOrDefault().CustomerOrgId).Result, DepartmentName = _cacheService.GetAllDepartmentNameAsync(s.FirstOrDefault().CustomerOrgId).Result, MobileTelephone = s.FirstOrDefault().MobileTelephone, DeviceCheckRequestPrintTimes = s.FirstOrDefault().DeviceCheckRequestPrintTimes }); } } return pacsNoReportDtos; } /// /// 打印Pacs条码数据 不需要转换版本 /// /// /// [HttpPost("api/app/PrintReport/GetPacsNoReportConvertToReport")] public async Task GetPacsNoReportConvertToReportAsync(PatientRegisterIdInputDto input) { var oldDto = await GetPacsNoReportAsync(input); var entDto = await ConvertToReport.ToExamRequestReportDataAsync(oldDto); return entDto; } /// /// 打印Pacs条码数据 单个条码打印 /// /// /// [HttpPost("api/app/PrintReport/GetPacsNoReportByCheckRequestNo")] public async Task GetPacsNoReportByCheckRequestNoAsync(RegisterCheckIdInputDto input) { PacsNoReportDto pacsNoReportDto = new PacsNoReportDto(); if (input.RegisterCheckId != Guid.Empty) { var query = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id into asbitemTemp from asbitemHaveEmpty in asbitemTemp.DefaultIfEmpty() join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitemHaveEmpty.ItemTypeId equals itemType.Id into itemTypeTemp from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty() where registerCheck.Id == input.RegisterCheckId && !string.IsNullOrEmpty(registerCheck.CheckRequestNo) && asbitemHaveEmpty.BarcodeMode != '2' select new { Age = patientRegister.Age, AsbitemName = asbitemHaveEmpty.DisplayName, CheckRequestNo = registerCheck.CheckRequestNo, PatientName = patientRegister.PatientName, PatientRegisterNo = patientRegister.PatientRegisterNo, SexName = _cacheService.GetSexNameAsync(patientRegister.SexId).Result, IsCheckRequest = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.IsCheckRequest : 'N', BarcodeMode = asbitemHaveEmpty != null ? asbitemHaveEmpty.BarcodeMode : '0', CustomerOrgId = patientRegister.CustomerOrgId, }).ToList(); if (query.Count > 0) { var queryGroup = query.GroupBy(g => g.CheckRequestNo).FirstOrDefault(); if (queryGroup.Where(m => m.BarcodeMode == '0' && m.IsCheckRequest == 'Y').Count() > 0) { pacsNoReportDto = new PacsNoReportDto { Age = queryGroup.FirstOrDefault().Age, AsbitemName = string.Join(',', queryGroup.Select(s => s.AsbitemName)), CheckRequestNo = queryGroup.FirstOrDefault().CheckRequestNo, PatientName = queryGroup.FirstOrDefault().PatientName, PatientRegisterNo = queryGroup.FirstOrDefault().PatientRegisterNo, SexName = queryGroup.FirstOrDefault().SexName, CustomerOrgName = _cacheService.GetTopCustomerOrgShortNameAsync(queryGroup.FirstOrDefault().CustomerOrgId).Result, DepartmentName = _cacheService.GetAllDepartmentNameAsync(queryGroup.FirstOrDefault().CustomerOrgId).Result }; } else if (queryGroup.Where(m => m.BarcodeMode == '1').Count() > 0) { pacsNoReportDto = new PacsNoReportDto { Age = queryGroup.FirstOrDefault().Age, AsbitemName = string.Join(',', queryGroup.Select(s => s.AsbitemName)), CheckRequestNo = queryGroup.FirstOrDefault().PatientRegisterNo, PatientName = queryGroup.FirstOrDefault().PatientName, PatientRegisterNo = queryGroup.FirstOrDefault().PatientRegisterNo, SexName = queryGroup.FirstOrDefault().SexName, CustomerOrgName = _cacheService.GetTopCustomerOrgShortNameAsync(queryGroup.FirstOrDefault().CustomerOrgId).Result, DepartmentName = _cacheService.GetAllDepartmentNameAsync(queryGroup.FirstOrDefault().CustomerOrgId).Result }; } } } return pacsNoReportDto; } /// /// 打印Pacs条码数据 单个条码打印 /// /// /// [HttpPost("api/app/PrintReport/GetPacsNoReportByCheckRequestNoConvertToReport")] public async Task GetPacsNoReportByCheckRequestNoConvertToReportAsync(RegisterCheckIdInputDto input) { var oldDto = await GetPacsNoReportByCheckRequestNoAsync(input); var entDto = await ConvertToReport.ToExamRequestReportDataAsync(new List { oldDto }); return entDto; } ///// ///// 打印Pacs条码数据 ///// ///// ///// //[HttpPost("api/app/PrintReport/getpacsnoreport")] //public async Task> GetPacsNoReportAsync(Guid PatientRegisterId) //{ // var query = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() // join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId // join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId // join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id into asbitemTemp // from asbitemHaveEmpty in asbitemTemp.DefaultIfEmpty() // join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitemHaveEmpty.ItemTypeId equals itemType.Id into itemTypeTemp // from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty() // where (patientRegister.Id == PatientRegisterId && itemTypeHaveEmpty.IsCheckRequest == 'Y') // select new PacsNoReportDto // { // Age = patientRegister.Age, // AsbitemName = asbitemHaveEmpty.DisplayName, // CheckRequestNo = registerCheck.CheckRequestNo, // PatientName = patientRegister.PatientName, // PatientRegisterNo = patientRegister.PatientRegisterNo, // SexName = _cacheService.GetSexNameAsync(patientRegister.SexId).Result, // CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(patientRegister.CustomerOrgId).Result, // DepartmentName = _cacheService.GetCustomerOrgNameAsync(patientRegister.CustomerOrgId).Result // }).ToList(); // var entList = query.GroupBy(g => g.CheckRequestNo).Select(s => new PacsNoReportDto // { // Age = s.FirstOrDefault().Age, // AsbitemName = string.Join(',', s.Select(s => s.AsbitemName)), // CheckRequestNo = s.FirstOrDefault().CheckRequestNo, // PatientName = s.FirstOrDefault().PatientName, // PatientRegisterNo = s.FirstOrDefault().PatientRegisterNo, // SexName = s.FirstOrDefault().SexName, // CustomerOrgName = s.FirstOrDefault().CustomerOrgName, // DepartmentName = s.FirstOrDefault().DepartmentName // }).ToList(); // return entList; //} /// /// 打印收费单 /// /// 收费主表ID /// [HttpPost("api/app/PrintReport/getchargereport")] public async Task GetChargeReportAsync(Guid ChargeId) { return await _chargeReportRepository.GetChargeReportAsync(ChargeId); } /// /// 打印收费单 不需要转换版本 /// /// 收费主表ID /// [HttpPost("api/app/PrintReport/GetChargeReportConvertToReport")] public async Task GetChargeReportConvertToReportAsync(Guid ChargeId) { var oldDto = await GetChargeReportAsync(ChargeId); var entDto = await ConvertToReport.ToPayBillReportDataAsync(oldDto); return entDto; } /// /// 获取体检报告人员信息 /// /// /// private async Task GetMedicalReportDto(PatientRegister patientRegister) { #region 系统参数配置 var medicalCenterAddress = await _sysParmValueManager.GetSysParmValueAsync(patientRegister.MedicalCenterId, "medical_center_address"); var medicalCenterFax = await _sysParmValueManager.GetSysParmValueAsync(patientRegister.MedicalCenterId, "medical_center_fax"); var medicalCenterTelphone = await _sysParmValueManager.GetSysParmValueAsync(patientRegister.MedicalCenterId, "medical_center_telphone"); #endregion #region 人员信息 var medicalReportDto = new MedicalReportDto { //个人信息 PatientRegisterId = patientRegister.Id, IsPersonal = 'N', CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(patientRegister.CustomerOrgId).Result.DisplayName, DepartmentName = _cacheService.GetCustomerOrgAsync(patientRegister.CustomerOrgId).Result.DisplayName, PatientRegisterNo = patientRegister.PatientRegisterNo, PatientNo = patientRegister.Patient.PatientNo, PatientName = patientRegister.PatientName, IdNo = patientRegister.Patient.IdNo, MedicalTimes = patientRegister.MedicalTimes, SexName = _cacheService.GetSexNameAsync(patientRegister.SexId).GetAwaiter().GetResult(), BirthDate = patientRegister.BirthDate, Age = patientRegister.Age, MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(patientRegister.MaritalStatusId).GetAwaiter().GetResult(), NationName = _cacheService.GetNationNameAsync(patientRegister.Patient.NationId).GetAwaiter().GetResult(), MobileTelephone = patientRegister.Patient.MobileTelephone, IsVip = patientRegister.IsVip, MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(patientRegister.MedicalTypeId).GetAwaiter().GetResult(), PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(patientRegister.PersonnelTypeId).GetAwaiter().GetResult(), MedicalStartDate = patientRegister.MedicalStartDate, SummaryDoctorName = _cacheService.GetSurnameAsync(patientRegister.SummaryDoctorId).GetAwaiter().GetResult(), SummaryDoctorSignUrl = _cacheService.GetUserSignAsync(patientRegister.SummaryDoctorId).GetAwaiter().GetResult(), SummaryDate = patientRegister.SummaryDate, AuditDoctorName = _cacheService.GetSurnameAsync(patientRegister.AuditDoctorId).GetAwaiter().GetResult(), AuditDoctorSignUrl = _cacheService.GetUserSignAsync(patientRegister.AuditDoctorId).GetAwaiter().GetResult(), AuditDate = patientRegister.AuditDate, //体检中心信息 MedicalCenterTelphone = medicalCenterTelphone, MedicalCenterAddress = medicalCenterAddress, MedicalCenterId = patientRegister.MedicalCenterId, MedicalCenterName = (await _organizationUnitRepository.GetAsync(patientRegister.MedicalCenterId)).DisplayName, }; if (patientRegister.CustomerOrgId == GuidFlag.PersonCustomerOrgId) { medicalReportDto.IsPersonal = 'Y'; } if (patientRegister.MedicalPackageId != null) { var medicalPackageEnt = await _medicalPackageRepository.FirstOrDefaultAsync(f => f.Id == patientRegister.MedicalPackageId); if (medicalPackageEnt != null) { medicalReportDto.MedicalPackageOrCustomerOrgGroupName = medicalPackageEnt.DisplayName; } } else { var customerOrgGroupEnt = await _customerOrgGroupRepository.FirstOrDefaultAsync(f => f.Id == patientRegister.CustomerOrgGroupId); if (customerOrgGroupEnt != null) { medicalReportDto.MedicalPackageOrCustomerOrgGroupName = customerOrgGroupEnt.DisplayName; } } #endregion return medicalReportDto; } /// /// 获取体检报告综述 /// /// /// private async Task> GetMedicalReportSummaryDtos(PatientRegister patientRegister) { var sumSummarylist = (await _sumSummaryHeaderRepository.GetQueryableAsync()) .Include(x => x.SumSummaryContents) .Where(m => m.PatientRegisterId == patientRegister.Id).OrderBy(o => o.DisplayOrder).ToList(); var medicalReportSumSummaryDtos = new List(); if (sumSummarylist.Any()) { medicalReportSumSummaryDtos = sumSummarylist.Select(s => new MedicalReportSumSummaryDto { SummaryTitle = s.SummaryTitle, SummaryFlag = s.SummaryFlag, DisplayOrder = s.DisplayOrder, SummaryContents = s.SumSummaryContents.OrderBy(o => o.DisplayOrder).Select(sa => new MedicalReportSumSummaryContentDto { SummaryContent = sa.SummaryContent, DisplayOrder = sa.DisplayOrder, }).OrderBy(o => o.DisplayOrder).ToList() }).OrderBy(o => o.DisplayOrder).ToList(); } return medicalReportSumSummaryDtos; } /// /// 获取体检报告建议 /// /// /// private async Task> GetMedicalReportSuggestinoDtos(PatientRegister patientRegister) { var sumSuggestionlist = (await _sumSuggestionHeaderRepository.GetQueryableAsync()) .Include(x => x.SumSuggestionContents) .Where(m => m.PatientRegisterId == patientRegister.Id).OrderBy(o => o.DisplayOrder).ToList(); var medicalReportSumSuggestionDtos = new List(); if (sumSuggestionlist.Any()) { medicalReportSumSuggestionDtos = sumSuggestionlist.Select(s => new MedicalReportSumSuggestionDto { SuggestionTitle = s.SuggestionTitle, SuggestionFlag = s.SuggestionFlag, DisplayOrder = s.DisplayOrder, MedicalInterpretations = s.SumSuggestionContents. Where(o => o.SuggestionType == SuggestionTypeFlag.MedicalInterpretation && !string.IsNullOrWhiteSpace(o.SuggestionContent)) .OrderBy(o => o.DisplayOrder) .Select(sa => new MedicalReportSumSuggestionContentDto { SuggestionContent = sa.SuggestionContent, DisplayOrder = sa.DisplayOrder, }).OrderBy(o => o.DisplayOrder).ToList(), CommonReasons = s.SumSuggestionContents. Where(o => o.SuggestionType == SuggestionTypeFlag.CommonReasons && !string.IsNullOrWhiteSpace(o.SuggestionContent)) .OrderBy(o => o.DisplayOrder) .Select(sa => new MedicalReportSumSuggestionContentDto { SuggestionContent = sa.SuggestionContent, DisplayOrder = sa.DisplayOrder, }).OrderBy(o => o.DisplayOrder).ToList(), HealthGuidances = s.SumSuggestionContents. Where(o => o.SuggestionType == SuggestionTypeFlag.HealthGuidance && !string.IsNullOrWhiteSpace(o.SuggestionContent)) .OrderBy(o => o.DisplayOrder) .Select(sa => new MedicalReportSumSuggestionContentDto { SuggestionContent = sa.SuggestionContent, DisplayOrder = sa.DisplayOrder, }).OrderBy(o => o.DisplayOrder).ToList() }) .OrderBy(o => o.DisplayOrder).ToList(); } return medicalReportSumSuggestionDtos; } /// /// 获取体检报告明细结果 /// /// /// /// private async Task SetMedicalReportRegisterChecks(PatientRegister patientRegister, MedicalReportDto medicalReportDto) { var resultStatusList = (await _resultStatusRepository.GetListAsync()); //获取体检报告类别 medicalReportDto.MedicalReportTypes = await GetMedicalReportTypeList(); //获取项目类别 medicalReportDto.ItemTypes = await GetItemTypeList(); var registerChecklist = (from registerCheck in await _registerCheckRepository.GetQueryableAsync() join registerAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerAsbitem.RegisterCheckId join registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckItem.RegisterCheckId join registerCheckPicture in await _registerCheckPictureRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckPicture.RegisterCheckId into registerCheckPictureExist from registerCheckPictureHaveEmpty in registerCheckPictureExist.DefaultIfEmpty() join registerCheckSummary in await _registerCheckSummaryRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckSummary.RegisterCheckId into registerCheckSummaryExist from registerCheckSummaryHaveEmpty in registerCheckSummaryExist.DefaultIfEmpty() join asbitem in await _asbitemRepository.GetQueryableAsync() on registerAsbitem.AsbitemId equals asbitem.Id join item in await _itemRepository.GetQueryableAsync() on registerCheckItem.ItemId equals item.Id join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id join medicalReportType in await _medicalReportTypeRepository.GetQueryableAsync() on itemType.MedicalReportTypeId equals medicalReportType.Id where (registerCheck.PatientRegisterId == patientRegister.Id && registerCheck.CompleteFlag == RegisterCheckCompleteFlag.Checked) select new { registerCheck, registerAsbitem, registerCheckItem, registerCheckPictureHaveEmpty, registerCheckSummaryHaveEmpty, asbitem, item, itemType, medicalReportType }) .OrderBy(o => o.registerCheck.Id) .ToList(); var registerCheckIds = registerChecklist.Select(o => o.registerCheck.Id).Distinct().ToList(); #region 获取采样时间 var samplerList = (from registerCheck in await _registerCheckRepository.GetQueryableAsync() join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId join lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id where registerCheckIds.Contains(registerCheck.Id) select new { registerCheckId = registerCheck.Id, samplerId = lisRequest.SamplerId, samplingTime = lisRequest.SamplingTime }).ToList(); #endregion foreach (var registerCheckId in registerCheckIds) { var registerCheckRows = registerChecklist.Where(o => o.registerCheck.Id == registerCheckId).ToList(); //隐藏隐私项目 if (registerCheckRows.Where(m => m.asbitem.IsPrivacy == 'Y').Count() > 0) { continue; } var registerCheckRow = registerCheckRows.First(); var medicalReportRegisterCheckDto = new MedicalReportRegisterCheckDto() { ItemTypeId = registerCheckRow.itemType.Id, AsbitemNames = string.Join(",", registerCheckRows. GroupBy(o => o.asbitem.Id). Select(d => d.First().asbitem.DisplayName ) .ToList() ), CheckDate = (DateTime)registerCheckRow.registerCheck.CheckDate, }; #region 采样信息 var sampler = samplerList.FirstOrDefault(f => f.registerCheckId == registerCheckId); if (sampler != null) { medicalReportRegisterCheckDto.SamplerName = _cacheService.GetSurnameAsync(sampler.samplerId).GetAwaiter().GetResult(); medicalReportRegisterCheckDto.SamplingTime = DataHelper.ConversionDateToString(sampler.samplingTime); } #endregion //检查医生 var checkDoctorId = registerCheckRow.registerCheck.CheckDoctorId; if (!string.IsNullOrWhiteSpace(checkDoctorId)) { if (Guid.TryParse(checkDoctorId, out var checkDoctorIdGuid)) { medicalReportRegisterCheckDto.CheckDoctorName = _cacheService.GetSurnameAsync(checkDoctorIdGuid).GetAwaiter().GetResult(); medicalReportRegisterCheckDto.CheckDoctorSignUrl = _cacheService.GetUserSignAsync(checkDoctorIdGuid).GetAwaiter().GetResult(); } else { medicalReportRegisterCheckDto.CheckDoctorName = checkDoctorId; medicalReportRegisterCheckDto.CheckDoctorSignUrl = ""; } } #region 体检审核信息 medicalReportRegisterCheckDto.IsAudit = registerCheckRow.registerCheck.IsAudit; medicalReportRegisterCheckDto.AuditTime = DataHelper.ConversionDateToString(registerCheckRow.registerCheck.AuditTime); var auditorUserId = registerCheckRow.registerCheck.AuditorUserId; if (auditorUserId != null && auditorUserId != Guid.Empty) { medicalReportRegisterCheckDto.AuditorUserName = _cacheService.GetSurnameAsync(auditorUserId).GetAwaiter().GetResult(); medicalReportRegisterCheckDto.AuditorUserSignUrl = _cacheService.GetUserSignAsync(auditorUserId).GetAwaiter().GetResult(); } #endregion #region 第三方传过来的审核信息 //lis审核医生+标本号 medicalReportRegisterCheckDto.LisSampleNo = registerCheckRow.registerCheck.LisSampleNo; medicalReportRegisterCheckDto.SubmissionTime = DataHelper.ConversionDateToString(registerCheckRow.registerCheck.SubmissionTime); medicalReportRegisterCheckDto.AuditorTime = DataHelper.ConversionDateToString(registerCheckRow.registerCheck.AuditorTime); // medicalReportRegisterCheckDto.LisAuditorDoctorName = registerCheckRow.registerCheck.LisAuditorDoctorName; //lis审核医生 var auditorNameId = registerCheckRow.registerCheck.AuditorName; if (!string.IsNullOrWhiteSpace(auditorNameId)) { if (Guid.TryParse(auditorNameId, out var auditorNameIdGuid)) { medicalReportRegisterCheckDto.AuditorName = _cacheService.GetSurnameAsync(auditorNameIdGuid).GetAwaiter().GetResult(); medicalReportRegisterCheckDto.AuditorNameSignUrl = _cacheService.GetUserSignAsync(auditorNameIdGuid).GetAwaiter().GetResult(); } else { medicalReportRegisterCheckDto.AuditorName = auditorNameId; medicalReportRegisterCheckDto.AuditorNameSignUrl = ""; } } #endregion //显示顺序 medicalReportRegisterCheckDto.DisplayOrder = registerCheckRow.asbitem.DisplayOrder; //明细结果 foreach (var registerCheckItemRow in registerCheckRows) { if (medicalReportRegisterCheckDto.Items. Where(o => o.ItemId == registerCheckItemRow.registerCheckItem.ItemId).Count() > 0) { continue; } var resultStatus = resultStatusList.Where(o => o.Id == registerCheckItemRow.registerCheckItem.ResultStatusId).FirstOrDefault(); var medicalReportCheckItemDto = new MedicalReportCheckItemDto() { ItemId = registerCheckItemRow.registerCheckItem.ItemId, ItemName = registerCheckItemRow.item.DisplayName, Result = registerCheckItemRow.registerCheckItem.Result, ReferenceRangeValue = registerCheckItemRow.registerCheckItem.ReferenceRangeValue, CriticalRangeValue = registerCheckItemRow.registerCheckItem.CriticalRangeValue, Unit = registerCheckItemRow.registerCheckItem.Unit, ReportFontColor = (resultStatus == null) ? 0 : resultStatus.ReportFontColor, ReportBackgroundColor = (resultStatus == null) ? 16579836 : resultStatus.ReportBackgroundColor, ReportPrompt = (resultStatus == null) ? null : resultStatus.ReportPrompt, DisplayOrder = registerCheckItemRow.item.DisplayOrder, }; medicalReportRegisterCheckDto.Items.Add(medicalReportCheckItemDto); } //小结 //medicalReportRegisterCheckDto.Summarys = registerCheckRows.Select(o => new MedicalReportCheckAsbitemSummaryDto() //{ // Summary = o.registerCheckSummaryHaveEmpty.Summary, // DisplayOrder = o.registerCheckSummaryHaveEmpty.DisplayOrder //}).OrderBy(o => o.DisplayOrder).Distinct().ToList(); medicalReportRegisterCheckDto.Summarys = registerCheckRows.Where(o => o.registerCheckSummaryHaveEmpty != null) .GroupBy(g => g.registerCheckSummaryHaveEmpty.Id) .Select(o => new MedicalReportCheckAsbitemSummaryDto() { Summary = o.FirstOrDefault().registerCheckSummaryHaveEmpty.Summary, DisplayOrder = o.FirstOrDefault().registerCheckSummaryHaveEmpty.DisplayOrder }).OrderBy(o => o.DisplayOrder).Distinct().ToList(); //图片 var registerCheckPictures = registerCheckRows.Where(o => o.registerCheckPictureHaveEmpty != null && o.registerCheckPictureHaveEmpty.IsPrint == 'Y') .Select(o => new { PictureFilename = o.registerCheckPictureHaveEmpty.PictureFilename, DisplayOrder = o.registerCheckPictureHaveEmpty.DisplayOrder, PictureFileType = o.registerCheckPictureHaveEmpty.PictureFileType, ItemTypeName = o.itemType.DisplayName }).OrderBy(o => o.DisplayOrder).Distinct().ToList(); foreach (var registerCheckPicture in registerCheckPictures) { var medicalReportCheckPictureDto = new MedicalReportCheckPictureDto(); medicalReportCheckPictureDto.PictureFileName = registerCheckPicture.PictureFilename; //medicalReportCheckPictureDto.PictureBase64 = // Shentun.Utilities.FileHelper.ToBase64(registerCheckPicture.PictureFilename); medicalReportCheckPictureDto.DisplayOrder = registerCheckPicture.DisplayOrder; medicalReportCheckPictureDto.PictureFileType = registerCheckPicture.PictureFileType; medicalReportCheckPictureDto.ItemTypeName = registerCheckPicture.ItemTypeName; medicalReportRegisterCheckDto.Pictures.Add(medicalReportCheckPictureDto); } medicalReportDto.RegisterChecks.Add(medicalReportRegisterCheckDto); } } /// /// 获取项目类别 /// /// private async Task> GetItemTypeList() { var itemTypes = await _itemTypeRepository.GetListAsync(); var medicalReportItemTypeDtos = new List(); foreach (var itemType in itemTypes) { var medicalReportItemTypeDto = new MedicalReportItemTypeDto() { MedicalReportTypeId = itemType.MedicalReportTypeId, ItemTypeId = itemType.Id, ItemTypeName = itemType.DisplayName, ItemTypePathCode = itemType.PathCode, DisplayOrder = itemType.DisplayOrder, }; medicalReportItemTypeDtos.Add(medicalReportItemTypeDto); } return medicalReportItemTypeDtos; } /// /// 获取体检报告类别 /// /// private async Task> GetMedicalReportTypeList() { var medicalReportTypes = (await _medicalReportTypeRepository.GetListAsync()).OrderBy(o => o.DisplayOrder); var MedicalReportMedicalReportTypeDtos = new List(); foreach (var medicalReportType in medicalReportTypes) { MedicalReportMedicalReportTypeDtos.Add(new MedicalReportMedicalReportTypeDto() { MedicalReportTypeId = medicalReportType.Id, MedicalReportTypeName = medicalReportType.DisplayName, DisplayOrder = medicalReportType.DisplayOrder, }); } return MedicalReportMedicalReportTypeDtos; } private static List PatientRegisterGuideAsbitem(Guid PatientRegisterId, string PatientRegisterNo, Guid medicalCenterId, char SexId) { var entlist = _registerCheckAsbitemStaticRepository.GetQueryableAsync().Result .Include(x => x.Asbitem.ItemType) .Include(x => x.Asbitem.ItemType.GuidType) .Include(x => x.RegisterCheck) .Where(m => m.PatientRegisterId == PatientRegisterId && m.Asbitem.IsCheck == 'Y') .Select(s => new PatientRegisterGuideReport_Asbitem_Temp { AsbitemName = s.Asbitem.DisplayName, AsbitemGuide = _asbitemGuideManager.GetAsbitemGuideConvertSexId(medicalCenterId, s.AsbitemId, SexId), AsbitemDisplayOrder = s.Asbitem.DisplayOrder, ItemTypeDisplayOrder = s.Asbitem.ItemType.DisplayOrder, GuideDisplayOrder = s.Asbitem.ItemType.GuidType.DisplayOrder, GuideName = s.Asbitem.ItemType.GuidType.DisplayName, CheckRequestNo = GetCheckRequestNobyAsbitem(s.Asbitem, PatientRegisterNo, s.RegisterCheck.CheckRequestNo, s.Asbitem.ItemType.IsCheckRequest) }) .OrderBy(o => o.GuideDisplayOrder) .GroupBy(g => new { g.GuideName, g.GuideDisplayOrder }) .Select(s => new PatientRegisterGuideReport_Detail { GuideName = s.Key.GuideName, AsbitemCount = s.Count(), DisplayOrder = s.Key.GuideDisplayOrder, Detail_Name = s.ToList().Select(ss => new PatientRegisterGuideReport_Detail_Asbitem { AsbitemName = ss.AsbitemName, AsbitemGuide = ss.AsbitemGuide, DisplayOrder = (ss.ItemTypeDisplayOrder * 3000) + ss.AsbitemDisplayOrder, CheckRequestNo = ss.CheckRequestNo }).OrderBy(o => o.DisplayOrder).ToList() }).OrderBy(o => o.DisplayOrder).ToList(); return entlist; } /// /// 获取检查单号 /// /// private static string GetCheckRequestNobyAsbitem(Asbitem asbitem, string PatientRegisterNo, string CheckRequestNo, char IsCheckRequest) { string result = ""; if (asbitem.BarcodeMode == BarcodeModeFlag.UsingItemType && IsCheckRequest == 'Y') { result = CheckRequestNo; } else if (asbitem.BarcodeMode == BarcodeModeFlag.PrintPatientRegisterNumber) { result = PatientRegisterNo; } return result; } /// /// 获取项目结果对比 /// /// /// private async Task> GetMedicalReportItemContrastListAsync(PatientRegister newPatientRegister) { var query = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id join registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckItem.RegisterCheckId join item in await _itemRepository.GetQueryableAsync() on registerCheckItem.ItemId equals item.Id where patientRegister.PatientId == newPatientRegister.PatientId && item.IsReportContrast == 'Y' && patientRegister.MedicalStartDate != null && patientRegister.MedicalStartDate >= newPatientRegister.MedicalStartDate.Value.AddYears(-3) select new { registerCheckItem, itemName = item.DisplayName, medicalStartDate = patientRegister.MedicalStartDate, asbitemName = asbitem.DisplayName }).ToList(); var entListDto = query.GroupBy(g => g.registerCheckItem) .Select(s => new MedicalReportItemContrastDto { AsbitemName = string.Join(",", s.Select(s => s.asbitemName).Distinct()), ItemName = s.FirstOrDefault().itemName, ItemReferenceRange = s.Key.ReferenceRangeValue, ItemResult = s.Key.Result, MedicalStartDate = DataHelper.ConversionDateShortToString(s.FirstOrDefault().medicalStartDate) }).ToList(); foreach (var item in entListDto) { decimal resultDecimal; if (!decimal.TryParse(item.ItemResult, out resultDecimal)) { item.ItemResult = "0"; } } return entListDto; } } }