diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs
index 3b3505910..480f59973 100644
--- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs
+++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs
@@ -196,9 +196,6 @@ namespace IRaCIS.Core.Application.Image.QA
-
-
-
///
/// 删除QC质疑记录
///
@@ -311,11 +308,14 @@ namespace IRaCIS.Core.Application.Image.QA
var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == input.subjectVisitId)).IfNullThrowException();
- if (sv.RequestBackState == RequestBackStateEnum.PM_AgressBack)
+ if ( sv.RequestBackState == RequestBackStateEnum.CRC_RequestBack)
{
- ResponseOutput.NotOk("执行一致性核查的访视 不允许关闭质疑!");
+ ResponseOutput.NotOk("CRC申请回退状态时, 不允许关闭质疑!");
}
+
+
sv.CloseTheReason = input.CloseCheckChallenge;
+
sv.CheckChallengeState = CheckChanllengeTypeEnum.Closed;
await _checkChallengeDialogrepository.AddAsync(new CheckChallengeDialog()
{
@@ -353,7 +353,7 @@ namespace IRaCIS.Core.Application.Image.QA
if (sv.CheckChallengeState != CheckChanllengeTypeEnum.Closed && sv.AuditState == AuditStateEnum.QCPassed)
{
- ResponseOutput.NotOk("一致性核查质疑未关闭/审核状态不是通过,不允许设置一致性核查通过");
+ ResponseOutput.NotOk("一致性核查质疑未关闭|审核状态不是通过,不允许设置一致性核查通过");
}
sv.CheckState = CheckStateEnum.CVPassed;
@@ -378,7 +378,7 @@ namespace IRaCIS.Core.Application.Image.QA
[TypeFilter(typeof(TrialResourceFilter))]
public async Task CRCRequstCheckBack(Guid subjectVisitId)
{
- var sv = (await _subjectVisitRepository.FirstOrDefaultNoTrackingAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
+ var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
if (sv.CheckState == CheckStateEnum.CVPassed)
@@ -386,7 +386,7 @@ namespace IRaCIS.Core.Application.Image.QA
return ResponseOutput.NotOk("核查通过的数据不允许申请回退");
}
- var QCChallengeId = await _qcChallengeRepository.Where(x => x.SubjectVisitId == subjectVisitId).Select(x => x.Id).FirstOrDefaultAsync();
+ var QCChallengeId = await _qcChallengeRepository.Where(x => x.SubjectVisitId == subjectVisitId).Select(x => x.Id).FirstOrDefaultAsync();
await _checkChallengeDialogrepository.AddAsync(new CheckChallengeDialog()
{
@@ -394,14 +394,51 @@ namespace IRaCIS.Core.Application.Image.QA
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
TalkContent = "CRC 请求回退"
});
-
- await _subjectVisitRepository.UpdatePartialFromQueryAsync(subjectVisitId, u => new SubjectVisit() { RequestBackState = RequestBackStateEnum.CRC_RequestBack }, true);
+
+ if (sv.RequestBackState == RequestBackStateEnum.NotRequest || sv.RequestBackState == RequestBackStateEnum.PM_NotAgree)
+ {
+ sv.RequestBackState = RequestBackStateEnum.CRC_RequestBack;
+
+ await _subjectVisitRepository.SaveChangesAsync();
+ }
+ else
+ {
+ return ResponseOutput.NotOk("其他CRC已申请处理,请刷新页面");
+ }
+
+
return ResponseOutput.Ok();
}
+ [HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
+ public async Task RejectCheckBack(Guid subjectVisitId)
+ {
+ if (_userInfo.UserTypeEnumInt != (int)UserTypeEnum.ProjectManager)
+ {
+ return ResponseOutput.NotOk(" 只允许PM 操作!");
+ }
+
+ var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
+
+ if (sv.RequestBackState == RequestBackStateEnum.CRC_RequestBack)
+ {
+ sv.RequestBackState = RequestBackStateEnum.PM_NotAgree;
+
+ await _repository.AddAsync(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, TalkContent = "PM拒绝一致性核查回退", UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
+
+ await _subjectVisitRepository.SaveChangesAsync();
+
+ return ResponseOutput.Ok();
+ }
+ else
+ {
+ return ResponseOutput.NotOk(" 只允许PM 操作!");
+ }
+ }
+
///
/// 一致性核查 回退 对话记录不清除 只允许PM回退 [签名 不需要对]
///
@@ -949,9 +986,9 @@ namespace IRaCIS.Core.Application.Image.QA
#endregion
[HttpGet]
- public async Task IsQCCanOpt([FromQuery,Required]Guid subjectVisitId)
+ public async Task IsQCCanOpt([FromQuery, Required] Guid subjectVisitId)
{
- await VerifyIsCanQCAsync(null, subjectVisitId);
+ await VerifyIsCanQCAsync(null, subjectVisitId);
return ResponseOutput.Ok();
}
@@ -979,7 +1016,7 @@ namespace IRaCIS.Core.Application.Image.QA
{
var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
- if (dbSubjectVisit.CurrentActionUserId == null && dbSubjectVisit.IsTake==false)
+ if (dbSubjectVisit.CurrentActionUserId == null && dbSubjectVisit.IsTake == false)
{
return ResponseOutput.NotOk("当前访视的影像质控任务已被原领取人释放。您可以通过“领取”获得", ApiResponseCodeEnum.NeedTips);
@@ -1022,7 +1059,7 @@ namespace IRaCIS.Core.Application.Image.QA
if (obtaionOrCancel)
{
- if (dbSubjectVisit.CurrentActionUserId != null && dbSubjectVisit.IsTake )
+ if (dbSubjectVisit.CurrentActionUserId != null && dbSubjectVisit.IsTake)
{
//throw new BusinessValidationFailedException("当前访视已被领取,不允许领取");
@@ -1115,7 +1152,7 @@ namespace IRaCIS.Core.Application.Image.QA
{
if (dbSubjectVisit!.CurrentActionUserId != _userInfo.Id)
{
- return ResponseOutput.NotOk("您不是该质控任务当前领取人,没有操作权限!", ApiResponseCodeEnum.NeedTips);
+ return ResponseOutput.NotOk("您不是该质控任务当前领取人,没有操作权限!", ApiResponseCodeEnum.NeedTips);
}
@@ -1179,7 +1216,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 && t.IsLostVisit ==false).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)
{
@@ -1225,7 +1262,7 @@ namespace IRaCIS.Core.Application.Image.QA
return ResponseOutput.NotOk("有访视未上传任何Dicom/非Dicom数据 不允许提交");
}
-
+
foreach (var dbSubjectVisit in dbSubjectVisitList)
{
@@ -1287,7 +1324,7 @@ namespace IRaCIS.Core.Application.Image.QA
}
- if (dbSubjectVisit.SubmitState == SubmitStateEnum.ToSubmit )
+ if (dbSubjectVisit.SubmitState == SubmitStateEnum.ToSubmit)
{
dbSubjectVisit.SubmitState = SubmitStateEnum.Submitted;
dbSubjectVisit.SubmitTime = DateTime.Now;
diff --git a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs
index 4c0766c01..33eea113a 100644
--- a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs
+++ b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs
@@ -126,6 +126,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
dbSV.CheckPassedTime = DateTime.Now;
dbSV.CheckResult = "核对EDC数据,完全一致";
dbSV.ManualPassReason = "自动核查通过";
+ dbSV.RequestBackState = dbSV.RequestBackState== RequestBackStateEnum.CRC_RequestBack? RequestBackStateEnum.PM_NotAgree: RequestBackStateEnum.NotRequest;
dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId, TalkContent = dbSV.CheckResult, UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
}
else
diff --git a/IRaCIS.Core.Domain.Share/QC/RequestBackStateEnum.cs b/IRaCIS.Core.Domain.Share/QC/RequestBackStateEnum.cs
index 5f8d797b0..9ed468f75 100644
--- a/IRaCIS.Core.Domain.Share/QC/RequestBackStateEnum.cs
+++ b/IRaCIS.Core.Domain.Share/QC/RequestBackStateEnum.cs
@@ -14,7 +14,9 @@ namespace IRaCIS.Core.Domain.Share
CRC_RequestBack = 1,
//PM 已同意 CRC
- PM_AgressBack = 2
+ PM_AgressBack = 2,
+
+ PM_NotAgree=3,
}
}