You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

699 lines
39 KiB

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;
}
}
}