diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs index 9fe456ef8..403ef9918 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs @@ -373,8 +373,10 @@ namespace IRaCIS.Core.Application.ViewModel public class GetOrderReadingIQueryableInDto { public Guid TrialId { get; set; } - - public Guid TrialReadingCriterionId { get; set; } + + public Guid? SubjectId { get; set; } + + public Guid TrialReadingCriterionId { get; set; } public string? SubjectCode { get; set; } = null; diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 8f491170d..f0a826372 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -1117,6 +1117,7 @@ namespace IRaCIS.Core.Application.Service.Allocation var visitQuery = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect /*&& x.TrialReadingCriterionId== inDto.TrialReadingCriterionId*/) + .WhereIf(inDto.SubjectId!=null,x=>x.SubjectId==inDto.SubjectId) //前序 不存在 未生成任务的访视 .WhereIf(critrion.IsAutoCreate == false, t => !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum)) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index c1901408d..b66fde0da 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -2784,6 +2784,39 @@ namespace IRaCIS.Application.Services } + else if (inDto.SubjectId != null && trialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom) + { + var subjectTaskList = (await _visitTaskService.GetOrderReadingIQueryable(new GetOrderReadingIQueryableInDto() + { + TrialId = inDto.TrialId, + SubjectId=inDto.SubjectId, + TrialReadingCriterionId = trialReadingCriterionId!.Value, + Page = new PageInput() + { + PageIndex = 1, + PageSize = 99999, + } + })).Item2; + + if (subjectTaskList.Count() == 0) + { + throw new BusinessValidationFailedException(_localizer["ReadingImage_TaskFinish"], ApiResponseCodeEnum.CloseCurrentWindows); + } + + var taskList = subjectTaskList.FirstOrDefault()!.UnReadCanReadTaskList; + var count = taskList.Count(); + Random random = new Random(); + var skipcount = 0; + if (count >= 2) + { + skipcount = random.Next(0, count - 1); + } + + var visitTaskId= taskList.Skip(skipcount).FirstOrDefault(); + + + + } else { var query = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.TrialReadingCriterionId == trialReadingCriterionId && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.DoctorUserId == _userInfo.Id @@ -2802,17 +2835,17 @@ namespace IRaCIS.Application.Services } task = await query .Select(x => new GetReadingTaskDto() - { - VisitTaskId = x.Id, - ArmEnum = x.ArmEnum, - TaskBlindName = x.TaskBlindName, - ReadingCategory = x.ReadingCategory, - VisistId = x.SourceSubjectVisitId != null ? x.SourceSubjectVisitId.Value : x.ReadModule == null ? default(Guid) : x.ReadModule.SubjectVisitId, - VisitNum = x.VisitTaskNum, - SubjectId = x.SubjectId, - SubjectCode = x.Subject.Code, - TrialReadingCriterionId = x.TrialReadingCriterionId, - }).Skip(skipcount).FirstOrDefaultAsync(); + { + VisitTaskId = x.Id, + ArmEnum = x.ArmEnum, + TaskBlindName = x.TaskBlindName, + ReadingCategory = x.ReadingCategory, + VisistId = x.SourceSubjectVisitId != null ? x.SourceSubjectVisitId.Value : x.ReadModule == null ? default(Guid) : x.ReadModule.SubjectVisitId, + VisitNum = x.VisitTaskNum, + SubjectId = x.SubjectId, + SubjectCode = x.Subject.Code, + TrialReadingCriterionId = x.TrialReadingCriterionId, + }).Skip(skipcount).FirstOrDefaultAsync(); }