Compare commits

...

8 Commits

Author SHA1 Message Date
hang 1aad2c6a3f 复核稽查修改008
continuous-integration/drone/push Build is passing Details
2025-07-17 16:32:51 +08:00
hang 08ff24b14a 复核稽查修改007 2025-07-17 16:32:47 +08:00
hang 530d11c769 复核稽查修改006 2025-07-17 16:32:41 +08:00
hang 24135801ac 复核稽查修改005 2025-07-17 16:32:37 +08:00
hang d225e26d95 复核稽查修改004 2025-07-17 16:32:33 +08:00
hang a0b14d5957 复核稽查修改003 2025-07-17 16:32:28 +08:00
hang f776d2e663 复核稽查修改002 2025-07-17 16:32:24 +08:00
hang 5099ad654e 复核稽查修改 2025-07-17 16:32:20 +08:00
5 changed files with 27 additions and 8 deletions

View File

@ -205,6 +205,8 @@ namespace IRaCIS.Core.Application.Contracts
public bool IsShowStudyName { get; set; } = false; public bool IsShowStudyName { get; set; } = false;
public bool IsQCQuestionConfirmed { get; set; }
} }

View File

@ -485,12 +485,17 @@ namespace IRaCIS.Core.Application.Image.QA
var sv = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).FirstNotNullAsync(); var sv = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).FirstNotNullAsync();
if (sv.AuditState == AuditStateEnum.QCPassed && inDto.CurrentQCEnum != CurrentQC.SecondReview) var trialConfirmTime = _trialRepository.Where(t => t.Id == sv.TrialId).Select(t => t.QCQuestionConfirmedTime).FirstOrDefault();
var secondReviewTime = inDto.SecondReviewTime != null ? (DateTime)inDto.SecondReviewTime : trialConfirmTime == null ? DateTime.Now : (DateTime)trialConfirmTime;
if ((sv.AuditState == AuditStateEnum.QCPassed && inDto.CurrentQCEnum != CurrentQC.SecondReview) || (inDto.CurrentQCEnum == CurrentQC.SecondReview && secondReviewTime.AddSeconds(1) < trialConfirmTime))
{ {
//现在之前历史质控的展示要从答案为主表取数据,添加和编辑按照之前方式 //之前质控完的,+二次复核完的,都要从答案表中取 二次复核完的还需要加时间
questionAnswerlist = await _trialQCQuestionAnswerRepository.Where(x => x.SubjectVisitId == inDto.SubjectVisitId && x.QCProcessEnum == inDto.QCProcessEnum && x.CurrentQCEnum == inDto.CurrentQCEnum) questionAnswerlist = await _trialQCQuestionAnswerRepository.Where(x => x.SubjectVisitId == inDto.SubjectVisitId && x.QCProcessEnum == inDto.QCProcessEnum && x.CurrentQCEnum == inDto.CurrentQCEnum)
.Where(t => inDto.CurrentQCEnum == CurrentQC.SecondReview ? t.SecondReviewTime >= secondReviewTime && t.SecondReviewTime <= secondReviewTime.AddSeconds(1) : true)
.Select(data => new QCQuestionAnswer() .Select(data => new QCQuestionAnswer()
{ {
AnswerId = data.Id, AnswerId = data.Id,
@ -509,8 +514,6 @@ namespace IRaCIS.Core.Application.Image.QA
else else
{ {
var secondReviewTime = inDto.SecondReviewTime != null ? (DateTime)inDto.SecondReviewTime : DateTime.Now;
#region 之前编辑和审核通过后展示都是通过这个接口 #region 之前编辑和审核通过后展示都是通过这个接口
questionAnswerlist = await (from data in _trialQCQuestionRepository.Where(x => x.TrialId == inDto.TrialId && x.IsEnable) questionAnswerlist = await (from data in _trialQCQuestionRepository.Where(x => x.TrialId == inDto.TrialId && x.IsEnable)

View File

@ -732,7 +732,7 @@ namespace IRaCIS.Core.Application.Image.QA
if (currentQCType == CurrentQC.SecondReview) if (currentQCType == CurrentQC.SecondReview)
{ {
//二次复核自动领取,如果有人先领取了,那么后续不能操作 //二次复核自动领取,如果有人先领取了,那么后续不能操作
await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.Id == subjectVisitId && t.CurrentActionUserId == null, u => new SubjectVisit() { CurrentActionUserId = _userInfo.UserRoleId }, true); await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.Id == subjectVisitId && t.CurrentActionUserId == null, u => new SubjectVisit() { CurrentActionUserId = _userInfo.UserRoleId, IsTake = true }, true);
} }
//验证是否能操作 //验证是否能操作
await VerifyIsCanQCAsync(null, subjectVisitId); await VerifyIsCanQCAsync(null, subjectVisitId);
@ -1189,6 +1189,8 @@ 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);
if (dbSubjectVisit.CurrentActionUserId == null && dbSubjectVisit.IsTake == false) if (dbSubjectVisit.CurrentActionUserId == null && dbSubjectVisit.IsTake == false)
{ {
@ -2109,6 +2111,9 @@ namespace IRaCIS.Core.Application.Image.QA
if (isSecondPass) if (isSecondPass)
{ {
sv.SecondReviewState = SecondReviewState.AuditPassed; sv.SecondReviewState = SecondReviewState.AuditPassed;
sv.IsTake = false;
sv.CurrentActionUserId = null;
sv.CurrentActionUserExpireTime = null;
} }
else else

View File

@ -874,10 +874,11 @@ namespace IRaCIS.Core.Application
if (trialConfirmTime != null) if (trialConfirmTime != null)
{ {
//删除复审中间临时数据 //删除复审中间临时数据
await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.SecondReviewState != SecondReviewState.AuditPassed && t.CurrentQCEnum == CurrentQC.SecondReview); await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.SecondReviewState == SecondReviewState.WaitAudit
&& t.CurrentQCEnum == CurrentQC.SecondReview && t.UpdateTime> trialConfirmTime);
//重复二次复核签名 //重复二次复核签名
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == signConfirmDTO.TrialId && t.AuditState == AuditStateEnum.QCPassed await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.TrialId == signConfirmDTO.TrialId && t.AuditState == AuditStateEnum.QCPassed
&& !t.TrialQCQuestionAnswerList.Any(t => t.SecondReviewTime == trialConfirmTime), u => new SubjectVisit() { SecondReviewState = SecondReviewState.WaitAudit }); && !t.TrialQCQuestionAnswerList.Any(t => t.SecondReviewTime == trialConfirmTime), u => new SubjectVisit() { SecondReviewState = SecondReviewState.WaitAudit });

View File

@ -2012,7 +2012,15 @@ namespace IRaCIS.Core.Infra.EFCore.Common
//待处理? //待处理?
case "qcoperation/qcpassedorfailed": case "qcoperation/qcpassedorfailed":
extraIdentification = "/" + (40 % (int)entity.AuditState).ToString(); if (entity.AuditState == AuditStateEnum.QCPassed && (entity.SecondReviewState == SecondReviewState.AuditPassed || entity.SecondReviewState == SecondReviewState.AuditFailed))
{
extraIdentification = "/SecondReviewFinished";
}
else
{
extraIdentification = "/" + (40 % (int)entity.AuditState).ToString();
}
break; break;