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.

311 lines
15 KiB

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
{
/// <summary>
/// 总检诊台建议
/// </summary>
[ApiExplorerSettings(GroupName = "Work")]
[Authorize]
public class SumSuggestionHeaderAppService : ApplicationService
{
private readonly IRepository<SumSuggestionHeader, Guid> _sumSuggestionHeaderRepository;
private readonly IRepository<SumSuggestionContent, Guid> _sumSuggestionContentRepository;
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
private readonly IRepository<SumDiagnosis> _sumDiagnosisRepository;
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
private readonly IRepository<Diagnosis, Guid> _diagnosisRepository;
private readonly SumSummaryHeaderManager _sumSummaryHeaderManager;
private readonly SysParmValueManager _sysParmValueManager;
public SumSuggestionHeaderAppService(
IRepository<SumSuggestionHeader, Guid> sumSuggestionHeaderRepository,
IRepository<SumSuggestionContent, Guid> sumSuggestionContentRepository,
IRepository<RegisterCheck, Guid> registerCheckRepository,
IRepository<SumDiagnosis> sumDiagnosisRepository,
IRepository<PatientRegister, Guid> patientRegisterRepository,
IRepository<Diagnosis, Guid> 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;
}
/// <summary>
/// 获取人员总检诊台建议 (如还未录入,获取医生诊台录入的建议)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/sumsuggestionheader/GetSumSuggestionList")]
public async Task<List<SumSuggestionDto>> GetSumSuggestionListAsync(PatientRegisterSumInputDto input)
{
if (input is null)
{
throw new UserFriendlyException("input参数不能为空");
}
List<SumSuggestionDto> msg = new List<SumSuggestionDto>();
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<string>();
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<Guid>() { matchDiagnosis.Id },
DiagnosisNames = new List<string>() { 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;
}
/// <summary>
/// 批量插入总诊台建议
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/sumsuggestionheader/createsumsuggestion")]
public async Task CreateSumSuggestionAsync(List<CreateSumSuggestionHeaderOrContentDto> 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<SumSuggestionContent> sumSuggestionContentList = new List<SumSuggestionContent>();
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
}
}
}
/// <summary>
/// 清空总诊台建议内容
/// </summary>
/// <param name="PatientRegisterId"></param>
/// <returns></returns>
[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("请求参数有误");
}
}
}
}