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
{
///
/// 打印报告服务
///
[ApiExplorerSettings(GroupName = "Work")]
[Authorize]
public class PrintReportAppService : ApplicationService
{
private readonly IRepository _customerOrgRepository;
private readonly IRepository _patientRepository;
private readonly IRepository _patientRegisterRepository;
private readonly IRepository _registerCheckAsbitemRepository;
private readonly IRepository _registerCheckItemRepository;
private readonly IRepository _registerCheckSummaryRepository;
private readonly IRepository _registerCheckPictureRepository;
private readonly IRepository _asbitemRepository;
private readonly IRepository- _itemRepository;
private readonly IRepository _medicalReportTypeRepository;
private readonly IRepository _itemTypeRepository;
private readonly IRepository _lisRequestRepository;
private readonly IRepository _sampleGroupRepository;
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 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 patientRepository,
IRepository customerOrgRepository,
IRepository patientRegisterRepository,
IRepository registerCheckAsbitemRepository,
IRepository registerCheckItemRepository,
IRepository registerCheckSummaryRepository,
IRepository registerCheckPictureRepository,
IRepository asbitemRepository,
IRepository
- itemRepository,
IRepository medicalReportTypeRepository,
IRepository itemTypeRepository,
IRepository lisRequestRepository,
IRepository sampleGroupRepository,
IRepository sampleContainerRepository,
IRepository sampleTypeRepository,
IRepository sexRegisterRepository,
IRepository resultStatusRepository,
IRepository sumSummaryHeaderRepository,
IRepository identityUserRepository,
IRepository sumSuggestionHeaderRepository,
IRepository 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;
}
///
/// 获取体检人员指引单报告数据
///
///
///
[HttpPost("api/app/PrintReport/getpatientregisterguidereport")]
public async Task GetPatientRegisterGuideReportAsync(Guid PatientRegisterId)
{
return await _patientRegisterGuideReportRepository.GetPatientRegisterGuideReportAsync(PatientRegisterId);
}
///
/// 批量获取体检人员指引单报告数据
///
///
///
[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();
//检索条码数据
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 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();
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;
}
///
/// 打印体检报告
///
///
[HttpPost("api/app/PrintReport/GetMedicalReport")]
public async Task 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;
}
///
/// 打印Pacs条码数据
///
///
///
[HttpPost("api/app/PrintReport/getpacsnoreport")]
public async Task> GetPacsNoReportAsync(Guid PatientRegisterId)
{
return await _checkRequestNoReportRepository.GetPacsNoReportAsync(PatientRegisterId);
}
///
/// 打印收费单
///
/// 收费主表ID
///
[HttpPost("api/app/PrintReport/getchargereport")]
public async Task GetChargeReportAsync(Guid ChargeId)
{
return await _chargeReportRepository.GetChargeReportAsync(ChargeId);
}
///
/// 获取体检报告人员信息
///
///
///
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).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;
}
///
/// 获取体检报告综述
///
///
///
private async Task> 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();
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.GetDbSetAsync())
.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)
.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;
}
///
/// 获取体检报告明细结果
///
///
///
///
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);
}
}
///
/// 获取项目类别
///
///
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;
}
}
}