QC自动领取问题修改
continuous-integration/drone/push Build is passing Details

Uat_IRC_Net8
hang 2025-07-29 15:56:34 +08:00
parent 6c103b577c
commit 8e2477c19d
1 changed files with 77 additions and 30 deletions

View File

@ -1241,19 +1241,60 @@ namespace IRaCIS.Core.Application.Image.QA
[HttpPost] [HttpPost]
public async Task<GetNextIQCQualityOutDto> CollectNextIQCQuality(GetNextIQCQualityInDto inDto) public async Task<GetNextIQCQualityOutDto> CollectNextIQCQuality(GetNextIQCQualityInDto inDto)
{ {
var nextIQCQuality = await this.GetNextIQCQuality(inDto);
if (nextIQCQuality.VisitId != null && nextIQCQuality.IsReceived == false) var trialConfig = await _trialRepository
.Select(t => new { TrialId = t.Id, t.IsIQCAutoNextTask, t.IsIQCAutoTaskDistinguishType })
.FirstOrDefaultAsync(t => t.TrialId == inDto.TrialId)
.IfNullThrowException();
var isDistinguishType = trialConfig.IsIQCAutoNextTask && trialConfig.IsIQCAutoTaskDistinguishType;
if (isDistinguishType == false)
{ {
var visit = await _subjectVisitRepository.Where(x => x.Id == nextIQCQuality.VisitId).FirstNotNullAsync(); //不区分任务类型,也要按照当前任务类型给,没找到,按照默认规则给任务 无质疑 普通质控任务
if (!visit.IsTake)
var nextIQCQuality = await this.GetNextIQCQuality(inDto, true);
//没找到
if (nextIQCQuality.VisitId == null)
{ {
await ObtainOrCancelQCTask(inDto.TrialId, nextIQCQuality.VisitId.Value, true); nextIQCQuality = await this.GetNextIQCQuality(inDto, false);
if (nextIQCQuality.VisitId != null && nextIQCQuality.IsReceived == false)
{
var visit = await _subjectVisitRepository.Where(x => x.Id == nextIQCQuality.VisitId).FirstNotNullAsync();
if (!visit.IsTake)
{
await ObtainOrCancelQCTask(inDto.TrialId, nextIQCQuality.VisitId.Value, true);
}
}
} }
return nextIQCQuality;
}
else
{
//区分任务类型,那么按照当前任务类型给,没找到就结束
var nextIQCQuality = await this.GetNextIQCQuality(inDto, true);
if (nextIQCQuality.VisitId != null && nextIQCQuality.IsReceived == false)
{
var visit = await _subjectVisitRepository.Where(x => x.Id == nextIQCQuality.VisitId).FirstNotNullAsync();
if (!visit.IsTake)
{
await ObtainOrCancelQCTask(inDto.TrialId, nextIQCQuality.VisitId.Value, true);
}
}
return nextIQCQuality;
} }
return nextIQCQuality;
} }
@ -1264,7 +1305,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<GetNextIQCQualityOutDto> GetNextIQCQuality(GetNextIQCQualityInDto inDto) public async Task<GetNextIQCQualityOutDto> GetNextIQCQuality(GetNextIQCQualityInDto inDto, bool isDistinguishType)
{ {
var trialConfig = await _trialRepository var trialConfig = await _trialRepository
.Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification, t.IsIQCAutoNextTask, t.IsIQCAutoTaskDistinguishType }) .Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification, t.IsIQCAutoNextTask, t.IsIQCAutoTaskDistinguishType })
@ -1273,16 +1314,18 @@ namespace IRaCIS.Core.Application.Image.QA
//当前任务类型 是复核还是普通任务 //当前任务类型 是复核还是普通任务
var isDistinguishType = trialConfig.IsIQCAutoNextTask && trialConfig.IsIQCAutoTaskDistinguishType;
//当前是否是复核任务,复核任务,那么下一个任务也是复核的任务 //当前是否是复核任务,复核任务,那么下一个任务也是复核的任务
var isSecondReview = _subjectVisitRepository.Any(t => t.Id == inDto.SubjectVisitId && t.SecondReviewState == SecondReviewState.AuditPassed); var isSecondReview = _subjectVisitRepository.Any(t => t.Id == inDto.SubjectVisitId && t.SecondReviewState == SecondReviewState.AuditPassed);
var ishaveQCChallenge = _subjectVisitRepository.Any(t => t.Id == inDto.SubjectVisitId && t.QCChallengeList.Any());
var currentActionList = await _subjectVisitRepository.Where(x => x.TrialId == inDto.TrialId && x.CurrentActionUserId == _userInfo.UserRoleId) var currentActionList = await _subjectVisitRepository.Where(x => x.TrialId == inDto.TrialId && x.CurrentActionUserId == _userInfo.UserRoleId)
.Where(t => t.Subject.Status != SubjectStatus.EndOfVisit) .Where(t => t.Subject.Status != SubjectStatus.EndOfVisit)
.WhereIf(isDistinguishType, t => isSecondReview == false ? t.SecondReviewState == SecondReviewState.None : t.SecondReviewState == SecondReviewState.WaitAudit) .WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None)
.OrderByDescending(x => x.IsUrgent) .WhereIf(isDistinguishType, t => ishaveQCChallenge == true ? t.QCChallengeList.Any() : !t.QCChallengeList.Any())
.ThenBy(x => x.Subject.Code).ThenBy(x => x.VisitNum).ToListAsync(); .Select(t => new { t.IsUrgent, SubjectCode = t.Subject.Code, t.SubjectId, t.Id, t.VisitNum, IshaveQCChallenge = t.QCChallengeList.Any(), t.SecondReviewState })
.OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync();
if (currentActionList.Count() > 0) if (currentActionList.Count() > 0)
{ {
@ -1295,27 +1338,26 @@ namespace IRaCIS.Core.Application.Image.QA
}; };
} }
SubjectVisit? subjectVisit = null;
List<SubjectVisit>? visitList = null;
switch (trialConfig.QCProcessEnum) switch (trialConfig.QCProcessEnum)
{ {
case TrialQCProcess.NotAudit: case TrialQCProcess.NotAudit:
return new GetNextIQCQualityOutDto() { }; return new GetNextIQCQualityOutDto() { };
break; break;
case TrialQCProcess.SingleAudit: case TrialQCProcess.SingleAudit:
visitList = await _subjectVisitRepository var visitList = await _subjectVisitRepository
.Where(t => t.Subject.Status != SubjectStatus.EndOfVisit) .Where(t => t.Subject.Status != SubjectStatus.EndOfVisit)
.WhereIf(isDistinguishType, t => isSecondReview == false ? t.SecondReviewState == SecondReviewState.None : t.SecondReviewState == SecondReviewState.WaitAudit) .WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None)
.Where(x => !x.SubjectVisitImageBackRecordList.Any(t => t.ImageBackState == ImageBackStateEnum.None)) .WhereIf(isDistinguishType, t => ishaveQCChallenge == true ? t.QCChallengeList.Any() : !t.QCChallengeList.Any())
.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.SecondReviewState == SecondReviewState.None .Where(x => !x.SubjectVisitImageBackRecordList.Any(t => t.ImageBackState == ImageBackStateEnum.None))
&& x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId != _userInfo.UserRoleId && (x.CurrentActionUserId == _userInfo.UserRoleId || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake))) .Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.SecondReviewState == SecondReviewState.None
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId) && x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId != _userInfo.UserRoleId && (x.CurrentActionUserId == _userInfo.UserRoleId || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake)))
.Include(x => x.Subject).ToListAsync(); .Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId)
.Select(t => new { t.IsUrgent, SubjectCode = t.Subject.Code, t.SubjectId, t.Id, t.VisitNum, IshaveQCChallenge = t.QCChallengeList.Any(), t.SecondReviewState })
.OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync();
subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId) var subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId).OrderBy(x => x.VisitNum).FirstOrDefault();
.OrderBy(x => x.VisitNum).FirstOrDefault();
if (subjectVisit != null) if (subjectVisit != null)
{ {
return new GetNextIQCQualityOutDto() return new GetNextIQCQualityOutDto()
@ -1325,7 +1367,7 @@ namespace IRaCIS.Core.Application.Image.QA
}; };
} }
subjectVisit = visitList.OrderBy(x => x.Subject.Code).ThenBy(x => x.VisitNum).FirstOrDefault(); subjectVisit = visitList.OrderBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).FirstOrDefault();
if (subjectVisit != null) if (subjectVisit != null)
{ {
return new GetNextIQCQualityOutDto() return new GetNextIQCQualityOutDto()
@ -1343,13 +1385,18 @@ namespace IRaCIS.Core.Application.Image.QA
visitList = await _subjectVisitRepository visitList = await _subjectVisitRepository
.Where(t => t.Subject.Status != SubjectStatus.EndOfVisit) .Where(t => t.Subject.Status != SubjectStatus.EndOfVisit)
.WhereIf(isDistinguishType, t => isSecondReview == false ? t.SecondReviewState == SecondReviewState.None : t.SecondReviewState == SecondReviewState.WaitAudit) .WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None)
.WhereIf(isDistinguishType, t => ishaveQCChallenge == true ? t.QCChallengeList.Any() : !t.QCChallengeList.Any())
.Where(x => !x.SubjectVisitImageBackRecordList.Any(t => t.ImageBackState == ImageBackStateEnum.None)) .Where(x => !x.SubjectVisitImageBackRecordList.Any(t => t.ImageBackState == ImageBackStateEnum.None))
.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId && .Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId &&
((x.CurrentActionUserId == _userInfo.UserRoleId) || (!x.IsTake && x.AuditState != AuditStateEnum.QCPassed && (x.PreliminaryAuditUserId != _userInfo.UserRoleId))) ((x.CurrentActionUserId == _userInfo.UserRoleId) || (!x.IsTake && x.AuditState != AuditStateEnum.QCPassed && (x.PreliminaryAuditUserId != _userInfo.UserRoleId)))
) )
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId) .Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId)
.Include(x => x.Subject).ToListAsync(); .Select(t => new { t.IsUrgent, SubjectCode = t.Subject.Code, t.SubjectId, t.Id, t.VisitNum, IshaveQCChallenge = t.QCChallengeList.Any(), t.SecondReviewState })
.OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync();
subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId).OrderBy(x => x.VisitNum).FirstOrDefault();
if (subjectVisit != null) if (subjectVisit != null)
{ {
return new GetNextIQCQualityOutDto() return new GetNextIQCQualityOutDto()
@ -1359,7 +1406,7 @@ namespace IRaCIS.Core.Application.Image.QA
}; };
} }
subjectVisit = visitList.OrderBy(x => x.Subject.Code).ThenBy(x => x.VisitNum).FirstOrDefault(); subjectVisit = visitList.OrderBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).FirstOrDefault();
if (subjectVisit != null) if (subjectVisit != null)
{ {
return new GetNextIQCQualityOutDto() return new GetNextIQCQualityOutDto()
@ -2320,7 +2367,7 @@ namespace IRaCIS.Core.Application.Image.QA
sv.AuditState = AuditStateEnum.ToAudit; sv.AuditState = AuditStateEnum.ToAudit;
sv.CurrentActionUserExpireTime =null; sv.CurrentActionUserExpireTime = null;
sv.CurrentActionUserId = null; sv.CurrentActionUserId = null;
sv.IsTake = false; sv.IsTake = false;