增加 替换领取人 和释放领取人,修改提交访视紧急状态修改

Uat_Study
hang 2022-05-09 16:22:56 +08:00
parent 4f69b6067a
commit d096461fda
1 changed files with 37 additions and 19 deletions

View File

@ -85,7 +85,7 @@ namespace IRaCIS.Core.Application.Image.QA
[HttpPost("{trialId:guid}/{trialQCProcess:int}/{currentQCType:int}")] [HttpPost("{trialId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
[Authorize(Policy = "ImageQCPolicy")] [Authorize(Policy = "ImageQCPolicy")]
public async Task<IResponseOutput> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType) public async Task<IResponseOutput> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
{ {
await VerifyIsCanQCAsync(null, qaQuestionCommand.SubjectVisitId); await VerifyIsCanQCAsync(null, qaQuestionCommand.SubjectVisitId);
@ -124,7 +124,7 @@ namespace IRaCIS.Core.Application.Image.QA
else else
{ {
await _repository.UpdateFromDTOAsync<QCChallenge, QCChallengeCommand>(qaQuestionCommand, true); await _repository.UpdateFromDTOAsync<QCChallenge, QCChallengeCommand>(qaQuestionCommand, true);
return ResponseOutput.Ok(); return ResponseOutput.Ok();
@ -375,7 +375,7 @@ namespace IRaCIS.Core.Application.Image.QA
return ResponseOutput.NotOk("核查通过的数据不允许申请回退"); 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(); return ResponseOutput.Ok();
@ -729,7 +729,7 @@ namespace IRaCIS.Core.Application.Image.QA
var series = (await _repository.Where<DicomSeries>(t => t.Id == seriesId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException(); var series = (await _repository.Where<DicomSeries>(t => t.Id == seriesId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
if (state == 1) if (state == 1)
{ {
series.IsReading = false; series.IsReading = false;
@ -794,7 +794,7 @@ namespace IRaCIS.Core.Application.Image.QA
await VerifyIsCanQCAsync(null, updateModalityCommand.SubjectVisitId); await VerifyIsCanQCAsync(null, updateModalityCommand.SubjectVisitId);
DateTime time = DateTime.Now.AddMilliseconds(500); DateTime time = DateTime.Now.AddMilliseconds(500);
if (updateModalityCommand.Type == 1) if (updateModalityCommand.Type == 1)
{ {
@ -861,7 +861,7 @@ namespace IRaCIS.Core.Application.Image.QA
//提交了 但是IQC同意的时候 是可以删除的 | 普通提交后也不能删除 //提交了 但是IQC同意的时候 是可以删除的 | 普通提交后也不能删除
if (await _subjectVisitRepository.AnyAsync(t => t.Id == subjectVisitId && t.SubmitState == SubmitStateEnum.Submitted && 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 Imagecan not delete"); return ResponseOutput.NotOk("CRC Has Submited Imagecan 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<StudyMonitor>(t => t.StudyId == id); var success4 = await _repository.BatchDeleteAsync<StudyMonitor>(t => t.StudyId == id);
//删除 物理文件 //删除 物理文件
@ -946,6 +946,9 @@ namespace IRaCIS.Core.Application.Image.QA
{ {
var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException(); var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
await VerifyIsCanQCAsync(dbSubjectVisit);
dbSubjectVisit.IsTake = true; dbSubjectVisit.IsTake = true;
dbSubjectVisit.CurrentActionUserId = _userInfo.Id; dbSubjectVisit.CurrentActionUserId = _userInfo.Id;
@ -970,7 +973,7 @@ namespace IRaCIS.Core.Application.Image.QA
public async Task<IResponseOutput> ObtainOrCancelQCTask(Guid trialId, Guid subjectVisitId, bool obtaionOrCancel) public async Task<IResponseOutput> ObtainOrCancelQCTask(Guid trialId, Guid subjectVisitId, bool obtaionOrCancel)
{ {
var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException(); var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
@ -982,11 +985,11 @@ namespace IRaCIS.Core.Application.Image.QA
if (obtaionOrCancel) if (obtaionOrCancel)
{ {
if (await _subjectVisitRepository.AnyAsync(t => t.CurrentActionUserId != null && t.IsTake && t.Id == subjectVisitId)) if (dbSubjectVisit.CurrentActionUserId != null && dbSubjectVisit.IsTake )
{ {
//throw new BusinessValidationFailedException("当前访视已被领取,不允许领取"); //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("您已经领取了其他受试者,完成后才允许领取新的受试者"); // return ResponseOutput.NotOk("您已经领取了其他受试者,完成后才允许领取新的受试者");
//} //}
@ -1074,6 +1076,11 @@ namespace IRaCIS.Core.Application.Image.QA
} }
else else
{ {
if (dbSubjectVisit!.CurrentActionUserId != _userInfo.Id)
{
ResponseOutput.NotOk("您不是该质控任务当前领取人,没有操作权限!", ApiResponseCodeEnum.NeedTips);
}
if (trialConfig.QCProcessEnum == TrialQCProcess.NotAudit) if (trialConfig.QCProcessEnum == TrialQCProcess.NotAudit)
{ {
@ -1108,7 +1115,7 @@ namespace IRaCIS.Core.Application.Image.QA
else 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 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<string>(); 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<string>();
if (sv.PDState == PDStateEnum.PDProgress) 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)) if (trialConfig.IsUrgent || dbSubjectVisit.Subject.IsUrgent || (dbSubjectVisit.PDState == PDStateEnum.PDProgress && !dbSubjectVisit.IsBaseLine) || (dbSubjectVisit.IsEnrollmentConfirm && dbSubjectVisit.IsBaseLine))
{ {
dbSubjectVisit.IsUrgent = true; 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; bool isSuccess = false;
foreach (var subjectVisitId in subjectVisitIdList) foreach (var subjectVisitId in subjectVisitIdList)
{ {
var info = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).ProjectTo<DicomTrialSiteSubjectInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); var info = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).ProjectTo<DicomTrialSiteSubjectInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
var targetPath = "/IMPORT-IMAGES/" + info.TrialCode + "_" + info.SubjectCode + "_" + info.VisitName; var targetPath = "/IMPORT-IMAGES/" + info.TrialCode + "_" + info.SubjectCode + "_" + info.VisitName;
var path = _dicomFileStoreHelper.GetSubjectVisitPath(info.TrialId, info.SiteId, info.SubjectId, info.SubjectVisitId); 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 }); u => new SubjectVisit() { ForwardState = ForwardStateEnum.Forwarded, ForwardUserId = _userInfo.Id, ForwardTime = DateTime.Now });
isSuccess = true; isSuccess = true;
} }
catch (Exception e) catch (Exception e)
{ {
await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.Id == subjectVisitId, await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.Id == subjectVisitId,
u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed }); u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed });
return ResponseOutput.NotOk("转发失败 " + e.Message); return ResponseOutput.NotOk("转发失败 " + e.Message);
} }
@ -1841,7 +1859,7 @@ namespace IRaCIS.Core.Application.Image.QA
} }
await _subjectVisitRepository.SaveChangesAsync(); await _subjectVisitRepository.SaveChangesAsync();