From 0bd2a100913374660ef2ace898ba80a7d7a0b65d Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 12 Jun 2024 15:44:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=97=E8=AF=95=E8=80=85?= =?UTF-8?q?=E6=97=A0=E5=BA=8F=E9=98=85=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Allocation/VisitTaskService.cs | 39 ++++++++++++++++++- .../ImageAndDoc/DownloadAndUploadService.cs | 12 ++++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 44772b071..6a11e4044 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -22,6 +22,8 @@ using DocumentFormat.OpenXml.Bibliography; using Org.BouncyCastle.Crypto; using IRaCIS.Core.Domain.Share.Reading; using MassTransit; +using System.Reactive.Subjects; +using Subject = IRaCIS.Core.Domain.Models.Subject; namespace IRaCIS.Core.Application.Service.Allocation { @@ -1026,6 +1028,7 @@ namespace IRaCIS.Core.Application.Service.Allocation var trialReadingCriterionId = inQuery.TrialReadingCriterionId; var subjectCode = inQuery.SubjectCode; var trialId = inQuery.TrialId; + var subjectId = inQuery.SubjectId; var critrion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId); @@ -1146,10 +1149,44 @@ namespace IRaCIS.Core.Application.Service.Allocation CurrentPageData = result, }; } - else { + if (subjectId!=null && _visitTaskRepository.Any(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom)) + { + //找到 非一致性分析,未签名,状态正常的 并且任务名称是TimePoint的 任务 + var needDealTaskList = await _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id + && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskBlindName == "Timepoint" && t.ReadingCategory == ReadingCategory.Visit + && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze), true).ToListAsync(); + + if (needDealTaskList.Count > 0) + { + //已完成的访视任务数量(包含重阅的) + var haveFinishedTaskCount = await _visitTaskRepository.CountAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id + && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit); + + //已经处理过的任务名称的数量 + + var haveDealedTaskCount = await _visitTaskRepository.CountAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id + && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit && t.TaskBlindName != "Timepoint"); + + + + //随机赋值编号 比如要处理5个任务,实例化一个包含1-5的数组,每次随机取出一个 + List availableNumbers = Enumerable.Range(haveDealedTaskCount + haveFinishedTaskCount + 1, needDealTaskList.Count).ToList(); + Random rng = new Random(); + foreach (var visitTask in needDealTaskList) + { + int randomIndex = rng.Next(availableNumbers.Count); + + visitTask.TaskBlindName = $"Timepoint Ran {availableNumbers[randomIndex]}"; + + availableNumbers.RemoveAt(randomIndex); + } + await _visitTaskRepository.SaveChangesAsync(); + } + } + var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect) .WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId) .WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate)); diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 890a66eef..66d650f47 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -69,12 +69,18 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc if (needDealTaskList.Count>0) { //已完成的访视任务数量(包含重阅的) - var haveFinishedTaskCount = await _visitTaskRepository.CountAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false + var haveFinishedTaskCount = await _visitTaskRepository.CountAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit); - //随机赋值编号 比如要处理5个任务,实例化一个包含1-5的数组,每次随机取出一个 + //已经处理过的任务名称的数量 - List availableNumbers = Enumerable.Range(haveFinishedTaskCount + 1, needDealTaskList.Count).ToList(); + var haveDealedTaskCount = await _visitTaskRepository.CountAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.Id + && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit && t.TaskBlindName != "Timepoint"); + + + + //随机赋值编号 比如要处理5个任务,实例化一个包含1-5的数组,每次随机取出一个 + List availableNumbers = Enumerable.Range(haveDealedTaskCount+ haveFinishedTaskCount + 1, needDealTaskList.Count).ToList(); Random rng = new Random(); foreach (var visitTask in needDealTaskList) {