|
|
|
@ -38,6 +38,7 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
private readonly IRepository<Subject> _subjectRepository;
|
|
|
|
|
private readonly IRepository<ReadModule> _readModuleRepository;
|
|
|
|
|
private readonly IRepository<ReadingClinicalDataPDF> _readingClinicalDataPDFRepository;
|
|
|
|
|
private readonly IRepository<ReadingConsistentClinicalDataPDF> _readingConsistentClinicalDataPDFRepository;
|
|
|
|
|
|
|
|
|
|
public ReadingClinicalDataService(IRepository<ReadingClinicalData> readingClinicalDataRepository,
|
|
|
|
|
IRepository<ReadingConsistentClinicalData> readingConsistentClinicalDataRepository,
|
|
|
|
@ -56,6 +57,7 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
|
|
|
|
|
IRepository<ReadModule> readModuleRepository,
|
|
|
|
|
IRepository<ReadingClinicalDataPDF> readingClinicalDataPDFRepository,
|
|
|
|
|
IRepository<ReadingConsistentClinicalDataPDF> readingConsistentClinicalDataPDFRepository,
|
|
|
|
|
IRepository<VisitTask> 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 一致性分析临床数据
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取阅片临床数据列表
|
|
|
|
|
/// 获取阅片临床数据列表 (在任务列表)
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="inDto"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpPost]
|
|
|
|
|
public async Task<(List<GetReadingClinicalDataListOutDto>, object)> GetConsistencyAnalysisReadingClinicalDataList(GetReadingClinicalDataListIndto inDto)
|
|
|
|
|
public async Task<List<GetReadingClinicalDataListOutDto>> 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<PreviousHistoryView>(_mapper.ConfigurationProvider).ToListAsync();
|
|
|
|
|
var previousOtherList = await _previousOtherRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).ProjectTo<PreviousOtherView>(_mapper.ConfigurationProvider).ToListAsync();
|
|
|
|
|
var previousSurgeryList = await _previousSurgeryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).ProjectTo<PreviousSurgeryView>(_mapper.ConfigurationProvider).ToListAsync();
|
|
|
|
|
foreach (var item in result)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 新增或修改一致性分析临床数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="indto"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpPost]
|
|
|
|
|
public async Task<IResponseOutput> 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<ReadingClinicalData>(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
|
|
|
|
|
|
|
|
|
|