From d096461fdadd2e2913ebcf3d055a3bba281a9bf5 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 9 May 2022 16:22:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=20=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E9=A2=86=E5=8F=96=E4=BA=BA=20=20=E5=92=8C=E9=87=8A=E6=94=BE?= =?UTF-8?q?=E9=A2=86=E5=8F=96=E4=BA=BA=EF=BC=8C=E4=BF=AE=E6=94=B9=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E8=AE=BF=E8=A7=86=E7=B4=A7=E6=80=A5=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/QC/QCOperationService.cs | 56 ++++++++++++------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index 1be69504d..4a72155d2 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -85,7 +85,7 @@ namespace IRaCIS.Core.Application.Image.QA [HttpPost("{trialId:guid}/{trialQCProcess:int}/{currentQCType:int}")] [TypeFilter(typeof(TrialResourceFilter))] [Authorize(Policy = "ImageQCPolicy")] - public async Task AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType) + public async Task AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType) { await VerifyIsCanQCAsync(null, qaQuestionCommand.SubjectVisitId); @@ -124,7 +124,7 @@ namespace IRaCIS.Core.Application.Image.QA else { - await _repository.UpdateFromDTOAsync(qaQuestionCommand, true); + await _repository.UpdateFromDTOAsync(qaQuestionCommand, true); return ResponseOutput.Ok(); @@ -375,7 +375,7 @@ namespace IRaCIS.Core.Application.Image.QA return ResponseOutput.NotOk("核查通过的数据不允许申请回退"); } - await _subjectVisitRepository.UpdatePartialFromQueryAsync( subjectVisitId, u => new SubjectVisit() { RequestBackState = RequestBackStateEnum.CRC_RequestBack },true); + await _subjectVisitRepository.UpdatePartialFromQueryAsync(subjectVisitId, u => new SubjectVisit() { RequestBackState = RequestBackStateEnum.CRC_RequestBack }, true); return ResponseOutput.Ok(); @@ -729,7 +729,7 @@ namespace IRaCIS.Core.Application.Image.QA var series = (await _repository.Where(t => t.Id == seriesId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException(); - + if (state == 1) { series.IsReading = false; @@ -794,7 +794,7 @@ namespace IRaCIS.Core.Application.Image.QA await VerifyIsCanQCAsync(null, updateModalityCommand.SubjectVisitId); - + DateTime time = DateTime.Now.AddMilliseconds(500); if (updateModalityCommand.Type == 1) { @@ -861,7 +861,7 @@ namespace IRaCIS.Core.Application.Image.QA //提交了 但是IQC同意的时候 是可以删除的 | 普通提交后也不能删除 if (await _subjectVisitRepository.AnyAsync(t => t.Id == subjectVisitId && t.SubmitState == SubmitStateEnum.Submitted && - (!t.QCChallengeList.Any(u => u.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload))) ) + (!t.QCChallengeList.Any(u => u.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload)))) { return ResponseOutput.NotOk("CRC Has Submited Image,can not delete"); } @@ -894,7 +894,7 @@ namespace IRaCIS.Core.Application.Image.QA - var success3 = await _dicomSeriesrepository.DeleteFromQueryAsync(t => t.StudyId == id,true); + var success3 = await _dicomSeriesrepository.DeleteFromQueryAsync(t => t.StudyId == id, true); var success4 = await _repository.BatchDeleteAsync(t => t.StudyId == id); //删除 物理文件 @@ -946,6 +946,9 @@ namespace IRaCIS.Core.Application.Image.QA { var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException(); + await VerifyIsCanQCAsync(dbSubjectVisit); + + dbSubjectVisit.IsTake = true; dbSubjectVisit.CurrentActionUserId = _userInfo.Id; @@ -970,7 +973,7 @@ namespace IRaCIS.Core.Application.Image.QA public async Task ObtainOrCancelQCTask(Guid trialId, Guid subjectVisitId, bool obtaionOrCancel) { - + var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException(); @@ -982,11 +985,11 @@ namespace IRaCIS.Core.Application.Image.QA if (obtaionOrCancel) { - if (await _subjectVisitRepository.AnyAsync(t => t.CurrentActionUserId != null && t.IsTake && t.Id == subjectVisitId)) + if (dbSubjectVisit.CurrentActionUserId != null && dbSubjectVisit.IsTake ) { //throw new BusinessValidationFailedException("当前访视已被领取,不允许领取"); - return ResponseOutput.NotOk("当前访视已被领取,不允许领取",ApiResponseCodeEnum.NeedTips); + return ResponseOutput.NotOk("当前访视已被领取,不允许领取", ApiResponseCodeEnum.NeedTips); } @@ -1003,7 +1006,6 @@ namespace IRaCIS.Core.Application.Image.QA // )) //{ - // return ResponseOutput.NotOk("您已经领取了其他受试者,完成后才允许领取新的受试者"); //} @@ -1074,6 +1076,11 @@ namespace IRaCIS.Core.Application.Image.QA } else { + if (dbSubjectVisit!.CurrentActionUserId != _userInfo.Id) + { + ResponseOutput.NotOk("您不是该质控任务当前领取人,没有操作权限!", ApiResponseCodeEnum.NeedTips); + } + if (trialConfig.QCProcessEnum == TrialQCProcess.NotAudit) { @@ -1108,7 +1115,7 @@ namespace IRaCIS.Core.Application.Image.QA else { - return ResponseOutput.NotOk("项目配置为复审,不满足提交状态:已提交 或者 审核状态:InPrimaryQC/InSecondaryQC, 不允许释放"); + return ResponseOutput.NotOk("项目配置为双审,不满足提交状态:已提交 或者 审核状态:InPrimaryQC|InSecondaryQC, 不允许释放"); } } @@ -1135,7 +1142,7 @@ namespace IRaCIS.Core.Application.Image.QA { var sv = dbSubjectVisitList[0]; - var nameList = await _subjectVisitRepository.Where(t => t.SubjectId == sv.SubjectId && t.SubmitState != SubmitStateEnum.Submitted && t.VisitNum < sv.VisitNum).Select(t => t.VisitName).ToListAsync() ?? new List(); + var nameList = await _subjectVisitRepository.Where(t => t.SubjectId == sv.SubjectId && t.SubmitState != SubmitStateEnum.Submitted && t.VisitNum < sv.VisitNum && t.IsLostVisit ==false).Select(t => t.VisitName).ToListAsync() ?? new List(); if (sv.PDState == PDStateEnum.PDProgress) { @@ -1228,6 +1235,17 @@ namespace IRaCIS.Core.Application.Image.QA if (trialConfig.IsUrgent || dbSubjectVisit.Subject.IsUrgent || (dbSubjectVisit.PDState == PDStateEnum.PDProgress && !dbSubjectVisit.IsBaseLine) || (dbSubjectVisit.IsEnrollmentConfirm && dbSubjectVisit.IsBaseLine)) { 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; + }); + } @@ -1755,15 +1773,15 @@ namespace IRaCIS.Core.Application.Image.QA { bool isSuccess = false; - + foreach (var subjectVisitId in subjectVisitIdList) { var info = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); - - + + var targetPath = "/IMPORT-IMAGES/" + info.TrialCode + "_" + info.SubjectCode + "_" + info.VisitName; var path = _dicomFileStoreHelper.GetSubjectVisitPath(info.TrialId, info.SiteId, info.SubjectId, info.SubjectVisitId); @@ -1826,14 +1844,14 @@ namespace IRaCIS.Core.Application.Image.QA u => new SubjectVisit() { ForwardState = ForwardStateEnum.Forwarded, ForwardUserId = _userInfo.Id, ForwardTime = DateTime.Now }); isSuccess = true; - + } catch (Exception e) { await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.Id == subjectVisitId, u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed }); - + return ResponseOutput.NotOk("转发失败 " + e.Message); } @@ -1841,7 +1859,7 @@ namespace IRaCIS.Core.Application.Image.QA } - + await _subjectVisitRepository.SaveChangesAsync();