代码修改

IRC_NewDev
he 2024-08-01 10:35:57 +08:00
parent d1e21a9f4b
commit ee43a5dc9d
2 changed files with 148 additions and 70 deletions

View File

@ -38,6 +38,7 @@ namespace IRaCIS.Application.Services
private readonly IRepository<Subject> _subjectRepository; private readonly IRepository<Subject> _subjectRepository;
private readonly IRepository<ReadModule> _readModuleRepository; private readonly IRepository<ReadModule> _readModuleRepository;
private readonly IRepository<ReadingClinicalDataPDF> _readingClinicalDataPDFRepository; private readonly IRepository<ReadingClinicalDataPDF> _readingClinicalDataPDFRepository;
private readonly IRepository<ReadingConsistentClinicalDataPDF> _readingConsistentClinicalDataPDFRepository;
public ReadingClinicalDataService(IRepository<ReadingClinicalData> readingClinicalDataRepository, public ReadingClinicalDataService(IRepository<ReadingClinicalData> readingClinicalDataRepository,
IRepository<ReadingConsistentClinicalData> readingConsistentClinicalDataRepository, IRepository<ReadingConsistentClinicalData> readingConsistentClinicalDataRepository,
@ -56,6 +57,7 @@ namespace IRaCIS.Application.Services
IRepository<ReadModule> readModuleRepository, IRepository<ReadModule> readModuleRepository,
IRepository<ReadingClinicalDataPDF> readingClinicalDataPDFRepository, IRepository<ReadingClinicalDataPDF> readingClinicalDataPDFRepository,
IRepository<ReadingConsistentClinicalDataPDF> readingConsistentClinicalDataPDFRepository,
IRepository<VisitTask> visitTaskRepository) IRepository<VisitTask> visitTaskRepository)
{ {
this._readingClinicalDataRepository = readingClinicalDataRepository; this._readingClinicalDataRepository = readingClinicalDataRepository;
@ -73,6 +75,7 @@ namespace IRaCIS.Application.Services
this._subjectRepository = subjectRepository; this._subjectRepository = subjectRepository;
this._readModuleRepository = readModuleRepository; this._readModuleRepository = readModuleRepository;
this._readingClinicalDataPDFRepository = readingClinicalDataPDFRepository; this._readingClinicalDataPDFRepository = readingClinicalDataPDFRepository;
this._readingConsistentClinicalDataPDFRepository = readingConsistentClinicalDataPDFRepository;
this._visitTaskRepository = visitTaskRepository; this._visitTaskRepository = visitTaskRepository;
} }
@ -91,9 +94,6 @@ namespace IRaCIS.Application.Services
.WhereIf(indto.Id != null, x => x.Id != indto.Id) .WhereIf(indto.Id != null, x => x.Id != indto.Id)
.Where(x => x.ClinicalDataTrialSetId == indto.ClinicalDataTrialSetId && x.ReadingId == indto.ReadingId && x.StudyId == indto.StudyId); .Where(x => x.ClinicalDataTrialSetId == indto.ClinicalDataTrialSetId && x.ReadingId == indto.ReadingId && x.StudyId == indto.StudyId);
if (await existsQuery.AnyAsync()) if (await existsQuery.AnyAsync())
{ {
//---存在同类型的临床数据,操作失败 //---存在同类型的临床数据,操作失败
@ -845,7 +845,7 @@ namespace IRaCIS.Application.Services
{ {
var visitTask = await _visitTaskRepository.FirstOrDefaultAsync(x => x.Id == inDto.VisitTaskId); var visitTask = await _visitTaskRepository.FirstOrDefaultAsync(x => x.Id == inDto.VisitTaskId);
inDto.ReadingId = visitTask.SouceReadModuleId ?? visitTask.SourceSubjectVisitId; inDto.ReadingId = visitTask.SouceReadModuleId ?? visitTask.SourceSubjectVisitId;
inDto.TrialReadingCriterionId = visitTask.TrialReadingCriterionId;
if (visitTask.IsAnalysisCreate && visitTask.IsSelfAnalysis == true) if (visitTask.IsAnalysisCreate && visitTask.IsSelfAnalysis == true)
{ {
@ -890,43 +890,48 @@ namespace IRaCIS.Application.Services
}).ToList(), }).ToList(),
}); });
// 原来的非PDF // 是否获取所有一致性分析的数据
var otherQuesy = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId) if(!inDto.IsGetAllConsistencyAnalysis)
.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, // 原来的非PDF
SubjectId = x.SubjectId, var otherQuesy = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId)
ReadingId = x.ReadingId, .WhereIf(inDto.ReadingClinicalDataId != null, x => x.Id == inDto.ReadingClinicalDataId)
ClinicalDataSetEnName = x.ClinicalDataTrialSet.ClinicalDataSetEnName, .WhereIf(inDto.ClinicalDataTrialSetId != null, x => x.ClinicalDataTrialSetId == inDto.ClinicalDataTrialSetId)
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us), .WhereIf(inDto.SelectIsSign, x => x.IsSign == true)
ClinicalDataTrialSetId = x.ClinicalDataTrialSetId, .Where(x => x.ReadingId == inDto.ReadingId)
IsSign = x.IsSign, .WhereIf(inDto.TrialReadingCriterionId != null, x => x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId))
ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType, .Where(x => x.ClinicalDataTrialSet.ClinicalUploadType != ClinicalUploadType.PDF)
CriterionEnumList = x.ClinicalDataTrialSet.CriterionEnumList, .Select(x => new GetReadingClinicalDataListOutDto()
TrialClinicalDataSetCriteriaList = x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList, {
Id = x.Id, ClinicalDataLevel = x.ClinicalDataTrialSet.ClinicalDataLevel,
UploadRole = x.ClinicalDataTrialSet.UploadRole, SubjectId = x.SubjectId,
IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC, ReadingId = x.ReadingId,
IsBlind = x.IsBlind, ClinicalDataSetEnName = x.ClinicalDataTrialSet.ClinicalDataSetEnName,
IsComplete = x.IsComplete, ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us),
FileCount = x.FileCount, ClinicalDataTrialSetId = x.ClinicalDataTrialSetId,
ReadingClinicalDataState = x.ReadingClinicalDataState, IsSign = x.IsSign,
FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto() ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType,
{ CriterionEnumList = x.ClinicalDataTrialSet.CriterionEnumList,
Id = y.Id, TrialClinicalDataSetCriteriaList = x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList,
FileName = y.FileName, Id = x.Id,
Path = y.Path, UploadRole = x.ClinicalDataTrialSet.UploadRole,
CreateTime = y.CreateTime, IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC,
}).ToList(), 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 else
{ {
@ -1112,52 +1117,109 @@ namespace IRaCIS.Application.Services
#endregion #endregion
#region 一致性分析 #region 一致性分析临床数据
/// <summary> /// <summary>
/// 获取阅片临床数据列表 /// 获取阅片临床数据列表 (在任务列表)
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [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() var result = await this.GetClinicalDataList(new GetReadingOrTaskClinicalDataListInDto()
{ {
ClinicalDataTrialSetId = inDto.ClinicalDataTrialSetId,
GetClinicalType = inDto.GetClinicalType,
SubjectId = inDto.SubjectId, SubjectId = inDto.SubjectId,
TrialId = inDto.TrialId, TrialId = inDto.TrialId,
SelectIsSign = false, SelectIsSign = false,
ReadingId = inDto.ReadingId, IsGetAllConsistencyAnalysis = false,
TrialReadingCriterionId = inDto.TrialReadingCriterionId,
}); });
var readingIds = result.Select(x => x.ReadingId).ToList();
var previousHistoryList = await _previousHistoryRepository.Where(x => readingIds.Contains(x.SubjectVisitId)).ProjectTo<PreviousHistoryView>(_mapper.ConfigurationProvider).ToListAsync(); return result;
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(), FileName = x.FileName,
PreviousOtherList = previousOtherList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(), Path = x.Path,
PreviousSurgeryList = previousSurgeryList.Where(x => x.ClinicalDataTrialSetId == item.ClinicalDataTrialSetId).ToList(), 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 #endregion

View File

@ -234,12 +234,28 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// </summary> /// </summary>
public bool SelectIsSign { get; set; } = true; public bool SelectIsSign { get; set; } = true;
/// <summary>
/// 是否查询所有的一致性分析临床数据 (为否只查询PDF)
/// </summary>
public bool IsGetAllConsistencyAnalysis { get; set; } = true;
} }
/// <summary> public class GetConsistencyAnalysisReadingClinicalDataListInDto
/// 获取访视列表 {
/// </summary> [NotDefault]
public class GetReadingClinicalDataListIndto public Guid SubjectId { get; set; }
[NotDefault]
public Guid VisitTaskId { get; set; }
[NotDefault]
public Guid TrialId { get; set; }
}
/// <summary>
/// 获取访视列表
/// </summary>
public class GetReadingClinicalDataListIndto
{ {
[NotDefault] [NotDefault]
public Guid SubjectId { get; set; } public Guid SubjectId { get; set; }