diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 54c3a82c4..61082c802 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -38,6 +38,7 @@ namespace IRaCIS.Application.Services private readonly IRepository _subjectRepository; private readonly IRepository _readModuleRepository; private readonly IRepository _readingClinicalDataPDFRepository; + private readonly IRepository _readingConsistentClinicalDataPDFRepository; public ReadingClinicalDataService(IRepository readingClinicalDataRepository, IRepository readingConsistentClinicalDataRepository, @@ -56,6 +57,7 @@ namespace IRaCIS.Application.Services IRepository readModuleRepository, IRepository readingClinicalDataPDFRepository, + IRepository readingConsistentClinicalDataPDFRepository, IRepository visitTaskRepository) { this._readingClinicalDataRepository = readingClinicalDataRepository; @@ -73,6 +75,7 @@ namespace IRaCIS.Application.Services this._subjectRepository = subjectRepository; this._readModuleRepository = readModuleRepository; this._readingClinicalDataPDFRepository = readingClinicalDataPDFRepository; + this._readingConsistentClinicalDataPDFRepository = readingConsistentClinicalDataPDFRepository; this._visitTaskRepository = visitTaskRepository; } @@ -91,9 +94,6 @@ namespace IRaCIS.Application.Services .WhereIf(indto.Id != null, x => x.Id != indto.Id) .Where(x => x.ClinicalDataTrialSetId == indto.ClinicalDataTrialSetId && x.ReadingId == indto.ReadingId && x.StudyId == indto.StudyId); - - - if (await existsQuery.AnyAsync()) { //---存在同类型的临床数据,操作失败 @@ -845,7 +845,7 @@ namespace IRaCIS.Application.Services { var visitTask = await _visitTaskRepository.FirstOrDefaultAsync(x => x.Id == inDto.VisitTaskId); inDto.ReadingId = visitTask.SouceReadModuleId ?? visitTask.SourceSubjectVisitId; - + inDto.TrialReadingCriterionId = visitTask.TrialReadingCriterionId; if (visitTask.IsAnalysisCreate && visitTask.IsSelfAnalysis == true) { @@ -890,43 +890,48 @@ namespace IRaCIS.Application.Services }).ToList(), }); - // 原来的非PDF - var otherQuesy = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId) - .WhereIf(inDto.ReadingClinicalDataId != null, x => x.Id == inDto.ReadingClinicalDataId) - .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId) - .WhereIf(inDto.SelectIsSign, x => x.IsSign == true) - .Where(x => x.ReadingId == inDto.ReadingId) - .WhereIf(inDto.TrialReadingCriterionId != null, x => x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId)) - .Where(x => x.ClinicalDataTrialSet.ClinicalUploadType != ClinicalUploadType.PDF) - .Select(x => new GetReadingClinicalDataListOutDto() + // 是否获取所有一致性分析的数据 + if(!inDto.IsGetAllConsistencyAnalysis) { - ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, - SubjectId = x.SubjectId, - ReadingId = x.ReadingId, - ClinicalDataSetEnName = x.ClinicalDataTrialSet.ClinicalDataSetEnName, - ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us), - ClinicalDataTrialSetId = x.ClinicalDataTrialSetId, - IsSign = x.IsSign, - ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType, - CriterionEnumList = x.ClinicalDataTrialSet.CriterionEnumList, - TrialClinicalDataSetCriteriaList = x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList, - Id = x.Id, - UploadRole = x.ClinicalDataTrialSet.UploadRole, - IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC, - IsBlind = x.IsBlind, - IsComplete = x.IsComplete, - FileCount = x.FileCount, - ReadingClinicalDataState = x.ReadingClinicalDataState, - FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto() - { - Id = y.Id, - FileName = y.FileName, - Path = y.Path, - CreateTime = y.CreateTime, - }).ToList(), + // 原来的非PDF + var otherQuesy = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId) + .WhereIf(inDto.ReadingClinicalDataId != null, x => x.Id == inDto.ReadingClinicalDataId) + .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId) + .WhereIf(inDto.SelectIsSign, x => x.IsSign == true) + .Where(x => x.ReadingId == inDto.ReadingId) + .WhereIf(inDto.TrialReadingCriterionId != null, x => x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId)) + .Where(x => x.ClinicalDataTrialSet.ClinicalUploadType != ClinicalUploadType.PDF) + .Select(x => new GetReadingClinicalDataListOutDto() + { + ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel, + SubjectId = x.SubjectId, + ReadingId = x.ReadingId, + ClinicalDataSetEnName = x.ClinicalDataTrialSet.ClinicalDataSetEnName, + ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us), + ClinicalDataTrialSetId = x.ClinicalDataTrialSetId, + IsSign = x.IsSign, + ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType, + CriterionEnumList = x.ClinicalDataTrialSet.CriterionEnumList, + TrialClinicalDataSetCriteriaList = x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList, + Id = x.Id, + UploadRole = x.ClinicalDataTrialSet.UploadRole, + IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC, + IsBlind = x.IsBlind, + IsComplete = x.IsComplete, + FileCount = x.FileCount, + ReadingClinicalDataState = x.ReadingClinicalDataState, + FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto() + { + Id = y.Id, + FileName = y.FileName, + Path = y.Path, + CreateTime = y.CreateTime, + }).ToList(), }); - resultQuery = resultQuery.Union(otherQuesy); + resultQuery = resultQuery.Union(otherQuesy); + } + } else { @@ -1112,52 +1117,109 @@ namespace IRaCIS.Application.Services #endregion - #region 一致性分析 + #region 一致性分析临床数据 /// - /// 获取阅片临床数据列表 + /// 获取阅片临床数据列表 (在任务列表) /// /// /// [HttpPost] - public async Task<(List, object)> GetConsistencyAnalysisReadingClinicalDataList(GetReadingClinicalDataListIndto inDto) + public async Task> GetConsistencyAnalysisReadingClinicalDataList(GetConsistencyAnalysisReadingClinicalDataListInDto inDto) { - - - - - var isBaseLine = await _subjectVisitRepository.AnyAsync(x => x.Id == inDto.ReadingId && x.IsBaseLine); - - var result = await this.GetClinicalDataList(new GetReadingOrTaskClinicalDataListInDto() { - ClinicalDataTrialSetId = inDto.ClinicalDataTrialSetId, - GetClinicalType = inDto.GetClinicalType, SubjectId = inDto.SubjectId, TrialId = inDto.TrialId, SelectIsSign = false, - ReadingId = inDto.ReadingId, - TrialReadingCriterionId = inDto.TrialReadingCriterionId, + IsGetAllConsistencyAnalysis = false, }); - var readingIds = result.Select(x => x.ReadingId).ToList(); + + return result; + } - var previousHistoryList = await _previousHistoryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - var previousOtherList = await _previousOtherRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - var previousSurgeryList = await _previousSurgeryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - foreach (var item in result) + + + /// + /// 新增或修改一致性分析临床数据 + /// + /// + /// + [HttpPost] + public async Task AddOrUpdateConsistencyAnalysisReadingClinicalData(AddOrUpdateReadingClinicalDataDto indto) + { + var existsQuery = _readingClinicalDataRepository + .WhereIf(indto.Id != null, x => x.Id != indto.Id) + .Where(x => x.ClinicalDataTrialSetId == indto.ClinicalDataTrialSetId && x.ReadingId == indto.ReadingId && x.StudyId == indto.StudyId); + + if (await existsQuery.AnyAsync()) { - item.ClinicalTableData = new ClinicalDataTable() + //---存在同类型的临床数据,操作失败 + return ResponseOutput.NotOk(_localizer["ReadingClinicalData_DupTypeFail"]); + } + var clinicalDataTrialSet = (await _clinicalDataTrialSetRepository.Where(x => x.Id == indto.ClinicalDataTrialSetId).FirstOrDefaultAsync()).IfNullThrowException(); + + //subject 或者访视级别的 都是在访视传 + indto.IsVisit = clinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || clinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit; + + if (indto.Id == null) + { + var entity = _mapper.Map(indto); + entity.ReadingClinicalDataPDFList = indto.AddFileList.Select(x => new ReadingClinicalDataPDF() { - PreviousHistoryList = previousHistoryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(), - PreviousOtherList = previousOtherList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(), - PreviousSurgeryList = previousSurgeryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(), - }; + FileName = x.FileName, + Path = x.Path, + Size = x.Size, + Type = x.Type, + }).ToList(); + + entity.ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded; + entity.IsBlind = null; + entity.IsComplete = null; + entity.FileCount = entity.ReadingClinicalDataPDFList.Count; + await _readingClinicalDataRepository.AddAsync(entity, true); + var success = await _readingClinicalDataRepository.SaveChangesAsync(); + return ResponseOutput.Ok(entity.Id); + } + else + { + var entity = (await _readingClinicalDataRepository.Where(t => t.Id == indto.Id, true).FirstOrDefaultAsync()).IfNullThrowException(); + await _readingClinicalDataPDFRepository.BatchDeleteNoTrackingAsync(x => indto.DeleteFileIds.Contains(x.Id)); + + var addFileList = indto.AddFileList.Select(x => new ReadingClinicalDataPDF() + { + + FileName = x.FileName, + Path = x.Path, + Size = x.Size, + Type = x.Type, + ReadingClinicalDataId = entity.Id, + }).ToList(); + + + + _mapper.Map(indto, entity); + + //上传 或者删除了文件 核查状态需要重新确认 + + if (indto.AddFileList.Count > 0 || indto.AddFileList.Count > 0) + { + entity.IsComplete = null; + entity.IsBlind = null; + } + + await _readingClinicalDataPDFRepository.AddRangeAsync(addFileList); + + await _readingClinicalDataPDFRepository.SaveChangesAsync(); + + var fileCount = await _readingClinicalDataPDFRepository.Where(t => t.ReadingClinicalDataId == indto.Id).CountAsync(); + entity.ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded; + entity.IsSign = false; + entity.FileCount = fileCount; + var success = await _readingClinicalDataRepository.SaveChangesAsync(); + return ResponseOutput.Ok(entity.Id); } - return (result, new - { - IsCanAddClinicalData = false, - }); } #endregion diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index 59e9b85d1..8bbf13388 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -234,12 +234,28 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public bool SelectIsSign { get; set; } = true; + /// + /// 是否查询所有的一致性分析临床数据 (为否只查询PDF) + /// + public bool IsGetAllConsistencyAnalysis { get; set; } = true; + } - /// - /// 获取访视列表 - /// - public class GetReadingClinicalDataListIndto + public class GetConsistencyAnalysisReadingClinicalDataListInDto + { + [NotDefault] + public Guid SubjectId { get; set; } + [NotDefault] + public Guid VisitTaskId { get; set; } + + [NotDefault] + public Guid TrialId { get; set; } + } + + /// + /// 获取访视列表 + /// + public class GetReadingClinicalDataListIndto { [NotDefault] public Guid SubjectId { get; set; }