@@ -28,11 +28,11 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
private readonly IRepository<QCChallenge> _qcChallengeRepository;
|
||||
private readonly IRepository<DicomStudy> _dicomStudyRepository;
|
||||
private readonly IRepository<DicomSeries> _dicomSeriesrepository;
|
||||
private readonly IReadingClinicalDataService _readingClinicalDataService;
|
||||
private readonly IRepository<Subject> _subjectRepository;
|
||||
private readonly IReadingClinicalDataService _readingClinicalDataService;
|
||||
private readonly IRepository<Subject> _subjectRepository;
|
||||
private readonly IRepository<ReadingClinicalData> _readingClinicalDataRepository;
|
||||
private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository;
|
||||
private readonly IRepository<QCChallengeDialog> _qCChallengeDialogrepository;
|
||||
private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository;
|
||||
private readonly IRepository<QCChallengeDialog> _qCChallengeDialogrepository;
|
||||
private readonly IRepository<CheckChallengeDialog> _checkChallengeDialogrepository;
|
||||
private readonly IRepository<Trial> _trialRepository;
|
||||
private readonly IRepository<VisitTask> _visitTaskRepository;
|
||||
@@ -45,11 +45,11 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
IRepository<VisitTask> visitTaskRepository,
|
||||
IRepository<DicomStudy> dicomStudyRepository,
|
||||
IRepository<DicomSeries> dicomSeriesrepository,
|
||||
IReadingClinicalDataService readingClinicalDataService,
|
||||
IRepository<Subject> subjectRepository,
|
||||
IReadingClinicalDataService readingClinicalDataService,
|
||||
IRepository<Subject> subjectRepository,
|
||||
IRepository<ReadingClinicalData> readingClinicalDataRepository,
|
||||
IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository,
|
||||
IRepository<QCChallengeDialog> qCChallengeDialogrepository,
|
||||
IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository,
|
||||
IRepository<QCChallengeDialog> qCChallengeDialogrepository,
|
||||
IRepository<CheckChallengeDialog> checkChallengeDialogrepository,
|
||||
IVisitTaskHelpeService visitTaskHelpeService,
|
||||
IDistributedLockProvider distributedLockProvider
|
||||
@@ -59,11 +59,11 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
_qcChallengeRepository = qcChallengeRepository;
|
||||
_dicomStudyRepository = dicomStudyRepository;
|
||||
this._dicomSeriesrepository = dicomSeriesrepository;
|
||||
this._readingClinicalDataService = readingClinicalDataService;
|
||||
this._subjectRepository = subjectRepository;
|
||||
this._readingClinicalDataService = readingClinicalDataService;
|
||||
this._subjectRepository = subjectRepository;
|
||||
this._readingClinicalDataRepository = readingClinicalDataRepository;
|
||||
this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
|
||||
this._qCChallengeDialogrepository = qCChallengeDialogrepository;
|
||||
this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
|
||||
this._qCChallengeDialogrepository = qCChallengeDialogrepository;
|
||||
this._checkChallengeDialogrepository = checkChallengeDialogrepository;
|
||||
_trialRepository = trialRepository;
|
||||
this._visitTaskRepository = visitTaskRepository;
|
||||
@@ -894,7 +894,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
public async Task<GetNextIQCQualityOutDto> CollectNextIQCQuality(GetNextIQCQualityInDto inDto)
|
||||
{
|
||||
var nextIQCQuality = await this.GetNextIQCQuality(inDto);
|
||||
|
||||
|
||||
if (nextIQCQuality.VisitId != null)
|
||||
{
|
||||
var visit = await _subjectVisitRepository.Where(x => x.Id == nextIQCQuality.VisitId).FirstNotNullAsync();
|
||||
@@ -902,7 +902,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
{
|
||||
await ObtainOrCancelQCTask(inDto.TrialId, nextIQCQuality.VisitId.Value, true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
return nextIQCQuality;
|
||||
@@ -932,23 +932,24 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
break;
|
||||
case TrialQCProcess.SingleAudit:
|
||||
visitList = await _subjectVisitRepository.Where(x => x.SubmitState == SubmitStateEnum.Submitted
|
||||
&& x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId!= _userInfo.Id&&(x.CurrentActionUserId == _userInfo.Id || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake)))
|
||||
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y=>!y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.Id)
|
||||
.Include(x => x.Subject).ToListAsync();
|
||||
&& x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId != _userInfo.Id && (x.CurrentActionUserId == _userInfo.Id || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake)))
|
||||
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.Id)
|
||||
.Include(x => x.Subject).ToListAsync();
|
||||
|
||||
subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId)
|
||||
|
||||
subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId)
|
||||
|
||||
.OrderBy(x=>x.VisitNum).FirstOrDefault();
|
||||
if(subjectVisit!=null)
|
||||
|
||||
.OrderBy(x => x.VisitNum).FirstOrDefault();
|
||||
if (subjectVisit != null)
|
||||
{
|
||||
return new GetNextIQCQualityOutDto() {
|
||||
SubjectId= subjectVisit.SubjectId,
|
||||
VisitId= subjectVisit.Id
|
||||
return new GetNextIQCQualityOutDto()
|
||||
{
|
||||
SubjectId = subjectVisit.SubjectId,
|
||||
VisitId = subjectVisit.Id
|
||||
};
|
||||
}
|
||||
|
||||
subjectVisit= visitList.OrderBy(x => x.Subject.Code).ThenBy(x=>x.VisitNum).FirstOrDefault();
|
||||
subjectVisit = visitList.OrderBy(x => x.Subject.Code).ThenBy(x => x.VisitNum).FirstOrDefault();
|
||||
if (subjectVisit != null)
|
||||
{
|
||||
return new GetNextIQCQualityOutDto()
|
||||
@@ -965,10 +966,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
case TrialQCProcess.DoubleAudit:
|
||||
|
||||
visitList = await _subjectVisitRepository.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId &&
|
||||
((x.CurrentActionUserId == _userInfo.Id)||(!x.IsTake&& x.AuditState != AuditStateEnum.QCPassed&& (x.PreliminaryAuditUserId != _userInfo.Id)))
|
||||
((x.CurrentActionUserId == _userInfo.Id) || (!x.IsTake && x.AuditState != AuditStateEnum.QCPassed && (x.PreliminaryAuditUserId != _userInfo.Id)))
|
||||
)
|
||||
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId !=_userInfo.Id)
|
||||
.Include(x => x.Subject).ToListAsync();
|
||||
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.Id)
|
||||
.Include(x => x.Subject).ToListAsync();
|
||||
if (subjectVisit != null)
|
||||
{
|
||||
return new GetNextIQCQualityOutDto()
|
||||
@@ -1027,14 +1028,14 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
{
|
||||
//throw new BusinessValidationFailedException("当前访视已被领取,不允许领取");
|
||||
|
||||
//---当前访视的影像质控任务已被其他QC领取,不允许领取
|
||||
//---当前访视的影像质控任务已被其他QC领取,不允许领取
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCTaskNoAccess"], ApiResponseCodeEnum.NeedTips);
|
||||
|
||||
}
|
||||
|
||||
if (await _subjectVisitRepository.AnyAsync(t => t.Trial.QCQuestionConfirmedUserId == null && t.Id == subjectVisitId))
|
||||
{
|
||||
//---请先配置影像质控审核问题,再领取影像质控任务
|
||||
//---请先配置影像质控审核问题,再领取影像质控任务
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCConfigFirst"], ApiResponseCodeEnum.NeedTips);
|
||||
}
|
||||
|
||||
@@ -1053,14 +1054,14 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
|
||||
if (trialConfig.QCProcessEnum == TrialQCProcess.NotAudit)
|
||||
{
|
||||
//---项目配置为不审,没有领取QC Task
|
||||
//---项目配置为不审,没有领取QC Task
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_NoQC"]);
|
||||
}
|
||||
else if (trialConfig.QCProcessEnum == TrialQCProcess.SingleAudit)
|
||||
{
|
||||
if (dbSubjectVisit.PreliminaryAuditUserId == _userInfo.Id)
|
||||
{
|
||||
//---初审已通过,不能继续领取
|
||||
//---初审已通过,不能继续领取
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_InitialAuditPassed"]);
|
||||
}
|
||||
|
||||
@@ -1074,15 +1075,15 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
}
|
||||
else
|
||||
{
|
||||
// ---项目配置为单审,不满足Submmit State:已提交 或者 Audit State:待审核/审核中, 不允许领取,请刷新界面
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_NoSingleAudit"]);
|
||||
// ---项目配置为单审,不满足Submmit State:已提交 或者 Audit State:待审核/审核中, 不允许领取,请刷新界面
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_NoSingleAudit"]);
|
||||
}
|
||||
}
|
||||
else if (trialConfig.QCProcessEnum == TrialQCProcess.DoubleAudit)
|
||||
{
|
||||
if (dbSubjectVisit.PreliminaryAuditUserId == _userInfo.Id)
|
||||
{
|
||||
//---复审不能和初审是同一个人
|
||||
//---复审不能和初审是同一个人
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_NoSameReviewer"]);
|
||||
}
|
||||
|
||||
@@ -1102,7 +1103,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
}
|
||||
else
|
||||
{
|
||||
//---项目配置为复审,不满足提交状态:已提交 或者 审核状态:待审核/QC中, 不允许领取,请刷新界面
|
||||
//---项目配置为复审,不满足提交状态:已提交 或者 审核状态:待审核/QC中, 不允许领取,请刷新界面
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_NoSecondaryAudit"]);
|
||||
}
|
||||
}
|
||||
@@ -1123,14 +1124,14 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
{
|
||||
if (dbSubjectVisit!.CurrentActionUserId != _userInfo.Id)
|
||||
{
|
||||
//---您不是该质控任务当前领取人,没有操作权限!
|
||||
//---您不是该质控任务当前领取人,没有操作权限!
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_NoRecipient"], ApiResponseCodeEnum.NeedTips);
|
||||
}
|
||||
|
||||
|
||||
if (trialConfig.QCProcessEnum == TrialQCProcess.NotAudit)
|
||||
{
|
||||
//---项目配置影像质控为不审,不需要取消任务功能
|
||||
//---项目配置影像质控为不审,不需要取消任务功能
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_NoQCFunction"]);
|
||||
}
|
||||
else if (trialConfig.QCProcessEnum == TrialQCProcess.SingleAudit)
|
||||
@@ -1143,7 +1144,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
|
||||
else
|
||||
{
|
||||
//---当前访视影像质控任务没有当前领取人,不能释放。
|
||||
//---当前访视影像质控任务没有当前领取人,不能释放。
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_NoTaskOwner"]);
|
||||
}
|
||||
}
|
||||
@@ -1163,7 +1164,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
|
||||
else
|
||||
{
|
||||
//---当前访视影像质控任务没有当前领取人,不能释放。
|
||||
//---当前访视影像质控任务没有当前领取人,不能释放。
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_NoTaskOwner"]);
|
||||
}
|
||||
}
|
||||
@@ -1214,7 +1215,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
}
|
||||
|
||||
//同时要根据项目有没有配置Subject 级别临床数据
|
||||
if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData)&&trialinfo.ClinicalInformationTransmissionEnum!=0)
|
||||
if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData) && trialinfo.ClinicalInformationTransmissionEnum != 0)
|
||||
{
|
||||
|
||||
//---基线没有临床数据,确认提交?
|
||||
@@ -1235,36 +1236,36 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
//[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||
public async Task<IResponseOutput> CRCRequestToQC(CRCRequestToQCCommand cRCRequestToQCCommand)
|
||||
{
|
||||
List<string> modalitieTypess = new List<string>() { "PT、CT", "CT、PT", "PET-CT" };
|
||||
List<string> modalitieTypess = new List<string>() { "PT、CT", "CT、PT", "PET-CT" };
|
||||
// 验证临床数据 是否有Pet类型
|
||||
#region 验证临床数据 是否有Pet类型
|
||||
if (await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == cRCRequestToQCCommand.TrialId && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.Study))
|
||||
{
|
||||
foreach (var item in cRCRequestToQCCommand.SubjectVisitIds)
|
||||
{
|
||||
foreach (var item in cRCRequestToQCCommand.SubjectVisitIds)
|
||||
{
|
||||
|
||||
if (await _dicomStudyRepository.AnyAsync(x => x.SubjectVisitId == item && modalitieTypess.Contains(x.Modalities)))
|
||||
{
|
||||
var visit = await _subjectVisitRepository.Where(x => x.Id == item).FirstNotNullAsync();
|
||||
var clinicalData = await this._readingClinicalDataService.GetStudyClinicalData(new Service.Reading.Dto.GetStudyClinicalDataInDto()
|
||||
{
|
||||
SubjectVisitId = item,
|
||||
});
|
||||
if (await _dicomStudyRepository.AnyAsync(x => x.SubjectVisitId == item && modalitieTypess.Contains(x.Modalities)))
|
||||
{
|
||||
var visit = await _subjectVisitRepository.Where(x => x.Id == item).FirstNotNullAsync();
|
||||
var clinicalData = await this._readingClinicalDataService.GetStudyClinicalData(new Service.Reading.Dto.GetStudyClinicalDataInDto()
|
||||
{
|
||||
SubjectVisitId = item,
|
||||
});
|
||||
|
||||
if (!clinicalData.Any(x => x.ClinicalDataLevel == ClinicalLevel.Study && x.ClinicalUploadType == ClinicalUploadType.PDF && x.PDFFileList.Count() > 0))
|
||||
{
|
||||
throw new BusinessValidationFailedException(_localizer["QCOperation_NeedStudyClinical"]);
|
||||
}
|
||||
}
|
||||
if (!clinicalData.Any(x => x.ClinicalDataLevel == ClinicalLevel.Study && x.ClinicalUploadType == ClinicalUploadType.PDF && x.PDFFileList.Count() > 0))
|
||||
{
|
||||
throw new BusinessValidationFailedException(_localizer["QCOperation_NeedStudyClinical"]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
var trialId = cRCRequestToQCCommand.TrialId;
|
||||
var trialId = cRCRequestToQCCommand.TrialId;
|
||||
|
||||
var trialConfig = (await _trialRepository
|
||||
.Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification, t.IsUrgent, t.IsHaveFirstGiveMedicineDate, t.ClinicalInformationTransmissionEnum })
|
||||
@@ -1311,82 +1312,36 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
//基线不验证
|
||||
if (trialConfig.IsHaveFirstGiveMedicineDate && !dbSubjectVisit.IsBaseLine && dbSubjectVisit.Subject.FirstGiveMedicineTime == null)
|
||||
{
|
||||
//---项目配置了需要填写访视基准日期。但是受试者没有填写访视基准日期,不允许提交
|
||||
//---项目配置了需要填写访视基准日期。但是受试者没有填写访视基准日期,不允许提交
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_MissingBaselineDate"]);
|
||||
}
|
||||
|
||||
//基线 且配置了临床数据
|
||||
//if (trialConfig.ClinicalInformationTransmissionEnum != 0 /*&& dbSubjectVisit.IsBaseLine*//*&&dbSubjectVisit.ClinicalDataSignUserId==null*/)
|
||||
//{
|
||||
if (_subjectVisitRepository.Where(t => t.Id == dbSubjectVisit.Id).Any(t => (t.StudyList.Count(t => t.ModalityForEdit == "") > 0 ||t.NoneDicomStudyList.Count(t => t.Modality == "")>0) && t.Trial.TrialReadingCriterionList.Count(t => t.IsImageFilter == true) > 0))
|
||||
{
|
||||
//有标准配置了影像筛选,该受试者有检查未设置检查类型,不允许提交
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_MissingModality"]);
|
||||
}
|
||||
|
||||
|
||||
////找到需要确认的PDF 临床数据 如果没有CRC 没有上传 那么就添加一条没有文件的记录
|
||||
|
||||
//var crcNeedConfirmClinicalDataSetList = clinicalDataConfirmList.Where(t => t.UploadRole == UploadRole.CRC && t.ClinicalUploadType == ClinicalUploadType.PDF).ToList();
|
||||
|
||||
//// 找到CRC 已经自己添加的临床PDF数据文件
|
||||
|
||||
//var crcAddClinicalDataIdList = _readingClinicalDataRepository.Where(t => t.ReadingId == dbSubjectVisit.Id && t.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && t.ClinicalDataTrialSet.ClinicalUploadType == ClinicalUploadType.PDF)
|
||||
// .Select(t => new { t.ClinicalDataTrialSetId }).ToList();
|
||||
|
||||
//foreach (var crcNeedConfirmClinicalDataSet in crcNeedConfirmClinicalDataSetList)
|
||||
//{
|
||||
// if (!crcAddClinicalDataIdList.Any(t => t.ClinicalDataTrialSetId == crcNeedConfirmClinicalDataSet.Id))
|
||||
// {
|
||||
// await _repository.AddAsync(new ReadingClinicalData()
|
||||
// {
|
||||
// TrialId = dbSubjectVisit.TrialId,
|
||||
// SubjectId = dbSubjectVisit.SubjectId,
|
||||
// ReadingId = dbSubjectVisit.Id,
|
||||
// ClinicalDataTrialSetId = crcNeedConfirmClinicalDataSet.Id,
|
||||
// IsVisit = true,
|
||||
// IsSign = true,
|
||||
// ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
|
||||
|
||||
// });
|
||||
// }
|
||||
//}
|
||||
|
||||
//已确认临床数据完整性
|
||||
dbSubjectVisit.IsConfirmedClinicalData = true;
|
||||
//已确认临床数据完整性
|
||||
dbSubjectVisit.IsConfirmedClinicalData = true;
|
||||
|
||||
|
||||
// CRC 上传的基线数据签名
|
||||
|
||||
List<ClinicalLevel> clinicalneedSign = new List<ClinicalLevel>() {
|
||||
ClinicalLevel.Subject,
|
||||
ClinicalLevel.SubjectVisit,
|
||||
ClinicalLevel.Study,
|
||||
};
|
||||
|
||||
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x =>
|
||||
clinicalneedSign.Contains(x.ClinicalDataTrialSet.ClinicalDataLevel)&&
|
||||
x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == dbSubjectVisit.Id && x.IsSign==false, x => new ReadingClinicalData()
|
||||
{
|
||||
IsSign = true,
|
||||
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
|
||||
});
|
||||
|
||||
|
||||
|
||||
//var signSuccess = await _repository.UpdateFromQueryAsync<TrialSign>(t => t.Id == cRCRequestToQCCommand.SignId, u => new TrialSign() { IsCompleted = true });
|
||||
|
||||
|
||||
////现在修改为 提交时 设置签名信息
|
||||
//dbSubjectVisit.ClinicalDataSignUserId = _userInfo.Id;
|
||||
//dbSubjectVisit.ClinicalDataSignTime = DateTime.Now;
|
||||
|
||||
//那么没有录入 不允许提交
|
||||
//if (!await _repository.AnyAsync<SubjectVisit>(t => t.PreviousHistoryList.Any() || t.PreviousOtherList.Any() || t.PreviousSurgeryList.Any()))
|
||||
//{
|
||||
// return ResponseOutput.NotOk("没有临床数据,不允许提交");
|
||||
//}
|
||||
|
||||
//return ResponseOutput.NotOk("没有签名临床数据,不允许提交");
|
||||
//}
|
||||
|
||||
|
||||
ClinicalLevel.Subject,
|
||||
ClinicalLevel.SubjectVisit,
|
||||
ClinicalLevel.Study,
|
||||
};
|
||||
|
||||
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x =>
|
||||
clinicalneedSign.Contains(x.ClinicalDataTrialSet.ClinicalDataLevel) &&
|
||||
x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == dbSubjectVisit.Id && x.IsSign == false, x => new ReadingClinicalData()
|
||||
{
|
||||
IsSign = true,
|
||||
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned
|
||||
});
|
||||
|
||||
|
||||
var maxVisit = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.SubmitState == SubmitStateEnum.Submitted)
|
||||
@@ -1411,14 +1366,14 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
});
|
||||
|
||||
|
||||
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId)&& x.SubjectId == dbSubjectVisit.SubjectId&&
|
||||
dbSubjectVisit.VisitNum<= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum+0.01m) // 当前的访视 全局 裁判 及之前 全都加急
|
||||
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId &&
|
||||
dbSubjectVisit.VisitNum <= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的访视 全局 裁判 及之前 全都加急
|
||||
&& x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask()
|
||||
{
|
||||
|
||||
IsUrgent = true,
|
||||
TaskUrgentType = TaskUrgentType.PDProgress,
|
||||
IsCanEditUrgentState=false,
|
||||
IsCanEditUrgentState = false,
|
||||
});
|
||||
|
||||
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId
|
||||
@@ -1428,7 +1383,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
|
||||
IsUrgent = true,
|
||||
TaskUrgentType = TaskUrgentType.Other,
|
||||
TaskUrgentRemake= "后续访视设为pd",
|
||||
TaskUrgentRemake = "后续访视设为pd",
|
||||
IsCanEditUrgentState = false,
|
||||
});
|
||||
}
|
||||
@@ -1440,7 +1395,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
});
|
||||
|
||||
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) &&
|
||||
x.VisitTaskNum>= dbSubjectVisit.VisitNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的访视 全局 裁判 全都加急
|
||||
x.VisitTaskNum >= dbSubjectVisit.VisitNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的访视 全局 裁判 全都加急
|
||||
&& x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask()
|
||||
{
|
||||
|
||||
@@ -1464,14 +1419,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
dbSubjectVisit.IsUrgent = true;
|
||||
|
||||
|
||||
////PD确认的紧急会把前面所有未QC完成的访视均标记为紧急
|
||||
|
||||
//var previosSVlist = await _subjectVisitRepository.Where(t => t.SubjectId == dbSubjectVisit.SubjectId && t.VisitNum < dbSubjectVisit.VisitNum && t.IsUrgent == false && t.SubmitState == SubmitStateEnum.Submitted, true).ToListAsync();
|
||||
|
||||
//previosSVlist.ForEach(t =>
|
||||
//{
|
||||
// t.IsUrgent = true;
|
||||
//});
|
||||
}
|
||||
|
||||
|
||||
@@ -1522,7 +1470,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
}
|
||||
|
||||
//非基线设置为PD的话 或者设置为末次访视 根据配置自动生成阅片期
|
||||
if (!dbSubjectVisit.IsBaseLine && (dbSubjectVisit.PDState == PDStateEnum.PDProgress || dbSubjectVisit.IsFinalVisit) )
|
||||
if (!dbSubjectVisit.IsBaseLine && (dbSubjectVisit.PDState == PDStateEnum.PDProgress || dbSubjectVisit.IsFinalVisit))
|
||||
{
|
||||
|
||||
//该标准需要添加阅片期
|
||||
@@ -1590,7 +1538,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
//判断质疑是否都关闭了
|
||||
if (await _repository.AnyAsync<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false))
|
||||
{
|
||||
//---当前访视有影像质控质疑未关闭,不能进行此操作。
|
||||
//---当前访视有影像质控质疑未关闭,不能进行此操作。
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotClosed"]);
|
||||
}
|
||||
}
|
||||
@@ -1621,7 +1569,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
|
||||
if (trialConfig.QCProcessEnum == TrialQCProcess.NotAudit)
|
||||
{
|
||||
//---项目配置影像质控为不审,不需要设置为影像质控通过。
|
||||
//---项目配置影像质控为不审,不需要设置为影像质控通过。
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_NoQCNeeded"]);
|
||||
|
||||
}
|
||||
@@ -1631,7 +1579,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
{
|
||||
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.First))
|
||||
{
|
||||
//---影像质控审核问题没有保存,不能进行此操作。
|
||||
//---影像质控审核问题没有保存,不能进行此操作。
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
||||
}
|
||||
|
||||
@@ -1651,7 +1599,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
{
|
||||
|
||||
var physicalPath = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, path);
|
||||
|
||||
|
||||
if (System.IO.File.Exists(physicalPath))
|
||||
{
|
||||
File.Delete(physicalPath);
|
||||
@@ -1662,7 +1610,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
}
|
||||
else
|
||||
{
|
||||
//---项目配置影像质控为单审,当前访视影像质控任务不能从当前审核状态变更到 审核通过。
|
||||
//---项目配置影像质控为单审,当前访视影像质控任务不能从当前审核状态变更到 审核通过。
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_NotChangePass"]);
|
||||
}
|
||||
|
||||
@@ -1678,7 +1626,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
|
||||
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.First))
|
||||
{
|
||||
//---影像质控审核问题没有保存,不能进行此操作。
|
||||
//---影像质控审核问题没有保存,不能进行此操作。
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
||||
}
|
||||
|
||||
@@ -1693,7 +1641,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
|
||||
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == CurrentQC.Second))
|
||||
{
|
||||
//---影像质控审核问题没有保存,不能进行此操作。
|
||||
//---影像质控审核问题没有保存,不能进行此操作。
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_QCNotSaved"]);
|
||||
}
|
||||
|
||||
@@ -1738,7 +1686,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
|
||||
if (trialConfig.QCProcessEnum == TrialQCProcess.NotAudit)
|
||||
{
|
||||
//---项目配置影像质控为不审,不允许设置影像质控终止。
|
||||
//---项目配置影像质控为不审,不允许设置影像质控终止。
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_NoQCNeededNotEnd"]);
|
||||
}
|
||||
else if (trialConfig.QCProcessEnum == TrialQCProcess.SingleAudit)
|
||||
@@ -1778,7 +1726,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
|
||||
}
|
||||
|
||||
await _qcChallengeRepository.UpdatePartialFromQueryAsync(t => t.IsClosed == false&& t.SubjectVisitId==dbSubjectVisit.Id, u => new QCChallenge() { IsClosed = true, ClosedTime=DateTime.Now, CloseResonEnum = QCChallengeCloseEnum.Unresolvable });
|
||||
await _qcChallengeRepository.UpdatePartialFromQueryAsync(t => t.IsClosed == false && t.SubjectVisitId == dbSubjectVisit.Id, u => new QCChallenge() { IsClosed = true, ClosedTime = DateTime.Now, CloseResonEnum = QCChallengeCloseEnum.Unresolvable });
|
||||
|
||||
|
||||
}
|
||||
@@ -1958,31 +1906,31 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
throw new BusinessValidationFailedException(_localizer["QCOperation_InvalidCompleteResend"]);
|
||||
}
|
||||
|
||||
List<string> modalitieTypess = new List<string>() { "PT、CT", "CT、PT", "PET-CT" };
|
||||
// 验证临床数据 是否有Pet类型
|
||||
#region 验证临床数据 是否有Pet类型
|
||||
if (await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == cRCReuploadFinishedCommand.TrialId && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.Study))
|
||||
{
|
||||
List<string> modalitieTypess = new List<string>() { "PT、CT", "CT、PT", "PET-CT" };
|
||||
// 验证临床数据 是否有Pet类型
|
||||
#region 验证临床数据 是否有Pet类型
|
||||
if (await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == cRCReuploadFinishedCommand.TrialId && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.Study))
|
||||
{
|
||||
var item = qcChallenge.SubjectVisitId;
|
||||
if (await _dicomStudyRepository.AnyAsync(x => x.SubjectVisitId == item && modalitieTypess.Contains(x.Modalities)))
|
||||
{
|
||||
var visit = await _subjectVisitRepository.Where(x => x.Id == item).FirstNotNullAsync();
|
||||
var clinicalData = await this._readingClinicalDataService.GetStudyClinicalData(new Service.Reading.Dto.GetStudyClinicalDataInDto()
|
||||
{
|
||||
SubjectVisitId = item,
|
||||
});
|
||||
if (await _dicomStudyRepository.AnyAsync(x => x.SubjectVisitId == item && modalitieTypess.Contains(x.Modalities)))
|
||||
{
|
||||
var visit = await _subjectVisitRepository.Where(x => x.Id == item).FirstNotNullAsync();
|
||||
var clinicalData = await this._readingClinicalDataService.GetStudyClinicalData(new Service.Reading.Dto.GetStudyClinicalDataInDto()
|
||||
{
|
||||
SubjectVisitId = item,
|
||||
});
|
||||
|
||||
if (!clinicalData.Any(x => x.ClinicalDataLevel == ClinicalLevel.Study && x.ClinicalUploadType == ClinicalUploadType.PDF && x.PDFFileList.Count() > 0))
|
||||
{
|
||||
throw new BusinessValidationFailedException(_localizer["QCOperation_NeedStudyClinical"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!clinicalData.Any(x => x.ClinicalDataLevel == ClinicalLevel.Study && x.ClinicalUploadType == ClinicalUploadType.PDF && x.PDFFileList.Count() > 0))
|
||||
{
|
||||
throw new BusinessValidationFailedException(_localizer["QCOperation_NeedStudyClinical"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
|
||||
var subjectVisitId = qcChallenge.SubjectVisitId;
|
||||
var subjectVisitId = qcChallenge.SubjectVisitId;
|
||||
|
||||
if (await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).SelectMany(t => t.StudyList).CountAsync() == 0 &&
|
||||
await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).SelectMany(t => t.NoneDicomStudyList).SelectMany(u => u.NoneDicomFileList).CountAsync() == 0)
|
||||
@@ -2117,14 +2065,14 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
if (await _subjectVisitRepository.Where(t => t.Id == command.SubjectVisitId)
|
||||
.AnyAsync(t => t.SubmitState == SubmitStateEnum.Submitted && t.IsEnrollmentConfirm != command.IsEnrollmentConfirm))
|
||||
{
|
||||
//---该访视已提交,不能修改入组确认状态
|
||||
//---该访视已提交,不能修改入组确认状态
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_CannotModifyConfirmation"]);
|
||||
}
|
||||
|
||||
if (await _subjectVisitRepository.Where(t => t.Id == command.SubjectVisitId)
|
||||
.AnyAsync(t => t.IsEnrollmentConfirm != command.IsEnrollmentConfirm && t.RequestBackState == RequestBackStateEnum.PM_AgressBack))
|
||||
{
|
||||
//---该访视为回退访视,不允许修改PD确认状态
|
||||
//---该访视为回退访视,不允许修改PD确认状态
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_CannotModifyPDStatus"]);
|
||||
}
|
||||
|
||||
@@ -2211,7 +2159,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisitId,
|
||||
u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed });
|
||||
|
||||
//---转发影像失败。
|
||||
//---转发影像失败。
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_ForwardingFailed"] + result.Failures.ToString() + result.ToJson());
|
||||
}
|
||||
}
|
||||
@@ -2231,8 +2179,8 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.Id == subjectVisitId,
|
||||
u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed });
|
||||
|
||||
// --转发影像失败
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_ForwardingFailed"] + e.Message);
|
||||
// --转发影像失败
|
||||
return ResponseOutput.NotOk(_localizer["QCOperation_ForwardingFailed"] + e.Message);
|
||||
}
|
||||
|
||||
|
||||
@@ -2242,7 +2190,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||
|
||||
await _subjectVisitRepository.SaveChangesAsync();
|
||||
|
||||
//---转发影像失败。
|
||||
//---转发影像失败。
|
||||
return isSuccess ? ResponseOutput.Ok() : ResponseOutput.NotOk(_localizer["QCOperation_ForwardingFailed"]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user