diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index d98b3e3ce..62dcea97d 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -4466,6 +4466,11 @@
上传方式
+
+
+ 临床级别
+
+
上传角色
diff --git a/IRaCIS.Core.Application/Service/QC/QCListService.cs b/IRaCIS.Core.Application/Service/QC/QCListService.cs
index 89841ef0d..e3d5a858c 100644
--- a/IRaCIS.Core.Application/Service/QC/QCListService.cs
+++ b/IRaCIS.Core.Application/Service/QC/QCListService.cs
@@ -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 config = await _repository.Where(t => t.Id == visitSearchDTO.TrialId).ProjectTo(_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.IsHaveVisitClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == visitSearchDTO.TrialId && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit && 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.ClinicalDataLevel == ClinicalLevel.Study) && x.UploadRole == UploadRole.CRC);
return (pageList, config);
}
diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs
index ef7a47d5c..0f57335a5 100644
--- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs
+++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs
@@ -28,7 +28,8 @@ namespace IRaCIS.Core.Application.Image.QA
private readonly IRepository _qcChallengeRepository;
private readonly IRepository _dicomStudyRepository;
private readonly IRepository _dicomSeriesrepository;
- private readonly IRepository _subjectRepository;
+ private readonly IReadingClinicalDataService _readingClinicalDataService;
+ private readonly IRepository _subjectRepository;
private readonly IRepository _readingClinicalDataRepository;
private readonly IRepository _qCChallengeDialogrepository;
private readonly IRepository _checkChallengeDialogrepository;
@@ -43,7 +44,8 @@ namespace IRaCIS.Core.Application.Image.QA
IRepository visitTaskRepository,
IRepository dicomStudyRepository,
IRepository dicomSeriesrepository,
- IRepository subjectRepository,
+ IReadingClinicalDataService readingClinicalDataService,
+ IRepository subjectRepository,
IRepository readingClinicalDataRepository,
IRepository qCChallengeDialogrepository,
IRepository checkChallengeDialogrepository,
@@ -55,7 +57,8 @@ namespace IRaCIS.Core.Application.Image.QA
_qcChallengeRepository = qcChallengeRepository;
_dicomStudyRepository = dicomStudyRepository;
this._dicomSeriesrepository = dicomSeriesrepository;
- this._subjectRepository = subjectRepository;
+ this._readingClinicalDataService = readingClinicalDataService;
+ this._subjectRepository = subjectRepository;
this._readingClinicalDataRepository = readingClinicalDataRepository;
this._qCChallengeDialogrepository = qCChallengeDialogrepository;
this._checkChallengeDialogrepository = checkChallengeDialogrepository;
@@ -1220,7 +1223,33 @@ namespace IRaCIS.Core.Application.Image.QA
public async Task CRCRequestToQC(CRCRequestToQCCommand cRCRequestToQCCommand)
{
- var trialId = cRCRequestToQCCommand.TrialId;
+ // 验证临床数据 是否有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 trialConfig = (await _trialRepository
.Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification, t.IsUrgent, t.IsHaveFirstGiveMedicineDate, t.ClinicalInformationTransmissionEnum })
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
index a1424d670..761800f5b 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs
@@ -193,6 +193,17 @@ namespace IRaCIS.Core.Application.Service
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());
});
diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
index 633c2597d..61f027698 100644
--- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs
@@ -195,7 +195,8 @@ namespace IRaCIS.Application.Services
Id = x.Id,
ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us) ,
ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType,
- ClinicalDataSetEnName=x.ClinicalDataTrialSet.ClinicalDataSetEnName,
+ ClinicalDataLevel=x.ClinicalDataTrialSet.ClinicalDataLevel,
+ ClinicalDataSetEnName =x.ClinicalDataTrialSet.ClinicalDataSetEnName,
ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id,
FileName = x.ClinicalDataTrialSet.FileName,
UploadRole = x.ClinicalDataTrialSet.UploadRole,
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
index cd3713b1f..39262facc 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs
@@ -87,6 +87,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public ClinicalUploadType ClinicalUploadType { get; set; }
+ ///
+ /// 临床级别
+ ///
+ public ClinicalLevel ClinicalDataLevel { get; set; }
+
///
/// 上传角色
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
index 3d6a8c9ea..bc8d32f50 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
@@ -1317,7 +1317,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public bool IsBaseLine { get; set; }
- public bool IsHaveChange { get; set; }
+ public decimal VisitNum { get; set; }
+
+ public bool IsHaveChange { get; set; }
public string VisitRemark { get; set; } = string.Empty;
diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs
index 94705f59a..82c175fb6 100644
--- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs
@@ -24,6 +24,9 @@ namespace IRaCIS.Core.Application.Contracts
Task> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto);
- Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId);
+ Task> GetCRCClinicalData(GetCRCClinicalDataInDto inDto);
+
+
+ Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId);
}
}
\ No newline at end of file
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
index 00765027c..d99d8d493 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
@@ -1512,12 +1512,11 @@ namespace IRaCIS.Application.Services
///
///
[HttpPost]
- [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task MergeLesion(MergeLesionInDto inDto)
{
await VerifyTaskIsSign(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 mark = mergeRow.ReadingQuestionTrial.OrderMark + mergeRow.RowIndex.GetLesionMark();
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs
index 438de68c8..ca38c5187 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs
@@ -215,7 +215,9 @@ namespace IRaCIS.Application.Services
{
VisitName = x.SourceSubjectVisit.VisitName,
IsBaseLine = x.SourceSubjectVisit.IsBaseLine,
- VisitTaskId = x.Id,
+ VisitNum=x.SourceSubjectVisit.VisitNum,
+
+ VisitTaskId = x.Id,
// QuestionList = x.ReadingTaskQuestionAnswerList.Where(y => y.ReadingQuestionTrial.IsJudgeQuestion).OrderBy(y => y.ReadingQuestionTrial.ShowOrder)
//.Select(y => new OncologyQuestion()
//{
@@ -225,7 +227,7 @@ namespace IRaCIS.Application.Services
//}).ToList()
}).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 =>
@@ -241,7 +243,7 @@ namespace IRaCIS.Application.Services
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 =>
{
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 evaluationReason = string.Empty;
diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs
index eef85caef..42f5cdb4a 100644
--- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs
+++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs
@@ -1767,7 +1767,12 @@ public enum SUVChangeVSBaseline
///
[DisplayAttribute(Name = "肿瘤学阅片")]
OncologyRead = 3,
- }
+
+ ///
+ /// 检查
+ ///
+ Study=4,
+ }
///
/// 全局答案类型