From b4594a4c47fab992c93aac7d95a53a038417f1c2 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 13 Sep 2023 14:08:22 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=B8=8B=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=B4=A8=E6=8E=A7=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/QC/DTO/QCListViewModel.cs | 15 +++ .../Service/QC/QCOperationService.cs | 103 ++++++++++++++++++ 2 files changed, 118 insertions(+) diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs index 10ec1a87b..ffef246b4 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs @@ -60,6 +60,21 @@ namespace IRaCIS.Core.Application.Contracts public Guid? HandleUserId { get; set; } } + public class GetNextIQCQualityInDto + { + [NotDefault] + public Guid TrialId { get; set; } + + public Guid SubjectId { get; set; } + } + + public class GetNextIQCQualityOutDto + { + public Guid? SubjectId { get; set; } + + public Guid? VisitId { get; set; } + } + public class CRCRequestToQCCommand { diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index d25b4a08c..85c7f3f49 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -878,6 +878,109 @@ namespace IRaCIS.Core.Application.Image.QA return ResponseOutput.Result(success); } + /// + /// 领取下一个质控任务 + /// + /// + /// + [HttpPost] + public async Task CollectNextIQCQuality(GetNextIQCQualityInDto inDto) + { + var nextIQCQuality = await this.GetNextIQCQuality(inDto); + + if (nextIQCQuality.VisitId != null) + { + var visit = await _subjectVisitRepository.Where(x => x.Id == nextIQCQuality.VisitId).FirstOrDefaultAsync(); + if (!visit.IsTake) + { + await ObtainOrCancelQCTask(inDto.TrialId, nextIQCQuality.VisitId.Value, true); + } + + } + + return nextIQCQuality; + + + } + + /// + /// 获取下一个质控任务 + /// + /// + /// + [HttpPost] + public async Task GetNextIQCQuality(GetNextIQCQualityInDto inDto) + { + var trialConfig = await _trialRepository + .Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification }) + .FirstOrDefaultAsync(t => t.TrialId == inDto.TrialId) + .IfNullThrowException(); + + SubjectVisit? subjectVisit = null; + List? visitList = null; + switch (trialConfig.QCProcessEnum) + { + case TrialQCProcess.NotAudit: + return new GetNextIQCQualityOutDto() { }; + break; + case TrialQCProcess.SingleAudit: + visitList = await _subjectVisitRepository.Where(x => x.SubmitState != SubmitStateEnum.None && x.TrialId == inDto.TrialId && (x.CurrentActionUserId == _userInfo.Id || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake))).Include(x => x.Subject).ToListAsync(); + + subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId).OrderBy(x => x.VisitNum).FirstOrDefault(); + if (subjectVisit != null) + { + return new GetNextIQCQualityOutDto() + { + SubjectId = subjectVisit.SubjectId, + VisitId = subjectVisit.Id + }; + } + + subjectVisit = visitList.OrderBy(x => x.Subject.Code).ThenBy(x => x.VisitNum).FirstOrDefault(); + if (subjectVisit != null) + { + return new GetNextIQCQualityOutDto() + { + SubjectId = subjectVisit.SubjectId, + VisitId = subjectVisit.Id + }; + } + else + { + return new GetNextIQCQualityOutDto() { }; + } + break; + case TrialQCProcess.DoubleAudit: + + visitList = await _subjectVisitRepository.Where(x => x.SubmitState != SubmitStateEnum.None && x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId != _userInfo.Id && (x.CurrentActionUserId == _userInfo.Id || (x.AuditState != AuditStateEnum.QCPassed))).Include(x => x.Subject).ToListAsync(); + if (subjectVisit != null) + { + return new GetNextIQCQualityOutDto() + { + SubjectId = subjectVisit.SubjectId, + VisitId = subjectVisit.Id + }; + } + + subjectVisit = visitList.OrderBy(x => x.Subject.Code).ThenBy(x => x.VisitNum).FirstOrDefault(); + if (subjectVisit != null) + { + return new GetNextIQCQualityOutDto() + { + SubjectId = subjectVisit.SubjectId, + VisitId = subjectVisit.Id + }; + } + else + { + return new GetNextIQCQualityOutDto() { }; + } + break; + default: + return new GetNextIQCQualityOutDto() { }; + + } + } /// /// 手动领取 或者取消 QC任务