using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Shentun.Peis.Enums; using Shentun.Peis.Models; using Shentun.Peis.PatientRegisters; using Shentun.Peis.SumSuggestionContents; using Shentun.Peis.SumSummaryContents; using Shentun.Peis.SumSummaryHeaders; 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; namespace Shentun.Peis.SumSuggestionHeaders { /// /// 总检诊台建议 /// [ApiExplorerSettings(GroupName = "Work")] [Authorize] public class SumSuggestionHeaderAppService : ApplicationService { private readonly IRepository _sumSuggestionHeaderRepository; private readonly IRepository _sumSuggestionContentRepository; private readonly IRepository _registerCheckRepository; private readonly IRepository _sumDiagnosisRepository; private readonly IRepository _patientRegisterRepository; private readonly IRepository _diagnosisRepository; private readonly SumSummaryHeaderManager _sumSummaryHeaderManager; private readonly SysParmValueManager _sysParmValueManager; public SumSuggestionHeaderAppService( IRepository sumSuggestionHeaderRepository, IRepository sumSuggestionContentRepository, IRepository registerCheckRepository, IRepository sumDiagnosisRepository, IRepository patientRegisterRepository, IRepository diagnosisRepository, SumSummaryHeaderManager sumSummaryHeaderManager, SysParmValueManager sysParmValueManager ) { this._sumSuggestionHeaderRepository = sumSuggestionHeaderRepository; this._sumSuggestionContentRepository = sumSuggestionContentRepository; this._registerCheckRepository = registerCheckRepository; this._sumDiagnosisRepository = sumDiagnosisRepository; _patientRegisterRepository = patientRegisterRepository; _sumSummaryHeaderManager = sumSummaryHeaderManager; _diagnosisRepository = diagnosisRepository; _sysParmValueManager = sysParmValueManager; } /// /// 获取人员总检诊台建议 (如还未录入,获取医生诊台录入的建议) /// /// /// [HttpPost("api/app/sumsuggestionheader/GetSumSuggestionList")] public async Task> GetSumSuggestionListAsync(PatientRegisterSumInputDto input) { if (input is null) { throw new UserFriendlyException("input参数不能为空"); } List msg = new List(); var patientRegister = await _patientRegisterRepository.GetAsync(input.PatientRegisterId); var query = from sumSuggestionHeader in await _sumSuggestionHeaderRepository.GetQueryableAsync() join sumDiagnosis in await _sumDiagnosisRepository.GetQueryableAsync() on new { sumSuggestionHeader.PatientRegisterId, sumSuggestionHeader.Id } equals new { sumDiagnosis.PatientRegisterId, Id = sumDiagnosis.SumSuggestionHeaderId } into bb from sumDiagnosisHaveEmpty in bb.DefaultIfEmpty() join diagnosis in await _diagnosisRepository.GetQueryableAsync() on sumDiagnosisHaveEmpty.DiagnosisId equals diagnosis.Id into diagnosisTemp from diagnosisHaveEmpty in diagnosisTemp.DefaultIfEmpty() join sumSuggestionContent in await _sumSuggestionContentRepository.GetQueryableAsync() on sumSuggestionHeader.Id equals sumSuggestionContent.SumSuggestionHeaderId into cc from sumSuggestionContentHaveEmpty in cc.DefaultIfEmpty() where (sumSuggestionHeader.PatientRegisterId == input.PatientRegisterId) orderby sumSuggestionHeader.DisplayOrder ascending, sumSuggestionContentHaveEmpty.DisplayOrder ascending select new { sumSuggestionHeader, sumDiagnosisHaveEmpty, diagnosisHaveEmpty, sumSuggestionContentHaveEmpty }; if (patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck || input.IsGetExistData == "Y") { msg = query.GroupBy(g => g.sumSuggestionHeader.Id).Select(s => new SumSuggestionDto { SuggestionTitle = s.FirstOrDefault().sumSuggestionHeader.SuggestionTitle, SuggestionFlag = s.FirstOrDefault().sumSuggestionHeader.SuggestionFlag, DisplayOrder = s.FirstOrDefault().sumSuggestionHeader.DisplayOrder, DiagnosisIds = s.Where(o => o.sumDiagnosisHaveEmpty != null). Select(x => x.sumDiagnosisHaveEmpty.DiagnosisId).Distinct().ToList(), DiagnosisNames = s.Where(m => m.diagnosisHaveEmpty != null).Select(x => x.diagnosisHaveEmpty.DisplayName).Distinct().ToList(), MedicalInterpretations = s.Where(m => m.sumSuggestionContentHaveEmpty != null && m.sumSuggestionContentHaveEmpty.SuggestionType == SuggestionTypeFlag.MedicalInterpretation). Select(sa => new SumSuggestionContentData { DisplayOrder = sa.sumSuggestionContentHaveEmpty.DisplayOrder, SuggestionContent = sa.sumSuggestionContentHaveEmpty.SuggestionContent, }).OrderBy(o => o.DisplayOrder).Distinct().ToList(), CommonReasons = s.Where(m => m.sumSuggestionContentHaveEmpty != null && m.sumSuggestionContentHaveEmpty.SuggestionType == SuggestionTypeFlag.CommonReasons). Select(sa => new SumSuggestionContentData { DisplayOrder = sa.sumSuggestionContentHaveEmpty.DisplayOrder, SuggestionContent = sa.sumSuggestionContentHaveEmpty.SuggestionContent, }).OrderBy(o => o.DisplayOrder).Distinct().ToList(), HealthGuidances = s.Where(m => m.sumSuggestionContentHaveEmpty != null && m.sumSuggestionContentHaveEmpty.SuggestionType == SuggestionTypeFlag.HealthGuidance). Select(sa => new SumSuggestionContentData { DisplayOrder = sa.sumSuggestionContentHaveEmpty.DisplayOrder, SuggestionContent = sa.sumSuggestionContentHaveEmpty.SuggestionContent, }).OrderBy(o => o.DisplayOrder).Distinct().ToList(), }).OrderBy(o => o.DisplayOrder).ToList(); } else { //没有值的情况 var checklist = await _sumSummaryHeaderManager.GetSumSummarysByDoctorCheck(input.PatientRegisterId); //获取所有综述 var registerCheckSummaries = new List(); foreach (var registerCheck in checklist) { foreach (var registerCheckSummary in registerCheck.RegisterCheckSummaries) { registerCheckSummaries.Add(registerCheckSummary.Summary); } } //根据综述生成建议 var diagnosis = (await _diagnosisRepository.GetQueryableAsync()).Include(o => o.Suggestions).ToList(); foreach (var registerCheckSummary in registerCheckSummaries) { var matchDiagnosisList = diagnosis.Where(o => registerCheckSummary.Contains(o.DisplayName)).ToList(); var matchDiagnosis = matchDiagnosisList.OrderByDescending(o => o.DisplayName.Length).FirstOrDefault(); if (matchDiagnosis != null) { if (msg.Where(o => o.SuggestionTitle == matchDiagnosis.DisplayName).Count() > 0) { continue; } var sumSuggestionDto = new SumSuggestionDto() { SuggestionTitle = matchDiagnosis.DisplayName, SuggestionFlag = null, DisplayOrder = 0, DiagnosisIds = new List() { matchDiagnosis.Id }, DiagnosisNames = new List() { matchDiagnosis.DisplayName }, MedicalInterpretations = matchDiagnosis.Suggestions. Where(o => o.SuggestionType == SuggestionTypeFlag.MedicalInterpretation) .OrderBy(o => o.DisplayOrder) .Select(x => new SumSuggestionContentData() { SuggestionContent = x.SuggestionContent, DisplayOrder = x.DisplayOrder, } ).ToList(), CommonReasons = matchDiagnosis.Suggestions. Where(o => o.SuggestionType == SuggestionTypeFlag.CommonReasons) .OrderBy(o => o.DisplayOrder) .Select(x => new SumSuggestionContentData() { SuggestionContent = x.SuggestionContent, DisplayOrder = x.DisplayOrder, } ).ToList(), HealthGuidances = matchDiagnosis.Suggestions. Where(o => o.SuggestionType == SuggestionTypeFlag.HealthGuidance) .OrderBy(o => o.DisplayOrder) .Select(x => new SumSuggestionContentData() { SuggestionContent = x.SuggestionContent, DisplayOrder = x.DisplayOrder, } ).ToList() }; msg.Add(sumSuggestionDto); } } var summaryCheckDefaultSuggestionHeader = await _sysParmValueManager. GetSysParmValueAsync(patientRegister.MedicalCenterId, "summary_check_default_suggestion_header"); if (!msg.Any()) { msg.Add(new SumSuggestionDto() { SuggestionTitle = summaryCheckDefaultSuggestionHeader, SuggestionFlag = null, DisplayOrder = 0, DiagnosisIds = null, DiagnosisNames = null }); } } return msg; } /// /// 批量插入总诊台建议 /// /// /// [HttpPost("api/app/sumsuggestionheader/createsumsuggestion")] public async Task CreateSumSuggestionAsync(List input) { throw new UserFriendlyException("禁止使用"); if (input.Any()) { //先删除总诊头跟内容 await _sumSuggestionHeaderRepository.DeleteAsync(m => m.PatientRegisterId == input.FirstOrDefault().PatientRegisterId, true); //删除对应的诊断数据 await _sumDiagnosisRepository.DeleteAsync(m => m.PatientRegisterId == input.FirstOrDefault().PatientRegisterId, true); foreach (var item in input) { #region 插入SumSuggestionHeader SumSuggestionHeader sumSuggestionHeaderEnt = new SumSuggestionHeader { DisplayOrder = input.IndexOf(item) + 1, PatientRegisterId = item.PatientRegisterId, SuggestionFlag = null, SuggestionTitle = item.SuggestionTitle }; var sumSuggestionHeaderEnt_New = await _sumSuggestionHeaderRepository.InsertAsync(sumSuggestionHeaderEnt, true); if (sumSuggestionHeaderEnt_New != null) { #region 插入SumDiagnosis if (item.DiagnosisId != null && item.DiagnosisId != Guid.Empty) { SumDiagnosis sumDiagnosis = new SumDiagnosis { DiagnosisId = item.DiagnosisId.Value, DisplayOrder = input.IndexOf(item) + 1, PatientRegisterId = item.PatientRegisterId, SumSuggestionHeaderId = sumSuggestionHeaderEnt_New.Id }; await _sumDiagnosisRepository.InsertAsync(sumDiagnosis); } #endregion #region 插入SumSuggestionContent List sumSuggestionContentList = new List(); foreach (var item2 in item.Details) { SumSuggestionContent sumSuggestionContentEnt = new SumSuggestionContent { DisplayOrder = item.Details.IndexOf(item2) + 1, SuggestionContent = item2.SuggestionContent, SumSuggestionHeaderId = sumSuggestionHeaderEnt_New.Id }; sumSuggestionContentList.Add(sumSuggestionContentEnt); } await _sumSuggestionContentRepository.InsertManyAsync(sumSuggestionContentList); #endregion } #endregion } } } /// /// 清空总诊台建议内容 /// /// /// [HttpPost("api/app/sumsuggestionheader/deletesumsuggestionmany")] public async Task DeleteSumSuggestionManyAsync(Guid PatientRegisterId) { if (PatientRegisterId != Guid.Empty) { await _sumSuggestionHeaderRepository.DeleteAsync(d => d.PatientRegisterId == PatientRegisterId); //删除对应的诊断数据 await _sumDiagnosisRepository.DeleteAsync(m => m.PatientRegisterId == PatientRegisterId); } else { throw new UserFriendlyException("请求参数有误"); } } } }