From 903e9b9e7814471799e28989f579e1cb48653866 Mon Sep 17 00:00:00 2001 From: wxd <123@qq.com> Date: Fri, 9 Aug 2024 15:53:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8C=E4=B8=9A=E7=97=85=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...mpanyOccupationalDiseaseDetailReportDto.cs | 2 +- .../OccupationalDiseaseReportAppService.cs | 330 +++++++++++++++++- .../PatientRegisterAppService.cs | 23 +- 3 files changed, 335 insertions(+), 20 deletions(-) diff --git a/src/Shentun.Peis.Application.Contracts/OccupationalDiseaseReports/GetCompanyOccupationalDiseaseDetailReportDto.cs b/src/Shentun.Peis.Application.Contracts/OccupationalDiseaseReports/GetCompanyOccupationalDiseaseDetailReportDto.cs index 947819a..e279be4 100644 --- a/src/Shentun.Peis.Application.Contracts/OccupationalDiseaseReports/GetCompanyOccupationalDiseaseDetailReportDto.cs +++ b/src/Shentun.Peis.Application.Contracts/OccupationalDiseaseReports/GetCompanyOccupationalDiseaseDetailReportDto.cs @@ -83,7 +83,7 @@ namespace Shentun.Peis.OccupationalDiseaseReports public List ReviewPersonnelDetails { get; set; } = new List(); /// - /// 尽快诊疗一览表 + /// 尽快诊疗一览表 暂时 无 /// public List DiagnosisAndTreatmentDetails { get; set; } = new List(); diff --git a/src/Shentun.Peis.Application/OccupationalDiseaseReports/OccupationalDiseaseReportAppService.cs b/src/Shentun.Peis.Application/OccupationalDiseaseReports/OccupationalDiseaseReportAppService.cs index f1086fd..03e7528 100644 --- a/src/Shentun.Peis.Application/OccupationalDiseaseReports/OccupationalDiseaseReportAppService.cs +++ b/src/Shentun.Peis.Application/OccupationalDiseaseReports/OccupationalDiseaseReportAppService.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using NPOI.SS.Formula.Functions; using Shentun.Peis.Enums; using Shentun.Peis.Models; using Shentun.Peis.SysParmValues; @@ -22,6 +23,7 @@ namespace Shentun.Peis.OccupationalDiseaseReports { private readonly IRepository _patientRegisterRepository; + private readonly IRepository _patientRepository; private readonly IRepository _registerCheckRepository; private readonly IRepository _registerCheckAsbitemRepository; private readonly IRepository _asbitemRepository; @@ -34,7 +36,8 @@ namespace Shentun.Peis.OccupationalDiseaseReports private readonly IRepository _occupationalAbnormalRepository; private readonly IRepository _poisonRepository; private readonly IRepository _registerCheckSummaryRepository; - + private readonly IRepository _sumSummaryHeaderRepository; + private readonly IRepository _sumSummaryContentRepository; public OccupationalDiseaseReportAppService( IRepository patientRegisterRepository, IRepository registerCheckRepository, @@ -48,7 +51,10 @@ namespace Shentun.Peis.OccupationalDiseaseReports IRepository patientPoisonRepository, IRepository occupationalAbnormalRepository, IRepository poisonRepository, - IRepository registerCheckSummaryRepository) + IRepository registerCheckSummaryRepository, + IRepository patientRepository, + IRepository sumSummaryHeaderRepository, + IRepository sumSummaryContentRepository) { _patientRegisterRepository = patientRegisterRepository; _registerCheckRepository = registerCheckRepository; @@ -63,6 +69,9 @@ namespace Shentun.Peis.OccupationalDiseaseReports _occupationalAbnormalRepository = occupationalAbnormalRepository; _poisonRepository = poisonRepository; _registerCheckSummaryRepository = registerCheckSummaryRepository; + _patientRepository = patientRepository; + _sumSummaryHeaderRepository = sumSummaryHeaderRepository; + _sumSummaryContentRepository = sumSummaryContentRepository; } @@ -215,7 +224,7 @@ namespace Shentun.Peis.OccupationalDiseaseReports join registerCheckSummary in await _registerCheckSummaryRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckSummary.RegisterCheckId join patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() on patientRegister.Id equals patientOccupationalDisease.PatientRegisterId where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId - &&!registerCheckSummary.Summary.Contains("未见异常") + && !registerCheckSummary.Summary.Contains("未见异常") && patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck select new { @@ -251,10 +260,6 @@ namespace Shentun.Peis.OccupationalDiseaseReports asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.CustomerOrgGroupId != null && customerOrgPara.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value)); } - - var ggggg = asbitemAbnormalQuery.ToQueryString(); - - var asbitemAbnormalList = asbitemAbnormalQuery.ToList(); //异常总人数 @@ -307,15 +312,21 @@ namespace Shentun.Peis.OccupationalDiseaseReports from posionHaveEmpty in poisonTemp.DefaultIfEmpty() join occupationalAbnormal in await _occupationalAbnormalRepository.GetQueryableAsync() on patientPoisonHaveEmpty.OccupationalAbnormalId equals occupationalAbnormal.Id into occupationalAbnormalTemp from occupationalAbnormalHaveEmpty in occupationalAbnormalTemp.DefaultIfEmpty() + join ocCheckType in await _ocCheckTypeRepository.GetQueryableAsync() on patientOccupationalDisease.OcCheckTypeId equals ocCheckType.Id into ocCheckTypeTemp + from ocCheckTypeHaveEmpty in ocCheckTypeTemp.DefaultIfEmpty() + join sumSummaryHeader in (await _sumSummaryHeaderRepository.GetQueryableAsync()).Include(x => x.SumSummaryContents) on patientRegister.Id equals sumSummaryHeader.PatientRegisterId into sumSummaryHeaderTemp + from sumSummaryHeaderHaveEmpty in sumSummaryHeaderTemp.DefaultIfEmpty() where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId - && patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck + && patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration select new { patientRegister, patientOccupationalDisease, posionHaveEmpty, patientPoisonHaveEmpty, - occupationalAbnormalHaveEmpty + occupationalAbnormalHaveEmpty, + ocCheckTypeHaveEmpty, + sumSummaryHeaderHaveEmpty }; @@ -352,14 +363,9 @@ namespace Shentun.Peis.OccupationalDiseaseReports var msg = new GetCompanyOccupationalDiseaseDetailReportDto { - MedicalResultDesc = "", DiagnosisAndTreatmentDetails = new List(), ListOfMissingItemsDetails = new List(), MedicalResultAbnormalRateDetails = new List(), - MedicalResultDetails = new List(), - OcCheckTypeDetails = new List(), - OcCheckTypeNames = new List(), - OccupationalAbnormalDetails = new List(), OccupationalContraindicationDetails = new List(), ReviewPersonnelDetails = new List(), SuspectedOccupationalDiseaseDetails = new List() @@ -369,10 +375,10 @@ namespace Shentun.Peis.OccupationalDiseaseReports if (patientRegisterList.Any()) { - //人员id - var patientRegisters = query.Select(m => m.patientRegister).Distinct().ToList(); + //人员 + var patientRegisters = patientRegisterList.Select(m => m.patientRegister).Distinct().ToList(); - var patientRegisterfisrt = query.First(); + var patientRegisterfisrt = patientRegisterList.First(); msg.CertificateNo = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "medical_center_qualification_certificate_number"); msg.CustomerOrgName = await _cacheService.GetTopCustomerOrgNameAsync(patientRegisterfisrt.patientRegister.CustomerOrgId); @@ -381,12 +387,270 @@ namespace Shentun.Peis.OccupationalDiseaseReports msg.RecordNumber = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "medical_center_record_number"); msg.ReportDate = DateTime.Now.ToString("yyyy年MM月dd日"); + msg.OcCheckTypeNames = (await _ocCheckTypeRepository.GetListAsync()).Select(s => s.DisplayName).ToList(); + + #region 检查情况报告列表 + + var ocCheckTypeDetails = patientRegisterList.GroupBy(g => new { g.patientRegister, g.patientOccupationalDisease.OcCheckTypeId }) + .Select(s => new + { + posionNames = string.Join("、", s.Where(m => m.posionHaveEmpty != null) + .OrderBy(o => o.posionHaveEmpty.DisplayOrder).Select(ss => ss.posionHaveEmpty.DisplayName).Distinct()), + ocCheckTypeName = s.FirstOrDefault().ocCheckTypeHaveEmpty != null ? s.FirstOrDefault().ocCheckTypeHaveEmpty.DisplayName : "", + }).ToList() + .GroupBy(g => new { g.ocCheckTypeName, g.posionNames }) + .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportOcCheckTypeSummaryDto + { + DisplayOrder = index + 1, + OcCheckTypeName = s.Key.ocCheckTypeName, + CheckCount = s.Count(), + PoisonNames = s.Key.posionNames + }).ToList(); + + msg.OcCheckTypeDetails = ocCheckTypeDetails; + + #endregion + + #region 体检结果总结 + var occupationalAbnormalDetails = patientRegisterList.Where(m => m.occupationalAbnormalHaveEmpty != null).ToList() + .GroupBy(g => new { g.patientRegister, g.occupationalAbnormalHaveEmpty }) + .Select(s => new { occupationalAbnormalName = s.Key.occupationalAbnormalHaveEmpty.DisplayName }).ToList() + .GroupBy(g => g.occupationalAbnormalName) + .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto + { + DisplayOrder = index + 1, + OccupationalAbnormalCount = s.Count(), + OccupationalAbnormalName = s.Key, + OccupationalAbnormalRatio = Decimal.Round(Convert.ToDecimal(s.Count() * 100) / patientRegisters.Count, 2) + }).ToList(); + + + string occupationalAbnormalDesc = ""; + + foreach (var item in occupationalAbnormalDetails) + { + if (occupationalAbnormalDetails.IndexOf(item) == occupationalAbnormalDetails.Count - 1) + occupationalAbnormalDesc += $"{item.OccupationalAbnormalName}{item.OccupationalAbnormalCount}人。"; + else + occupationalAbnormalDesc += $"{item.OccupationalAbnormalName}{item.OccupationalAbnormalCount}人,"; + } + + msg.MedicalResultDesc = $"{Convert.ToDateTime(customerOrgPara.StartDate).ToString("yyyy-MM-dd")},{msg.CustomerOrgName}组织{patientRegisters.Count}名接触" + + $"{1}作业工人进行职业健康检查,结果:{occupationalAbnormalDesc}"; + msg.OccupationalAbnormalDetails = occupationalAbnormalDetails; + + #endregion + + #region 体检结果一览表 + var medicalResultDetails = patientRegisterList.GroupBy(g => g.patientOccupationalDisease) + .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportMedicalResultDetailDto + { + AnomalyIndex = !string.IsNullOrWhiteSpace(s.Key.OccupationalAbnormal) + ? $"{SetSumSummarys(s.Select(ss => ss.sumSummaryHeaderHaveEmpty).Distinct().ToList())}\n结论:{s.Key.OccupationalAbnormal}" + : $"{SetSumSummarys(s.Select(ss => ss.sumSummaryHeaderHaveEmpty).Distinct().ToList())}", + DisplayOrder = index + 1, + HandlingSuggestions = s.Key.OccupationalAbSuggestion, + JobType = s.Key.JobType, + PatientName = s.FirstOrDefault().patientRegister.PatientName, + PatientRegisterNo = s.FirstOrDefault().patientRegister.PatientRegisterNo, + PoisonNames = string.Join(",", s.Select(ss => ss.posionHaveEmpty.DisplayName).Distinct()), + PoisonWorkTime = s.Key.PoisonWorkTime + }).ToList(); + msg.MedicalResultDetails = medicalResultDetails; + #endregion + + #region 体检结果异常率明细 + var asbitemAbnormalQuery = (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 registerCheckSummary in await _registerCheckSummaryRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckSummary.RegisterCheckId + join patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() on patientRegister.Id equals patientOccupationalDisease.PatientRegisterId + where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId + && !registerCheckSummary.Summary.Contains("未见异常") + && patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration + select new + { + patientRegister, + asbitemName = asbitemHaveEmpty.DisplayName, + registerCheckCompleteFlag = registerCheck.CompleteFlag, + idNo = patient.IdNo + }); + + + + + if (!string.IsNullOrEmpty(customerOrgPara.StartDate) && !string.IsNullOrEmpty(customerOrgPara.EndDate)) + { + if (customerOrgPara.DateType == '1') + { + asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(customerOrgPara.StartDate) && + m.patientRegister.CreationTime < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1)); + } + else if (customerOrgPara.DateType == '2') + { + asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) && + m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1)); + } + else if (customerOrgPara.DateType == '3') + { + asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) && + m.patientRegister.SummaryDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1)); + } + } + + if (customerOrgPara.CustomerOrgGroupId.Any()) + { + asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.CustomerOrgGroupId != null && customerOrgPara.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value)); + } + var asbitemAbnormalList = asbitemAbnormalQuery.ToList(); + var asbitemAbnormalCount = asbitemAbnormalList.Select(s => s.asbitemName).Distinct().Count(); + + var medicalResultAbnormalRateDetails = asbitemAbnormalList.GroupBy(g => g.asbitemName) + .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportMedicalResultAbnormalRateDetailDto + { + AbnormalPatientNames = string.Join("、", s.Select(ss => ss.patientRegister.PatientName).Distinct()), + AsbitemName = s.Key, + DisplayOrder = index + 1, + AbnormalRate = Decimal.Round(Convert.ToDecimal(s.Count() * 100) / asbitemAbnormalCount, 2) + }).ToList(); + + msg.MedicalResultAbnormalRateDetails = medicalResultAbnormalRateDetails; + #endregion + #region 职业健康检查缺项情况表明细 + var listOfMissingItemsDetails = asbitemAbnormalList.Where(m => m.registerCheckCompleteFlag == RegisterCheckCompleteFlag.UnChecked) + .GroupBy(g => g.patientRegister) + .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportListOfMissingItemsDetailDto + { + DisplayOrder = index + 1, + IdNo = s.FirstOrDefault().idNo, + PatientName = s.Key.PatientName, + PatientRegisterNo = s.Key.PatientRegisterNo, + UnCheckAsbitemName = string.Join("、", s.Select(ss => ss.asbitemName)) + }).ToList(); + msg.ListOfMissingItemsDetails = listOfMissingItemsDetails; + #endregion + + #region 职业病专科复查人员一览表明细 + + //复查结论ID + Guid reviewId = (await _occupationalAbnormalRepository.FirstOrDefaultAsync(f => f.DisplayName.Contains("复查"))).Id; + + var patientRegisterAbnormalQuery = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() + join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id + join sumSummaryHeader in (await _sumSummaryHeaderRepository.GetQueryableAsync()).Include(x => x.SumSummaryContents) on patientRegister.Id equals sumSummaryHeader.PatientRegisterId into sumSummaryHeaderTemp + from sumSummaryHeaderHaveEmpty in sumSummaryHeaderTemp.DefaultIfEmpty() + //join sumSummaryContent in await _sumSummaryContentRepository.GetQueryableAsync() on sumSummaryHeaderHaveEmpty.Id equals sumSummaryContent.SumSummaryHeaderId into sumSummaryContentTemp + //from sumSummaryContentHaveEmpty in sumSummaryContentTemp.DefaultIfEmpty() + join patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() on patientRegister.Id equals patientOccupationalDisease.PatientRegisterId + join patientPoison in await _patientPoisonRepository.GetQueryableAsync() on patientRegister.Id equals patientPoison.PatientRegisterId into patientPoisonTemp + from patientPoisonHaveEmpty in patientPoisonTemp.DefaultIfEmpty() + join poison in await _poisonRepository.GetQueryableAsync() on patientPoisonHaveEmpty.PoisonId equals poison.Id into poisonTemp + from poisonHaveEmpty in poisonTemp.DefaultIfEmpty() + where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId + && patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration + select new + { + patientRegister, + poisonName = poisonHaveEmpty.DisplayName, + occupationalAbnormalId = patientPoisonHaveEmpty.OccupationalAbnormalId, + patientOccupationalDisease, + sumSummaryHeaderHaveEmpty, + //sumSummaryContentHaveEmpty, + idNo = patient.IdNo + }); + + + if (!string.IsNullOrEmpty(customerOrgPara.StartDate) && !string.IsNullOrEmpty(customerOrgPara.EndDate)) + { + if (customerOrgPara.DateType == '1') + { + patientRegisterAbnormalQuery = patientRegisterAbnormalQuery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(customerOrgPara.StartDate) && + m.patientRegister.CreationTime < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1)); + } + else if (customerOrgPara.DateType == '2') + { + patientRegisterAbnormalQuery = patientRegisterAbnormalQuery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) && + m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1)); + } + else if (customerOrgPara.DateType == '3') + { + patientRegisterAbnormalQuery = patientRegisterAbnormalQuery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) && + m.patientRegister.SummaryDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1)); + } + } + + + if (customerOrgPara.CustomerOrgGroupId.Any()) + { + patientRegisterAbnormalQuery = patientRegisterAbnormalQuery.Where(m => m.patientRegister.CustomerOrgGroupId != null && customerOrgPara.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value)); + } + + var patientRegisterAbnormalList = patientRegisterAbnormalQuery.ToList(); + + var reviewPersonnelDetails = patientRegisterAbnormalList.Where(m => m.occupationalAbnormalId == reviewId).GroupBy(g => g.patientRegister) + .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportReviewPersonnelDetailDto + { + IdNo = s.FirstOrDefault().idNo, + DisplayOrder = index + 1, + PatientName = s.Key.PatientName, + PatientRegisterNo = s.Key.PatientRegisterNo, + PoisonName = string.Join(",", s.Select(ss => ss.poisonName).Distinct()), + CheckResult = SetSumSummarys(s.Select(ss => ss.sumSummaryHeaderHaveEmpty).Distinct().ToList()), + HandlingSuggestions = $"{s.FirstOrDefault().patientOccupationalDisease.OccupationalAbnormal}\n{s.FirstOrDefault().patientOccupationalDisease.OccupationalAbSuggestion}" + }).ToList(); + + msg.ReviewPersonnelDetails = reviewPersonnelDetails; + + #endregion + + #region 职业禁忌证人员一览表 + + //职业禁忌证结论ID + Guid contraindicationId = (await _occupationalAbnormalRepository.FirstOrDefaultAsync(f => f.DisplayName.Contains("禁忌"))).Id; + + var occupationalContraindicationDetails = patientRegisterAbnormalList.Where(m => m.occupationalAbnormalId == contraindicationId).GroupBy(g => g.patientRegister) + .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportOccupationalContraindicationDetailDto + { + IdNo = s.FirstOrDefault().idNo, + DisplayOrder = index + 1, + PatientName = s.Key.PatientName, + PatientRegisterNo = s.Key.PatientRegisterNo, + PoisonName = string.Join(",", s.Select(ss => ss.poisonName).Distinct()), + CheckResult = SetSumSummarys(s.Select(ss => ss.sumSummaryHeaderHaveEmpty).Distinct().ToList()), + HandlingSuggestions = $"{s.FirstOrDefault().patientOccupationalDisease.OccupationalAbnormal}\n{s.FirstOrDefault().patientOccupationalDisease.OccupationalAbSuggestion}" + }).ToList(); + + msg.OccupationalContraindicationDetails = occupationalContraindicationDetails; + #endregion + + #region 疑似职业病人员一览表 + + //疑似职业病结论ID + Guid suspectedOccupationalDiseaseId = (await _occupationalAbnormalRepository.FirstOrDefaultAsync(f => f.DisplayName.Contains("疑似"))).Id; + + var suspectedOccupationalDiseaseDetails = patientRegisterAbnormalList.Where(m => m.occupationalAbnormalId == suspectedOccupationalDiseaseId).GroupBy(g => g.patientRegister) + .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportSuspectedOccupationalDiseaseDetailDto + { + IdNo = s.FirstOrDefault().idNo, + DisplayOrder = index + 1, + PatientName = s.Key.PatientName, + PatientRegisterNo = s.Key.PatientRegisterNo, + PoisonName = string.Join(",", s.Select(ss => ss.poisonName).Distinct()), + CheckResult = SetSumSummarys(s.Select(ss => ss.sumSummaryHeaderHaveEmpty).Distinct().ToList()), + HandlingSuggestions = $"{s.FirstOrDefault().patientOccupationalDisease.OccupationalAbnormal}\n{s.FirstOrDefault().patientOccupationalDisease.OccupationalAbSuggestion}" + }).ToList(); + + msg.SuspectedOccupationalDiseaseDetails = suspectedOccupationalDiseaseDetails; + #endregion } @@ -398,5 +662,37 @@ namespace Shentun.Peis.OccupationalDiseaseReports } + + + /// + /// 生成历次综述医生小结 + /// + /// + /// + private string SetSumSummarys(List SumSummaryHeaders) + { + StringBuilder msg = new StringBuilder(); + if (SumSummaryHeaders.Count > 0) + { + foreach (var item in SumSummaryHeaders) + { + if (item != null) + { + msg.Append($"【{item.SummaryTitle}】\n"); + if (item.SumSummaryContents.Count > 0) + { + var SumSummaryContents = item.SumSummaryContents.ToList(); + foreach (var item2 in SumSummaryContents) + { + msg.Append($"{item2.SummaryContent}\n"); + } + } + } + } + } + return msg.ToString(); + } + + } } diff --git a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs index b03e9bf..4317bf2 100644 --- a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs +++ b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs @@ -128,6 +128,8 @@ namespace Shentun.Peis.PatientRegisters private readonly IRepository _patientOccupationalDiseaseRepository; private readonly IRepository _patientPoisonRepository; private readonly PatientPoisonManager _patientPoisonManager; + private readonly IRepository _diagnosisRepository; + public PatientRegisterAppService( IRepository repository, IRepository patientRepository, @@ -186,7 +188,8 @@ namespace Shentun.Peis.PatientRegisters IRepository ocCheckTypeDetailRepository, IRepository patientOccupationalDiseaseRepository, IRepository patientPoisonRepository, - PatientPoisonManager patientPoisonManager) + PatientPoisonManager patientPoisonManager, + IRepository diagnosisRepository) : base(repository) { this._repository = repository; @@ -247,6 +250,7 @@ namespace Shentun.Peis.PatientRegisters _patientOccupationalDiseaseRepository = patientOccupationalDiseaseRepository; _patientPoisonRepository = patientPoisonRepository; _patientPoisonManager = patientPoisonManager; + _diagnosisRepository = diagnosisRepository; } /// /// 获取通过主键 @@ -457,7 +461,7 @@ namespace Shentun.Peis.PatientRegisters var customerOrgList = await _customerOrgRepository.GetListAsync(); Stopwatch stopwatch = Stopwatch.StartNew(); - + #region MyRegion var entlist = from patientRegister in (await _repository.GetQueryableAsync()).Include(x => x.Patient).AsQueryable() join patientRegisterExter in await _patientRegisterExterRepository.GetQueryableAsync() @@ -2330,9 +2334,24 @@ namespace Shentun.Peis.PatientRegisters #region 插入SumDiagnosis if (item.DiagnosisIds != null && item.DiagnosisIds.Any()) { + + foreach (var diagnosisId in item.DiagnosisIds) { + #region 校验诊断性别 + var diagnosisEnt = await _diagnosisRepository.FirstOrDefaultAsync(f => f.Id == diagnosisId); + if (diagnosisEnt == null) + throw new UserFriendlyException("诊断不存在"); + if (diagnosisEnt.ForSexId != ForSexFlag.All + && entity.SexId != SexFlag.UnKnown + && diagnosisEnt.ForSexId != entity.SexId) + { + throw new UserFriendlyException($"诊断:{diagnosisEnt.DisplayName}与性别不符"); + } + + #endregion + SumDiagnosis sumDiagnosis = new SumDiagnosis { DiagnosisId = diagnosisId,