|
|
using Microsoft.AspNetCore.Authorization;using Microsoft.AspNetCore.Mvc;using Microsoft.EntityFrameworkCore;using NPOI.POIFS.Properties;using NUglify.Helpers;using Shentun.Peis.Enums;using Shentun.Peis.LisRequests;using Shentun.Peis.Models;using Shentun.Peis.PatientRegisters;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 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.Uow;
namespace Shentun.Peis.PrintReports{ /// <summary>
/// 打印报告服务
/// </summary>
[ApiExplorerSettings(GroupName = "Work")] [Authorize] public class PrintReportAppService : ApplicationService { private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository; private readonly IRepository<Patient, Guid> _patientRepository; private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository; private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository; private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository; private readonly IRepository<RegisterCheckSummary> _registerCheckSummaryRepository; private readonly IRepository<RegisterCheckPicture, Guid> _registerCheckPictureRepository; private readonly IRepository<Asbitem, Guid> _asbitemRepository; private readonly IRepository<Item, Guid> _itemRepository; private readonly IRepository<MedicalReportType, char> _medicalReportTypeRepository; private readonly IRepository<ItemType, Guid> _itemTypeRepository; private readonly IRepository<LisRequest, Guid> _lisRequestRepository; private readonly IRepository<SampleGroup, Guid> _sampleGroupRepository; private readonly IRepository<SampleContainer, Guid> _sampleContainerRepository; private readonly IRepository<SampleType, Guid> _sampleTypeRepository; private readonly IRepository<Sex> _sexRegisterRepository; private readonly IRepository<ResultStatus> _resultStatusRepository; private readonly IRepository<SumSummaryHeader, Guid> _sumSummaryHeaderRepository; private readonly IRepository<IdentityUser, Guid> _identityUserRepository; private readonly IRepository<SumSuggestionHeader, Guid> _sumSuggestionHeaderRepository; private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository; private readonly IOrganizationUnitRepository _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; public PrintReportAppService( IRepository<Patient, Guid> patientRepository, IRepository<CustomerOrg, Guid> customerOrgRepository, IRepository<PatientRegister, Guid> patientRegisterRepository, IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository, IRepository<RegisterCheckItem> registerCheckItemRepository, IRepository<RegisterCheckSummary> registerCheckSummaryRepository, IRepository<RegisterCheckPicture, Guid> registerCheckPictureRepository, IRepository<Asbitem, Guid> asbitemRepository, IRepository<Item, Guid> itemRepository, IRepository<MedicalReportType, char> medicalReportTypeRepository, IRepository<ItemType, Guid> itemTypeRepository, IRepository<LisRequest, Guid> lisRequestRepository, IRepository<SampleGroup, Guid> sampleGroupRepository, IRepository<SampleContainer, Guid> sampleContainerRepository, IRepository<SampleType, Guid> sampleTypeRepository, IRepository<Sex> sexRegisterRepository, IRepository<ResultStatus> resultStatusRepository, IRepository<SumSummaryHeader, Guid> sumSummaryHeaderRepository, IRepository<IdentityUser, Guid> identityUserRepository, IRepository<SumSuggestionHeader, Guid> sumSuggestionHeaderRepository, IRepository<RegisterCheck, Guid> registerCheckRepository, IOrganizationUnitRepository organizationUnitRepository, IPatientRegisterGuideReportRepository patientRegisterGuideReportRepository, ILisRequestReportRepository lisRequestReportRepository, ICheckRequestNoReportRepository checkRequestNoReportRepository, IChargeReportRepository chargeReportRepository, SysParmValueManager sysParmValueManager, CacheService cacheService, LisRequestManager lisRequestManager, IUnitOfWorkManager unitOfWorkManager ) { 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; _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; }
/// <summary>
/// 获取体检人员指引单报告数据
/// </summary>
/// <param name="PatientRegisterId"></param>
/// <returns></returns>
[HttpPost("api/app/PrintReport/getpatientregisterguidereport")] public async Task<PatientRegisterGuideReportDto> GetPatientRegisterGuideReportAsync(Guid PatientRegisterId) { return await _patientRegisterGuideReportRepository.GetPatientRegisterGuideReportAsync(PatientRegisterId); }
/// <summary>
/// 批量获取体检人员指引单报告数据
/// </summary>
/// <param name="PatientRegisterIds"></param>
/// <returns></returns>
[HttpPost("api/app/printreport/getpatientregisterguidereportmany")] public async Task<List<PatientRegisterGuideReportDto>> GetPatientRegisterGuideReportManyAsync(List<Guid> PatientRegisterIds) { return await _patientRegisterGuideReportRepository.GetPatientRegisterGuideReportManyAsync(PatientRegisterIds); }
/// <summary>
/// 打印检验申请单
/// </summary>
/// <returns></returns>
[HttpPost("api/app/PrintReport/GetLisRequestReportByPatientRegisterId")] public async Task<List<LisRequestReportDto>> GetLisRequestReportByPatientRegisterIdAsync(PatientRegisterIdInputDto input) { //生成LIS条码
var lisRequests = await _lisRequestManager.SetLisRequestAsync(input.PatientRegisterId); await _unitOfWorkManager.Current.SaveChangesAsync(); //检索条码数据
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 into bb from registerCheckAsbitemHaveEmpty in bb.DefaultIfEmpty() join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitemHaveEmpty.AsbitemId equals asbitem.Id into ff from asbitemHaveEmpty in ff.DefaultIfEmpty() join lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitemHaveEmpty.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() where (patientRegister.Id == input.PatientRegisterId && registerCheckAsbitemHaveEmpty.LisRequestId != null) select new { patient, patientRegister, sex, registerCheckAsbitemHaveEmpty, asbitemHaveEmpty, lisRequest, sampleContainerHaveEmpty, sampleTypeHaveEmpty } ).ToList(); 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.asbitemHaveEmpty.ShortName) ? o.asbitemHaveEmpty.DisplayName : o.asbitemHaveEmpty.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.GetTopCustomerOrgAsync(o.patientRegister.CustomerOrgId).Result.DisplayName, DepartmentName = _cacheService.GetCustomerOrgNameAsync(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, }).ToList();
var 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 }) .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 = s.Key.LisRequestNo, 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, }).ToList();
return entlist; }
[HttpPost("api/app/PrintReport/GetLisRequestReportByLisRequestId")] public async Task<LisRequestReportDto> GetLisRequestReportByLisRequestIdAsync(LisRequestIdInputDto input) { 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 where lisRequest.Id == input.LisRequestId select new { patient, patientRegister, asbitem, lisRequest, sampleContainer, sampleType
}).Distinct().ToList(); if (!list.Any()) { return null; }
var lisRequestDtoList = new List<LisRequestReportDto>(); var lisRequestInfo = list.First(); var lisRequestDto = new LisRequestReportDto() { LisRequestId = input.LisRequestId, LisRequestNo = lisRequestInfo.lisRequest.LisRequestNo, 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.GetTopCustomerOrgAsync(lisRequestInfo.patientRegister.CustomerOrgId).Result.DisplayName, DepartmentName = _cacheService.GetCustomerOrgNameAsync(lisRequestInfo.patientRegister.CustomerOrgId).Result };
return lisRequestDto; } /// <summary>
/// 打印体检报告
/// </summary>
/// <returns></returns>
[HttpPost("api/app/PrintReport/GetMedicalReport")] public async Task<MedicalReportDto> GetMedicalReportAsync(PatientRegisterIdInputDto input) { var patientRegister = (await _patientRegisterRepository.GetDbSetAsync()) .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); return medicalReportDto; }
/// <summary>
/// 打印Pacs条码数据
/// </summary>
/// <param name="PatientRegisterId"></param>
/// <returns></returns>
[HttpPost("api/app/PrintReport/getpacsnoreport")] public async Task<List<PacsNoReportDto>> GetPacsNoReportAsync(Guid PatientRegisterId) { return await _checkRequestNoReportRepository.GetPacsNoReportAsync(PatientRegisterId); }
/// <summary>
/// 打印收费单
/// </summary>
/// <param name="ChargeId">收费主表ID</param>
/// <returns></returns>
[HttpPost("api/app/PrintReport/getchargereport")] public async Task<ChargeReportDto> GetChargeReportAsync(Guid ChargeId) { return await _chargeReportRepository.GetChargeReportAsync(ChargeId); } /// <summary>
/// 获取体检报告人员信息
/// </summary>
/// <param name="patientRegister"></param>
/// <returns></returns>
private async Task<MedicalReportDto> 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).Result, BirthDate = patientRegister.BirthDate, Age = patientRegister.Age, MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(patientRegister.MaritalStatusId).Result, NationName = _cacheService.GetNationNameAsync(patientRegister.Patient.NationId).Result, MobileTelephone = patientRegister.Patient.MobileTelephone, IsVip = patientRegister.IsVip, MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(patientRegister.MedicalTypeId).Result, PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(patientRegister.PersonnelTypeId).Result, MedicalStartDate = patientRegister.MedicalStartDate, SummaryDoctorName = _cacheService.GetSurnameAsync(patientRegister.SummaryDoctorId).Result, SummaryDate = patientRegister.SummaryDate, AuditDoctorName = _cacheService.GetSurnameAsync(patientRegister.AuditDoctorId).Result, 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'; } #endregion
return medicalReportDto; } /// <summary>
/// 获取体检报告综述
/// </summary>
/// <param name="patientRegister"></param>
/// <returns></returns>
private async Task<List<MedicalReportSumSummaryDto>> GetMedicalReportSummaryDtos(PatientRegister patientRegister) { var sumSummarylist = (await _sumSummaryHeaderRepository.GetDbSetAsync()) .Include(x => x.SumSummaryContents) .Where(m => m.PatientRegisterId == patientRegister.Id).OrderBy(o => o.DisplayOrder).ToList(); var medicalReportSumSummaryDtos = new List<MedicalReportSumSummaryDto>(); 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; } /// <summary>
/// 获取体检报告建议
/// </summary>
/// <param name="patientRegister"></param>
/// <returns></returns>
private async Task<List<MedicalReportSumSuggestionDto>> GetMedicalReportSuggestinoDtos(PatientRegister patientRegister) { var sumSuggestionlist = (await _sumSuggestionHeaderRepository.GetDbSetAsync()) .Include(x => x.SumSuggestionContents) .Where(m => m.PatientRegisterId == patientRegister.Id).OrderBy(o => o.DisplayOrder).ToList(); var medicalReportSumSuggestionDtos = new List<MedicalReportSumSuggestionDto>(); 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) .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.MedicalInterpretation) .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.MedicalInterpretation) .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; } /// <summary>
/// 获取体检报告明细结果
/// </summary>
/// <param name="patientRegister"></param>
/// <param name="medicalReportDto"></param>
/// <returns></returns>
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(); foreach (var registerCheckId in registerCheckIds) { var registerCheckRows = registerChecklist.Where(o => o.registerCheck.Id == registerCheckId).ToList(); 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, }; //检查医生
var checkDoctorId = registerCheckRow.registerCheck.CheckDoctorId; if (!string.IsNullOrWhiteSpace(checkDoctorId)) { if (Guid.TryParse(checkDoctorId, out var checkDoctorIdGuid)) { medicalReportRegisterCheckDto.CheckDoctorName = _cacheService.GetSurnameAsync(checkDoctorIdGuid).Result; } else { medicalReportRegisterCheckDto.CheckDoctorName = checkDoctorId; } } //显示顺序
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.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 }).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; medicalReportRegisterCheckDto.Pictures.Add(medicalReportCheckPictureDto); } medicalReportDto.RegisterChecks.Add(medicalReportRegisterCheckDto); } } /// <summary>
/// 获取项目类别
/// </summary>
/// <returns></returns>
private async Task<List<MedicalReportItemTypeDto>> GetItemTypeList() { var itemTypes = await _itemTypeRepository.GetListAsync(); var medicalReportItemTypeDtos = new List<MedicalReportItemTypeDto>(); 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; } /// <summary>
/// 获取体检报告类别
/// </summary>
/// <returns></returns>
private async Task<List<MedicalReportMedicalReportTypeDto>> GetMedicalReportTypeList() { var medicalReportTypes = (await _medicalReportTypeRepository.GetListAsync()).OrderBy(o => o.DisplayOrder); var MedicalReportMedicalReportTypeDtos = new List<MedicalReportMedicalReportTypeDto>(); foreach (var medicalReportType in medicalReportTypes) { MedicalReportMedicalReportTypeDtos.Add(new MedicalReportMedicalReportTypeDto() { MedicalReportTypeId = medicalReportType.Id, MedicalReportTypeName = medicalReportType.DisplayName, DisplayOrder = medicalReportType.DisplayOrder, }); } return MedicalReportMedicalReportTypeDtos; } }}
|