This commit is contained in:
he
2024-04-12 14:47:16 +08:00
parent 146fc916d1
commit b3178e6f8d
9 changed files with 147 additions and 36 deletions
@@ -16,6 +16,7 @@ using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infrastructure.Extention;
using IRaCIS.Core.Application.Service.Reading.Interface;
using IRaCIS.Core.Application.Contracts;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
namespace IRaCIS.Core.Application.Service
{
@@ -41,6 +42,7 @@ namespace IRaCIS.Core.Application.Service
private readonly IRepository<Subject> _subjectRepository;
private readonly IRepository<ReadModuleCriterionFrom> _readModuleCriterionFromRepository;
private readonly IRepository<ReadModule> _readModuleRepository;
private readonly IRepository<DicomStudy> _dicomStudyRepository;
private readonly IRepository<ClinicalQuestionAnswer> _clinicalQuestionAnswerRepository;
private readonly IRepository<ClinicalTableAnswer> _clinicalTableAnswerRepository;
@@ -64,6 +66,7 @@ namespace IRaCIS.Core.Application.Service
IReadingClinicalDataService iReadingClinicalDataService,
IRepository<ReadModuleCriterionFrom> readModuleCriterionFromRepository,
IRepository<ReadModule> readModuleRepository,
IRepository<DicomStudy> dicomStudyRepository,
IRepository<SubjectVisit> subjectVisitRepository,
IRepository<ClinicalTableAnswer> clinicalTableAnswerRepository,
IRepository<ClinicalQuestionAnswer> clinicalQuestionAnswerRepository,
@@ -87,6 +90,7 @@ namespace IRaCIS.Core.Application.Service
this._subjectRepository = subjectRepository;
this._readModuleCriterionFromRepository = readModuleCriterionFromRepository;
this._readModuleRepository = readModuleRepository;
this._dicomStudyRepository = dicomStudyRepository;
_clinicalTableAnswerRepository = clinicalTableAnswerRepository;
_iClinicalQuestionService = iClinicalQuestionService;
}
@@ -111,11 +115,56 @@ namespace IRaCIS.Core.Application.Service
}
/// <summary>
/// 自动添加CRC临床数据
/// 删除检查级别临床数据
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task AutoAddCRCClinical(AutoAddClinicalInDto inDto)
public async Task DeleteStudyClinical(DeleteStudyClinicalInDto inDto)
{
await _readingClinicalDataRepository.BatchDeleteNoTrackingAsync(x => x.StudyId == inDto.StudyId);
}
/// <summary>
/// 添加检查级别临床数据
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task AddStudyClinical(AddStudyClinicalInDto inDto)
{
var studyInfo = await _dicomStudyRepository.Where(x => x.Id == inDto.StudyId).FirstNotNullAsync();
List<ClinicalDataTrialSet> clinicals = await _clinicalDataTrialSetRepository.Where(x =>
x.TrialId == studyInfo.TrialId && x.IsConfirm&&x.ClinicalDataLevel== ClinicalLevel.Study).ToListAsync();
List<ReadingClinicalData> datas = new List<ReadingClinicalData>();
clinicals.ForEach(x =>
{
datas.Add(new ReadingClinicalData()
{
ClinicalDataTrialSetId = x.Id,
IsVisit = true,
SubjectId = studyInfo.SubjectId,
ReadingId = studyInfo.SubjectVisitId,
TrialId = studyInfo.TrialId,
StudyId = studyInfo.Id
});
});
await _readingClinicalDataRepository.AddRangeAsync(datas);
await _readingClinicalDataRepository.SaveChangesAsync();
}
/// <summary>
/// 自动添加CRC临床数据 (不包括检查级别)
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task AutoAddCRCClinical(AutoAddClinicalInDto inDto)
{
var dataTrialSetList = await _clinicalDataTrialSetRepository.Where(x =>x.TrialId == inDto.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm)
.IgnoreAutoIncludes().ToListAsync();
@@ -194,16 +243,16 @@ namespace IRaCIS.Core.Application.Service
TrialId = inDto.TrialId
}).ToList());
readingClinicalDatas.AddRange(
dataTrialSetList.Where(x => x.ClinicalDataLevel == ClinicalLevel.Study).Where(x => clinicalDataList.Where(y => y.ClinicalDataTrialSetId == x.Id && y.ReadingId == n.VisitId).Count() == 0)
.Select(x => new ReadingClinicalData()
{
ClinicalDataTrialSetId = x.Id,
IsVisit = true,
SubjectId = n.SubjectId,
ReadingId = n.VisitId,
TrialId = inDto.TrialId
}).ToList());
//readingClinicalDatas.AddRange(
// dataTrialSetList.Where(x => x.ClinicalDataLevel == ClinicalLevel.Study).Where(x => clinicalDataList.Where(y => y.ClinicalDataTrialSetId == x.Id && y.ReadingId == n.VisitId).Count() == 0)
// .Select(x => new ReadingClinicalData()
// {
// ClinicalDataTrialSetId = x.Id,
// IsVisit = true,
// SubjectId = n.SubjectId,
// ReadingId = n.VisitId,
// TrialId = inDto.TrialId
// }).ToList());
});