修改领取逻辑
parent
89a96fd7d6
commit
963f093ce4
|
@ -327,7 +327,7 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
public async Task<IResponseOutput> UpdateModality(DataInspectionDto<UpdateModalityDto> opt)
|
public async Task<IResponseOutput> UpdateModality(DataInspectionDto<UpdateModalityDto> opt)
|
||||||
{
|
{
|
||||||
var fun =await _qCOperationService.UpdateModality(opt.OptCommand.id, opt.OptCommand.type, opt.OptCommand.modality, opt.OptCommand.bodyPart);
|
var fun = await _qCOperationService.UpdateModality(opt.OptCommand.id, (Guid)opt.AuditInfo.SubjectVisitId, opt.OptCommand.type, opt.OptCommand.modality, opt.OptCommand.bodyPart);
|
||||||
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun);
|
return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, null, fun);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -825,7 +825,8 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
return ResponseOutput.NotOk(data.ErrorMessage);
|
return ResponseOutput.NotOk(data.ErrorMessage);
|
||||||
}
|
}
|
||||||
var fun = _trialConfigService.TrialConfigSignatureConfirm;
|
var fun = _trialConfigService.TrialConfigSignatureConfirm;
|
||||||
return await _inspectionService.Enforcement(new SignConfirmDTO() {
|
return await _inspectionService.Enforcement(new SignConfirmDTO()
|
||||||
|
{
|
||||||
TrialId = opt.OptCommand.TrialId,
|
TrialId = opt.OptCommand.TrialId,
|
||||||
SignCode = opt.OptCommand.SignCode
|
SignCode = opt.OptCommand.SignCode
|
||||||
}, opt.AuditInfo, opt.SignInfo, fun);
|
}, opt.AuditInfo, opt.SignInfo, fun);
|
||||||
|
|
|
@ -1551,7 +1551,7 @@
|
||||||
<param name="state"></param>
|
<param name="state"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.UpdateModality(System.Guid,System.Int32,System.String,System.String)">
|
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.UpdateModality(System.Guid,System.Guid,System.Int32,System.String,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
type 1 :study 2: series 3:非dicom QC修改检查部位和 拍片类型
|
type 1 :study 2: series 3:非dicom QC修改检查部位和 拍片类型
|
||||||
</summary>
|
</summary>
|
||||||
|
|
|
@ -34,7 +34,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
Task<IResponseOutput> SetReuploadFinished(CRCReuploadFinishedCommand cRCReuploadFinishedCommand);
|
Task<IResponseOutput> SetReuploadFinished(CRCReuploadFinishedCommand cRCReuploadFinishedCommand);
|
||||||
Task<IResponseOutput> SetSeriesState(Guid subjectVisitId, Guid studyId, Guid seriesId, int state);
|
Task<IResponseOutput> SetSeriesState(Guid subjectVisitId, Guid studyId, Guid seriesId, int state);
|
||||||
Task<IResponseOutput> SetVisitUrgent(Guid trialId, Guid subjectVisitId, bool setOrCancel);
|
Task<IResponseOutput> SetVisitUrgent(Guid trialId, Guid subjectVisitId, bool setOrCancel);
|
||||||
Task<IResponseOutput> UpdateModality(Guid id, int type, [FromQuery] string modality, [FromQuery] string bodyPart);
|
Task<IResponseOutput> UpdateModality(Guid id, Guid subjectVisitId, int type, [FromQuery] string modality, [FromQuery] string bodyPart);
|
||||||
Task<IResponseOutput> UpdateSubjectAndSVInfo(UploadSubjectAndVisitCommand command);
|
Task<IResponseOutput> UpdateSubjectAndSVInfo(UploadSubjectAndVisitCommand command);
|
||||||
Task<IResponseOutput> UploadVisitCheckExcel(IFormFile file, Guid trialId);
|
Task<IResponseOutput> UploadVisitCheckExcel(IFormFile file, Guid trialId);
|
||||||
Task<IResponseOutput> VerifyCanQCPassedOrFailed(Guid subjectVisitId);
|
Task<IResponseOutput> VerifyCanQCPassedOrFailed(Guid subjectVisitId);
|
||||||
|
|
|
@ -70,6 +70,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
[TypeFilter(typeof(TrialResourceFilter))]
|
[TypeFilter(typeof(TrialResourceFilter))]
|
||||||
public async Task<IResponseOutput> VerifyQCCanAddChallenge(Guid subjectVisitId, [FromRoute] CurrentQC currentQCType)
|
public async Task<IResponseOutput> VerifyQCCanAddChallenge(Guid subjectVisitId, [FromRoute] CurrentQC currentQCType)
|
||||||
{
|
{
|
||||||
|
VerifyIsCanQC(null, subjectVisitId);
|
||||||
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == currentQCType))
|
if (!await _repository.AnyAsync<TrialQCQuestionAnswer>(t => t.SubjectVisitId == subjectVisitId && t.CurrentQCEnum == currentQCType))
|
||||||
{
|
{
|
||||||
return ResponseOutput.NotOk("请先核查图像,保存审核问题后,再发质疑。");
|
return ResponseOutput.NotOk("请先核查图像,保存审核问题后,再发质疑。");
|
||||||
|
@ -91,6 +92,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
[Authorize(Policy = "ImageQCPolicy")]
|
[Authorize(Policy = "ImageQCPolicy")]
|
||||||
public async Task<QCChallenge> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
|
public async Task<QCChallenge> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
|
||||||
{
|
{
|
||||||
|
VerifyIsCanQC(null, qaQuestionCommand.SubjectVisitId);
|
||||||
|
|
||||||
if (qaQuestionCommand.Id == null)
|
if (qaQuestionCommand.Id == null)
|
||||||
{
|
{
|
||||||
|
@ -288,17 +290,20 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
[Authorize(Policy = "ImageCheckPolicy")]
|
[Authorize(Policy = "ImageCheckPolicy")]
|
||||||
public async Task<IResponseOutput<CheckChallengeDialog>> AddCheckChallengeReply(CheckChallengeDialogCommand checkDialogCommand)
|
public async Task<IResponseOutput<CheckChallengeDialog>> AddCheckChallengeReply(CheckChallengeDialogCommand checkDialogCommand)
|
||||||
{
|
{
|
||||||
var qaReply = _mapper.Map<CheckChallengeDialog>(checkDialogCommand);
|
|
||||||
|
|
||||||
|
|
||||||
qaReply.UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt;
|
|
||||||
|
|
||||||
await _repository.AddAsync(qaReply);
|
|
||||||
|
|
||||||
//修改一致性核查 质疑状态
|
//修改一致性核查 质疑状态
|
||||||
var sv = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == checkDialogCommand.SubjectVisitId);
|
var sv = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == checkDialogCommand.SubjectVisitId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var qaReply = _mapper.Map<CheckChallengeDialog>(checkDialogCommand);
|
||||||
|
|
||||||
|
qaReply.UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt;
|
||||||
|
|
||||||
|
await _repository.AddAsync(qaReply);
|
||||||
|
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
|
||||||
{
|
{
|
||||||
sv.CheckChallengeState = CheckChanllengeTypeEnum.CRCWaitPMReply;
|
sv.CheckChallengeState = CheckChanllengeTypeEnum.CRCWaitPMReply;
|
||||||
|
@ -327,9 +332,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
public async Task<IResponseOutput> CloseCheckChallenge(CloseCheckChallengeDto input)
|
public async Task<IResponseOutput> CloseCheckChallenge(CloseCheckChallengeDto input)
|
||||||
{
|
{
|
||||||
|
|
||||||
var sv = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == input.subjectVisitId);
|
var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == input.subjectVisitId)).IfNullThrowException();
|
||||||
|
|
||||||
|
|
||||||
if (sv == null) return Null404NotFound(sv);
|
|
||||||
|
|
||||||
if (sv.RequestBackState == RequestBackStateEnum.PM_AgressBack)
|
if (sv.RequestBackState == RequestBackStateEnum.PM_AgressBack)
|
||||||
{
|
{
|
||||||
|
@ -689,12 +694,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
public async Task<IResponseOutput> AddOrUpdateQCQuestionAnswerList(QCQuestionAnswerCommand[] qcQuestionAnswerCommands, Guid trialId, Guid subjectVisitId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
|
public async Task<IResponseOutput> AddOrUpdateQCQuestionAnswerList(QCQuestionAnswerCommand[] qcQuestionAnswerCommands, Guid trialId, Guid subjectVisitId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
|
||||||
{
|
{
|
||||||
//验证是否能操作
|
//验证是否能操作
|
||||||
var verifyResult = await VerifyQCCanOpt(subjectVisitId);
|
VerifyIsCanQC(null, subjectVisitId);
|
||||||
|
|
||||||
if (!verifyResult.IsSuccess)
|
|
||||||
{
|
|
||||||
return verifyResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
//更新
|
//更新
|
||||||
if (qcQuestionAnswerCommands.Any(t => t.Id != null))
|
if (qcQuestionAnswerCommands.Any(t => t.Id != null))
|
||||||
|
@ -763,13 +763,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
[TypeFilter(typeof(TrialResourceFilter))]
|
[TypeFilter(typeof(TrialResourceFilter))]
|
||||||
public async Task<IResponseOutput> SetSeriesState(Guid subjectVisitId, Guid studyId, Guid seriesId, int state)
|
public async Task<IResponseOutput> SetSeriesState(Guid subjectVisitId, Guid studyId, Guid seriesId, int state)
|
||||||
{
|
{
|
||||||
//验证是否能操作
|
|
||||||
var verifyResult = await VerifyQCCanOpt(subjectVisitId);
|
|
||||||
|
|
||||||
if (!verifyResult.IsSuccess)
|
VerifyIsCanQC(null, subjectVisitId);
|
||||||
{
|
|
||||||
return verifyResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
var series = await _repository.Where<DicomSeries>(t => t.Id == seriesId, true).IgnoreQueryFilters().FirstOrDefaultAsync();
|
var series = await _repository.Where<DicomSeries>(t => t.Id == seriesId, true).IgnoreQueryFilters().FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
@ -838,9 +834,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <param name="modality"></param>
|
/// <param name="modality"></param>
|
||||||
/// <param name="bodyPart"></param>
|
/// <param name="bodyPart"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPut("{trialId:guid}/{id:guid}/{type:int}")]
|
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{id:guid}/{type:int}")]
|
||||||
[TypeFilter(typeof(TrialResourceFilter))]
|
[TypeFilter(typeof(TrialResourceFilter))]
|
||||||
public async Task<IResponseOutput> UpdateModality(Guid id, int type, [FromQuery] string modality, [FromQuery] string bodyPart)
|
public async Task<IResponseOutput> UpdateModality(Guid id, Guid subjectVisitId, int type, [FromQuery] string modality, [FromQuery] string bodyPart)
|
||||||
{
|
{
|
||||||
|
|
||||||
var DicomSeriesdata = await _repository.GetQueryable<DicomSeries>().Where(x => x.StudyId == id).ToListAsync();
|
var DicomSeriesdata = await _repository.GetQueryable<DicomSeries>().Where(x => x.StudyId == id).ToListAsync();
|
||||||
|
@ -934,6 +930,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
[HttpGet("{subjectVisitId:guid}")]
|
[HttpGet("{subjectVisitId:guid}")]
|
||||||
public async Task<IResponseOutput> VerifyCanQCPassedOrFailed(Guid subjectVisitId)
|
public async Task<IResponseOutput> VerifyCanQCPassedOrFailed(Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
|
VerifyIsCanQC(null, subjectVisitId);
|
||||||
|
|
||||||
if (await _repository.AnyAsync<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false))
|
if (await _repository.AnyAsync<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false))
|
||||||
{
|
{
|
||||||
|
@ -957,6 +954,8 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
public async Task<IResponseOutput> DeleteStudyList(Guid[] ids, Guid subjectVisitId, Guid trialId)
|
public async Task<IResponseOutput> DeleteStudyList(Guid[] ids, Guid subjectVisitId, Guid trialId)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
//提交了 但是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))))
|
||||||
|
@ -1078,6 +1077,23 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
public void VerifyIsCanQC(SubjectVisit? subjectVisit, Guid? sujectVisitId = null)
|
||||||
|
{
|
||||||
|
if (sujectVisitId != null)
|
||||||
|
{
|
||||||
|
subjectVisit = _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == sujectVisitId).Result.IfNullThrowException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (subjectVisit.PreliminaryAuditUserId != null)
|
||||||
|
{
|
||||||
|
throw new BusinessValidationFailedException("当前访视已审核通过,不允许操作");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (subjectVisit.CurrentActionUserId != _userInfo.Id)
|
||||||
|
{
|
||||||
|
throw new BusinessValidationFailedException("当前领取人已不是自己,不允许操作");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#region 临床数据签名 领取、 设置紧急、RequestToQC QC通过、不通过
|
#region 临床数据签名 领取、 设置紧急、RequestToQC QC通过、不通过
|
||||||
|
|
||||||
|
@ -1094,9 +1110,9 @@ 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);
|
var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
|
||||||
|
|
||||||
if (dbSubjectVisit == null) return Null404NotFound(dbSubjectVisit);
|
VerifyIsCanQC(dbSubjectVisit);
|
||||||
|
|
||||||
var trialConfig = await _trialRepository
|
var trialConfig = await _trialRepository
|
||||||
.Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification })
|
.Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification })
|
||||||
|
|
Loading…
Reference in New Issue