Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
commit
994cb73104
|
@ -4466,6 +4466,11 @@
|
||||||
上传方式
|
上传方式
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetCRCClinicalDataOutDto.ClinicalDataLevel">
|
||||||
|
<summary>
|
||||||
|
临床级别
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetCRCClinicalDataOutDto.UploadRole">
|
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetCRCClinicalDataOutDto.UploadRole">
|
||||||
<summary>
|
<summary>
|
||||||
上传角色
|
上传角色
|
||||||
|
|
|
@ -77,8 +77,8 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
var pageList = await query.ToPagedListAsync(visitSearchDTO.PageIndex, visitSearchDTO.PageSize, visitSearchDTO.SortField, visitSearchDTO.Asc, string.IsNullOrWhiteSpace(visitSearchDTO.SortField), defalutSortArray);
|
var pageList = await query.ToPagedListAsync(visitSearchDTO.PageIndex, visitSearchDTO.PageSize, visitSearchDTO.SortField, visitSearchDTO.Asc, string.IsNullOrWhiteSpace(visitSearchDTO.SortField), defalutSortArray);
|
||||||
|
|
||||||
var config = await _repository.Where<Trial>(t => t.Id == visitSearchDTO.TrialId).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
var config = await _repository.Where<Trial>(t => t.Id == visitSearchDTO.TrialId).ProjectTo<TrialSubjectAndSVConfig>(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
|
||||||
config.IsHaveSubjectClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == visitSearchDTO.TrialId && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.Subject && x.UploadRole == UploadRole.CRC);
|
config.IsHaveSubjectClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == visitSearchDTO.TrialId && x.IsConfirm && (x.ClinicalDataLevel == ClinicalLevel.Subject || x.ClinicalDataLevel == ClinicalLevel.Study) && x.UploadRole == UploadRole.CRC);
|
||||||
config.IsHaveVisitClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == visitSearchDTO.TrialId && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit && x.UploadRole == UploadRole.CRC);
|
config.IsHaveVisitClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == visitSearchDTO.TrialId && x.IsConfirm && (x.ClinicalDataLevel == ClinicalLevel.SubjectVisit|| x.ClinicalDataLevel == ClinicalLevel.Study) && x.UploadRole == UploadRole.CRC);
|
||||||
return (pageList, config);
|
return (pageList, config);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
private readonly IRepository<QCChallenge> _qcChallengeRepository;
|
private readonly IRepository<QCChallenge> _qcChallengeRepository;
|
||||||
private readonly IRepository<DicomStudy> _dicomStudyRepository;
|
private readonly IRepository<DicomStudy> _dicomStudyRepository;
|
||||||
private readonly IRepository<DicomSeries> _dicomSeriesrepository;
|
private readonly IRepository<DicomSeries> _dicomSeriesrepository;
|
||||||
|
private readonly IReadingClinicalDataService _readingClinicalDataService;
|
||||||
private readonly IRepository<Subject> _subjectRepository;
|
private readonly IRepository<Subject> _subjectRepository;
|
||||||
private readonly IRepository<ReadingClinicalData> _readingClinicalDataRepository;
|
private readonly IRepository<ReadingClinicalData> _readingClinicalDataRepository;
|
||||||
private readonly IRepository<QCChallengeDialog> _qCChallengeDialogrepository;
|
private readonly IRepository<QCChallengeDialog> _qCChallengeDialogrepository;
|
||||||
|
@ -43,6 +44,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
IRepository<VisitTask> visitTaskRepository,
|
IRepository<VisitTask> visitTaskRepository,
|
||||||
IRepository<DicomStudy> dicomStudyRepository,
|
IRepository<DicomStudy> dicomStudyRepository,
|
||||||
IRepository<DicomSeries> dicomSeriesrepository,
|
IRepository<DicomSeries> dicomSeriesrepository,
|
||||||
|
IReadingClinicalDataService readingClinicalDataService,
|
||||||
IRepository<Subject> subjectRepository,
|
IRepository<Subject> subjectRepository,
|
||||||
IRepository<ReadingClinicalData> readingClinicalDataRepository,
|
IRepository<ReadingClinicalData> readingClinicalDataRepository,
|
||||||
IRepository<QCChallengeDialog> qCChallengeDialogrepository,
|
IRepository<QCChallengeDialog> qCChallengeDialogrepository,
|
||||||
|
@ -55,6 +57,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
_qcChallengeRepository = qcChallengeRepository;
|
_qcChallengeRepository = qcChallengeRepository;
|
||||||
_dicomStudyRepository = dicomStudyRepository;
|
_dicomStudyRepository = dicomStudyRepository;
|
||||||
this._dicomSeriesrepository = dicomSeriesrepository;
|
this._dicomSeriesrepository = dicomSeriesrepository;
|
||||||
|
this._readingClinicalDataService = readingClinicalDataService;
|
||||||
this._subjectRepository = subjectRepository;
|
this._subjectRepository = subjectRepository;
|
||||||
this._readingClinicalDataRepository = readingClinicalDataRepository;
|
this._readingClinicalDataRepository = readingClinicalDataRepository;
|
||||||
this._qCChallengeDialogrepository = qCChallengeDialogrepository;
|
this._qCChallengeDialogrepository = qCChallengeDialogrepository;
|
||||||
|
@ -1220,6 +1223,32 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
public async Task<IResponseOutput> CRCRequestToQC(CRCRequestToQCCommand cRCRequestToQCCommand)
|
public async Task<IResponseOutput> CRCRequestToQC(CRCRequestToQCCommand cRCRequestToQCCommand)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// 验证临床数据 是否有Pet类型
|
||||||
|
#region 验证临床数据 是否有Pet类型
|
||||||
|
foreach (var item in cRCRequestToQCCommand.SubjectVisitIds)
|
||||||
|
{
|
||||||
|
if (await _dicomStudyRepository.AnyAsync(x => x.SubjectVisitId == item && x.Modalities == "CT"))
|
||||||
|
{
|
||||||
|
var visit = await _subjectVisitRepository.Where(x => x.Id == item).FirstNotNullAsync();
|
||||||
|
var clinicalData = await this._readingClinicalDataService.GetCRCClinicalData(new Service.Reading.Dto.GetCRCClinicalDataInDto()
|
||||||
|
{
|
||||||
|
IsBaseline = visit.IsBaseLine,
|
||||||
|
SubjectId = visit.SubjectId,
|
||||||
|
SubjectVisitId = item,
|
||||||
|
TrialId = cRCRequestToQCCommand.TrialId,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (clinicalData.Any(x => x.ClinicalDataLevel == ClinicalLevel.Study && x.ClinicalUploadType == ClinicalUploadType.PDF && x.PDFFileList.Count() == 0))
|
||||||
|
{
|
||||||
|
throw new BusinessValidationFailedException(_localizer["QCOperation_NeedStudyClinical"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
var trialId = cRCRequestToQCCommand.TrialId;
|
var trialId = cRCRequestToQCCommand.TrialId;
|
||||||
|
|
||||||
var trialConfig = (await _trialRepository
|
var trialConfig = (await _trialRepository
|
||||||
|
|
|
@ -193,6 +193,17 @@ namespace IRaCIS.Core.Application.Service
|
||||||
ReadingId = n.VisitId,
|
ReadingId = n.VisitId,
|
||||||
TrialId = inDto.TrialId
|
TrialId = inDto.TrialId
|
||||||
}).ToList());
|
}).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());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -195,7 +195,8 @@ namespace IRaCIS.Application.Services
|
||||||
Id = x.Id,
|
Id = x.Id,
|
||||||
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us) ,
|
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us) ,
|
||||||
ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType,
|
ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType,
|
||||||
ClinicalDataSetEnName=x.ClinicalDataTrialSet.ClinicalDataSetEnName,
|
ClinicalDataLevel=x.ClinicalDataTrialSet.ClinicalDataLevel,
|
||||||
|
ClinicalDataSetEnName =x.ClinicalDataTrialSet.ClinicalDataSetEnName,
|
||||||
ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id,
|
ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id,
|
||||||
FileName = x.ClinicalDataTrialSet.FileName,
|
FileName = x.ClinicalDataTrialSet.FileName,
|
||||||
UploadRole = x.ClinicalDataTrialSet.UploadRole,
|
UploadRole = x.ClinicalDataTrialSet.UploadRole,
|
||||||
|
|
|
@ -87,6 +87,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ClinicalUploadType ClinicalUploadType { get; set; }
|
public ClinicalUploadType ClinicalUploadType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 临床级别
|
||||||
|
/// </summary>
|
||||||
|
public ClinicalLevel ClinicalDataLevel { get; set; }
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 上传角色
|
/// 上传角色
|
||||||
|
|
|
@ -1317,6 +1317,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
|
|
||||||
public bool IsBaseLine { get; set; }
|
public bool IsBaseLine { get; set; }
|
||||||
|
|
||||||
|
public decimal VisitNum { get; set; }
|
||||||
|
|
||||||
public bool IsHaveChange { get; set; }
|
public bool IsHaveChange { get; set; }
|
||||||
|
|
||||||
public string VisitRemark { get; set; } = string.Empty;
|
public string VisitRemark { get; set; } = string.Empty;
|
||||||
|
|
|
@ -24,6 +24,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
Task<List<GetReadingClinicalDataListOutDto>> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto);
|
Task<List<GetReadingClinicalDataListOutDto>> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto);
|
||||||
|
|
||||||
|
Task<List<GetCRCClinicalDataOutDto>> GetCRCClinicalData(GetCRCClinicalDataInDto inDto);
|
||||||
|
|
||||||
|
|
||||||
Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId);
|
Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1512,12 +1512,11 @@ namespace IRaCIS.Application.Services
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
|
||||||
public async Task MergeLesion(MergeLesionInDto inDto)
|
public async Task MergeLesion(MergeLesionInDto inDto)
|
||||||
{
|
{
|
||||||
await VerifyTaskIsSign(inDto.VisitTaskId);
|
await VerifyTaskIsSign(inDto.VisitTaskId);
|
||||||
await this.VerifyIsBaseLineTask(inDto.VisitTaskId);
|
await this.VerifyIsBaseLineTask(inDto.VisitTaskId);
|
||||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.MergeMainRowId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
|
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
|
||||||
var mergeRow = await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.MergeMainRowId).Include(x => x.ReadingQuestionTrial).FirstNotNullAsync();
|
var mergeRow = await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.MergeMainRowId).Include(x => x.ReadingQuestionTrial).FirstNotNullAsync();
|
||||||
|
|
||||||
var mark = mergeRow.ReadingQuestionTrial.OrderMark + mergeRow.RowIndex.GetLesionMark();
|
var mark = mergeRow.ReadingQuestionTrial.OrderMark + mergeRow.RowIndex.GetLesionMark();
|
||||||
|
|
|
@ -215,6 +215,8 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
VisitName = x.SourceSubjectVisit.VisitName,
|
VisitName = x.SourceSubjectVisit.VisitName,
|
||||||
IsBaseLine = x.SourceSubjectVisit.IsBaseLine,
|
IsBaseLine = x.SourceSubjectVisit.IsBaseLine,
|
||||||
|
VisitNum=x.SourceSubjectVisit.VisitNum,
|
||||||
|
|
||||||
VisitTaskId = x.Id,
|
VisitTaskId = x.Id,
|
||||||
// QuestionList = x.ReadingTaskQuestionAnswerList.Where(y => y.ReadingQuestionTrial.IsJudgeQuestion).OrderBy(y => y.ReadingQuestionTrial.ShowOrder)
|
// QuestionList = x.ReadingTaskQuestionAnswerList.Where(y => y.ReadingQuestionTrial.IsJudgeQuestion).OrderBy(y => y.ReadingQuestionTrial.ShowOrder)
|
||||||
//.Select(y => new OncologyQuestion()
|
//.Select(y => new OncologyQuestion()
|
||||||
|
@ -225,7 +227,7 @@ namespace IRaCIS.Application.Services
|
||||||
//}).ToList()
|
//}).ToList()
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
var oncologyReadingQuestions = await _readingOncologyTaskInfoRepository.Where(x => x.OncologyTaskId == inDto.VisitTaskId).ToListAsync();
|
var oncologyReadingQuestions = await _readingOncologyTaskInfoRepository.Where(x => x.OncologyTaskId == inDto.VisitTaskId).Include(x=>x.VisitTask).ToListAsync();
|
||||||
// 上一次肿瘤学阅片
|
// 上一次肿瘤学阅片
|
||||||
|
|
||||||
var lastOncologyTask = await _visitTaskRepository.Where(x =>
|
var lastOncologyTask = await _visitTaskRepository.Where(x =>
|
||||||
|
@ -241,7 +243,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
if (lastOncologyTask != null&& taskInfo.TaskState==TaskState.Effect&&taskInfo.ReadingTaskState!=ReadingTaskState.HaveSigned)
|
if (lastOncologyTask != null&& taskInfo.TaskState==TaskState.Effect&&taskInfo.ReadingTaskState!=ReadingTaskState.HaveSigned)
|
||||||
{
|
{
|
||||||
lastOncologyAnswerList= await _readingOncologyTaskInfoRepository.Where(x => x.OncologyTaskId == lastOncologyTask.Id).ToListAsync();
|
lastOncologyAnswerList= await _readingOncologyTaskInfoRepository.Where(x => x.OncologyTaskId == lastOncologyTask.Id).Include(x => x.VisitTask).ToListAsync();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,7 +251,8 @@ namespace IRaCIS.Application.Services
|
||||||
oncologyVisits.ForEach(x =>
|
oncologyVisits.ForEach(x =>
|
||||||
{
|
{
|
||||||
var oncologyData = oncologyReadingQuestions.Where(y => y.VisitTaskId == x.VisitTaskId).FirstOrDefault();
|
var oncologyData = oncologyReadingQuestions.Where(y => y.VisitTaskId == x.VisitTaskId).FirstOrDefault();
|
||||||
var lastOncologyData = lastOncologyAnswerList.Where(y => y.VisitTaskId == x.VisitTaskId).FirstOrDefault();
|
/// 根据任务编号匹配 不区分 r1 r2
|
||||||
|
var lastOncologyData = lastOncologyAnswerList.Where(y => y.VisitTask.VisitTaskNum == x.VisitNum).FirstOrDefault();
|
||||||
|
|
||||||
var evaluationResult = string.Empty;
|
var evaluationResult = string.Empty;
|
||||||
var evaluationReason = string.Empty;
|
var evaluationReason = string.Empty;
|
||||||
|
|
|
@ -1767,6 +1767,11 @@ public enum SUVChangeVSBaseline
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DisplayAttribute(Name = "肿瘤学阅片")]
|
[DisplayAttribute(Name = "肿瘤学阅片")]
|
||||||
OncologyRead = 3,
|
OncologyRead = 3,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 检查
|
||||||
|
/// </summary>
|
||||||
|
Study=4,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Reference in New Issue