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任务