From c3631eee5180a290b24d71c77e9d683f5777d4b3 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 18 Jun 2025 18:06:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=89=E5=BA=8F=E9=98=85?= =?UTF-8?q?=E7=89=87=E7=94=9F=E6=88=90=E4=BB=BB=E5=8A=A1bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Allocation/VisitTaskHelpeService.cs | 490 +++++++++--------- 1 file changed, 244 insertions(+), 246 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs index 27dcea7f7..d327c712f 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs @@ -35,7 +35,7 @@ namespace IRaCIS.Core.Application.Service IRepository _trialReadingCriterionRepository, IRepository _trialClinicalDataSetRepository, IRepository _readingClinicalDataRepository, - IRepository _readingConsistentClinicalDataRepository, + IRepository _readingConsistentClinicalDataRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IWebHostEnvironment _hostEnvironment, IFusionCache _fusionCache) : BaseService, IVisitTaskHelpeService { @@ -47,16 +47,16 @@ namespace IRaCIS.Core.Application.Service /// /// - public async Task ExportTemplateAsync(ExportTemplateAsyncDto inDto) + public async Task ExportTemplateAsync(ExportTemplateAsyncDto inDto) { return await ExcelExportHelper.ExportTemplateAsync(new ExportTemplateServiceDto() { - Data=inDto.Data, - commonDocumentRepository= _commonDocumentRepository, - TemplateCode=inDto.TemplateCode, - ExportFileName=inDto.ExportFileName, - hostEnvironment=_hostEnvironment, - IsEnglish=_userInfo.IsEn_Us, + Data = inDto.Data, + commonDocumentRepository = _commonDocumentRepository, + TemplateCode = inDto.TemplateCode, + ExportFileName = inDto.ExportFileName, + hostEnvironment = _hostEnvironment, + IsEnglish = _userInfo.IsEn_Us, }); } @@ -757,248 +757,30 @@ namespace IRaCIS.Core.Application.Service if (trialReadingCriterionConfig.TaskAllocateObjEnum == TaskAllocateObj.Subject) { - var allocateSubjectArmList = _visitTaskRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.TrialId == trialId && t.DoctorUserId != null && t.ArmEnum != Arm.JudgeArm) - .Select(t => new { t.DoctorUserId, t.ArmEnum }).Distinct().ToList(); - //当前任务没有分配医生,初次分配 不处理 只生成任务,后续根据生成的任务 再进行分配 - if (allocateSubjectArmList.Count == 0) - { - } - else + if (trialReadingCriterionConfig.IsReadingTaskViewInOrder == ReadingOrder.InOrder) { - //并且配置了医生 - if (assignConfigList.Count > 0 && trialReadingCriterionConfig.IsFollowVisitAutoAssign) + #region 当前访视处理 + + //配置了医生 + if (assignConfigList.Count > 0) { + //之前有回退到影像上传的访视 那么当前访视一致性核查通过的时候,当前访视生成但是不分配出去(排除失访的) - #region 后续访视 未分配的进行再次分配,重置的或者失效的 需要重新生成新的任务 (PM 有序退回 或者PM 有序 申请重阅) + var beforeBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum < subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync(); - - if (trialReadingCriterionConfig.IsReadingTaskViewInOrder == ReadingOrder.InOrder) + //之前有回退的,那么当前访视任务生成但是不分配 + if (beforeBackVisitTask != null) { - //之前有回退到影像上传的访视 那么当前访视一致性核查通过的时候,当前访视生成但是不分配出去(排除失访的) - - var beforeBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum < subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync(); - - //之前有回退的,那么当前访视任务生成但是不分配 - if (beforeBackVisitTask != null) - { - //不用进行额外处理 - - //访视2 PM 回退 基线回退 访视2先一致性核查通过,生成访视2任务,但是不分配 - } - else - { - #region 当前访视根据配置规则分配出去 - - var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated; - - if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1) && task1 != null) - { - task1.TaskAllocationState = defaultState; - //分配给对应Arm的人 - task1.DoctorUserId = assignConfigList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm1)!.DoctorUserId; - task1.AllocateTime = DateTime.Now; - - task1.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget); - } - - if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2) && task2 != null) - { - task2.TaskAllocationState = defaultState; - task2.DoctorUserId = assignConfigList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm2)!.DoctorUserId; - task2.AllocateTime = DateTime.Now; - task2.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget); - } - - #endregion - } - - //后续最近的未一致性核查通过的访视任务 - var followBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync(); - - //大于当前访视 同时小于最近的未一致性核查通过的访视任务分配 或者生成 - - //存在退回访视1 又退回基线 这种情况 生成任务 考虑基线先一致性核查通过,但是访视1还未通过时 生成任务 - var followVisitTaskList = await _visitTaskRepository - .Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed && t.ReadingCategory == ReadingCategory.Visit && t.IsAnalysisCreate == false, true) - .WhereIf(followBackVisitTask != null, t => t.VisitTaskNum < followBackVisitTask!.VisitTaskNum) - .ToListAsync(); - - var followVisitGroup = followVisitTaskList.GroupBy(t => t.VisitTaskNum); - - //每个访视去判断 是分配还是生成(因为影响哪里有些是取消分配,有些是重阅重置需要重新生成) - foreach (var visitGroup in followVisitGroup) - { - - var visit = await _subjectVisitRepository.Where(x => x.Id == visitGroup.First().SourceSubjectVisitId).Select(x => new - { - x.PDState, - x.IsEnrollmentConfirm, - x.IsUrgent, - }).FirstNotNullAsync(); - - - TaskUrgentType? urgentType = null; - - if (subjectVisitInfo.PDState == PDStateEnum.PDProgress) - { - urgentType = TaskUrgentType.PDProgress; - } - else if (subjectVisitInfo.IsEnrollmentConfirm) - { - urgentType = TaskUrgentType.EnrollmentConfirm; - } - else if (subjectVisitInfo.IsUrgent) - { - urgentType = TaskUrgentType.VisitUrgent; - } - - bool isCanEdit = urgentType == TaskUrgentType.EnrollmentConfirm || urgentType == TaskUrgentType.PDProgress ? false : true; - - //如果后续访视已分配有效 就不用处理 - if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm1)) - { - //不做处理 - } - else - { - var arm1 = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.DoubleReadingArm1); - - if (arm1 != null) - { - - //有可能仅仅只分配了一个Subject 未分配 那么 - if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1) && task1 != null) - { - arm1.IsUrgent = visit.IsUrgent; - arm1.TaskUrgentType = urgentType; - arm1.IsCanEditUrgentState = isCanEdit; - arm1.TaskAllocationState = TaskAllocationState.Allocated; - arm1.AllocateTime = DateTime.Now; - arm1.DoctorUserId = task1.DoctorUserId; - arm1.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget); - } - - } - else - { - var latestTask = visitGroup.Where(t => t.ArmEnum == Arm.DoubleReadingArm1).OrderByDescending(t => t.CreateTime).First(); - - - - - var taskOne = await _visitTaskRepository.AddAsync(new VisitTask() - { - TrialId = trialId, - SubjectId = subjectVisit.SubjectId, - IsUrgent = visit.IsUrgent, - TaskUrgentType = urgentType, - IsCanEditUrgentState = isCanEdit, - ArmEnum = Arm.DoubleReadingArm1,//特殊 - Code = currentMaxCodeInt + 1, - TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), - ReadingCategory = ReadingCategory.Visit, - - SourceSubjectVisitId = latestTask.SourceSubjectVisitId, - VisitTaskNum = latestTask.VisitTaskNum, - TaskBlindName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(latestTask.VisitTaskNum), - TaskName = latestTask.TaskName, - - BlindSubjectCode = latestTask.BlindSubjectCode, - BlindTrialSiteCode = latestTask.BlindTrialSiteCode, - IsAnalysisCreate = latestTask.IsAnalysisCreate, - IsSelfAnalysis = latestTask.IsSelfAnalysis, - TaskAllocationState = TaskAllocationState.Allocated, - AllocateTime = DateTime.Now, - DoctorUserId = task1!.DoctorUserId, - SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget), - TrialReadingCriterionId = latestTask.TrialReadingCriterionId, - IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign, - IsClinicalDataSign = latestTask.IsClinicalDataSign - }); - - currentMaxCodeInt = currentMaxCodeInt + 1; - - _fusionCache.Set(CacheKeys.TrialStudyMaxCode(trialId), currentMaxCodeInt, TimeSpan.FromMinutes(30)); - } - - } - - //如果后续访视已分配有效 就不用处理 - if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm2)) - { - //不做处理 - } - else - { - var arm2 = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.DoubleReadingArm2); - if (arm2 != null) - { - //有可能仅仅只分配了一个Subject - if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2) && task2 != null) - { - arm2.IsUrgent = visit.IsUrgent; - arm2.TaskUrgentType = urgentType; - arm2.IsCanEditUrgentState = isCanEdit; - arm2.TaskAllocationState = TaskAllocationState.Allocated; - arm2.AllocateTime = DateTime.Now; - arm2.DoctorUserId = task2.DoctorUserId; - arm2.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget); - } - - } - else - { - var latestTask = visitGroup.Where(t => t.ArmEnum == Arm.DoubleReadingArm2).OrderByDescending(t => t.CreateTime).First(); - - var taskTwo = await _visitTaskRepository.AddAsync(new VisitTask() - { - TrialId = trialId, - SubjectId = subjectVisit.SubjectId, - IsUrgent = visit.IsUrgent, - TaskUrgentType = urgentType, - IsCanEditUrgentState = isCanEdit, - - //CheckPassedTime = subjectVisit.CheckPassedTime, - ArmEnum = Arm.DoubleReadingArm2,//特殊 - Code = currentMaxCodeInt + 1, - TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), - ReadingCategory = ReadingCategory.Visit, - - SourceSubjectVisitId = latestTask.SourceSubjectVisitId, - VisitTaskNum = latestTask.VisitTaskNum, - TaskBlindName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(latestTask.VisitTaskNum), - TaskName = latestTask.TaskName, - - BlindSubjectCode = latestTask.BlindSubjectCode, - BlindTrialSiteCode = latestTask.BlindTrialSiteCode, - IsAnalysisCreate = latestTask.IsAnalysisCreate, - IsSelfAnalysis = latestTask.IsSelfAnalysis, - TaskAllocationState = TaskAllocationState.Allocated, - - AllocateTime = DateTime.Now, - DoctorUserId = task2!.DoctorUserId, - SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget), - - TrialReadingCriterionId = latestTask.TrialReadingCriterionId, - IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign, - IsClinicalDataSign = latestTask.IsClinicalDataSign - }); - - currentMaxCodeInt = currentMaxCodeInt + 1; - - _fusionCache.Set(CacheKeys.TrialStudyMaxCode(trialId), currentMaxCodeInt, TimeSpan.FromMinutes(30)); - } - } - - } - + //不用进行额外处理 + //访视2 PM 回退 基线回退 访视2先一致性核查通过,生成访视2任务,但是不分配 } - //无序的时候 生成任务并分配出去 else { + #region 当前访视根据配置规则分配出去 + var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated; if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1) && task1 != null) @@ -1019,21 +801,237 @@ namespace IRaCIS.Core.Application.Service task2.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget); } + #endregion } - - - #endregion - } - else - //后续访视不自动分配,或者配置的医生数量不足,就不进行分配 + #endregion + + #region 后续访视处理 + + + + + //后续最近的未一致性核查通过的访视任务 + var followBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync(); + + //大于当前访视 同时小于最近的未一致性核查通过的访视任务分配 或者生成 + + //存在退回访视1 又退回基线 这种情况 生成任务 考虑基线先一致性核查通过,但是访视1还未通过时 生成任务 + var followVisitTaskList = await _visitTaskRepository + .Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed && t.ReadingCategory == ReadingCategory.Visit && t.IsAnalysisCreate == false, true) + .WhereIf(followBackVisitTask != null, t => t.VisitTaskNum < followBackVisitTask!.VisitTaskNum) + .ToListAsync(); + + var followVisitGroup = followVisitTaskList.GroupBy(t => t.VisitTaskNum); + + //每个访视去判断 是分配还是生成(因为影响哪里有些是取消分配,有些是重阅重置需要重新生成) + foreach (var visitGroup in followVisitGroup) { + var visit = await _subjectVisitRepository.Where(x => x.Id == visitGroup.First().SourceSubjectVisitId).Select(x => new + { + x.PDState, + x.IsEnrollmentConfirm, + x.IsUrgent, + }).FirstNotNullAsync(); + + + TaskUrgentType? urgentType = null; + + if (subjectVisitInfo.PDState == PDStateEnum.PDProgress) + { + urgentType = TaskUrgentType.PDProgress; + } + else if (subjectVisitInfo.IsEnrollmentConfirm) + { + urgentType = TaskUrgentType.EnrollmentConfirm; + } + else if (subjectVisitInfo.IsUrgent) + { + urgentType = TaskUrgentType.VisitUrgent; + } + + bool isCanEdit = urgentType == TaskUrgentType.EnrollmentConfirm || urgentType == TaskUrgentType.PDProgress ? false : true; + + //如果后续访视已分配有效 就不用处理 + if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm1)) + { + //不做处理 + } + else + { + var arm1 = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.DoubleReadingArm1); + + if (arm1 != null) + { + arm1.IsUrgent = visit.IsUrgent; + arm1.TaskUrgentType = urgentType; + arm1.IsCanEditUrgentState = isCanEdit; + + //有可能仅仅只分配了一个Subject 未分配 那么 + if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1) && task1 != null) + { + arm1.TaskAllocationState = TaskAllocationState.Allocated; + arm1.AllocateTime = DateTime.Now; + arm1.DoctorUserId = task1.DoctorUserId; + arm1.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget); + } + + } + else + { + var latestTask = visitGroup.Where(t => t.ArmEnum == Arm.DoubleReadingArm1).OrderByDescending(t => t.CreateTime).First(); + + var taskOne = await _visitTaskRepository.AddAsync(new VisitTask() + { + TrialId = trialId, + SubjectId = subjectVisit.SubjectId, + IsUrgent = visit.IsUrgent, + TaskUrgentType = urgentType, + IsCanEditUrgentState = isCanEdit, + ArmEnum = Arm.DoubleReadingArm1,//特殊 + Code = currentMaxCodeInt + 1, + TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), + ReadingCategory = ReadingCategory.Visit, + + SourceSubjectVisitId = latestTask.SourceSubjectVisitId, + VisitTaskNum = latestTask.VisitTaskNum, + TaskBlindName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(latestTask.VisitTaskNum), + TaskName = latestTask.TaskName, + + BlindSubjectCode = latestTask.BlindSubjectCode, + BlindTrialSiteCode = latestTask.BlindTrialSiteCode, + IsAnalysisCreate = latestTask.IsAnalysisCreate, + IsSelfAnalysis = latestTask.IsSelfAnalysis, + + TrialReadingCriterionId = latestTask.TrialReadingCriterionId, + IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign, + IsClinicalDataSign = latestTask.IsClinicalDataSign + }); + + if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1) && task1 != null) + { + taskOne.TaskAllocationState = TaskAllocationState.Allocated; + taskOne.AllocateTime = DateTime.Now; + taskOne. DoctorUserId = task1!.DoctorUserId; + taskOne. SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget); + } + + + currentMaxCodeInt = currentMaxCodeInt + 1; + + _fusionCache.Set(CacheKeys.TrialStudyMaxCode(trialId), currentMaxCodeInt, TimeSpan.FromMinutes(30)); + } + + } + + //如果后续访视已分配有效 就不用处理 + if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm2)) + { + //不做处理 + } + else + { + var arm2 = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.DoubleReadingArm2); + if (arm2 != null) + { + arm2.IsUrgent = visit.IsUrgent; + arm2.TaskUrgentType = urgentType; + arm2.IsCanEditUrgentState = isCanEdit; + + //有可能仅仅只分配了一个Subject + if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2) && task2 != null) + { + arm2.TaskAllocationState = TaskAllocationState.Allocated; + arm2.AllocateTime = DateTime.Now; + arm2.DoctorUserId = task2.DoctorUserId; + arm2.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget); + } + + } + else + { + var latestTask = visitGroup.Where(t => t.ArmEnum == Arm.DoubleReadingArm2).OrderByDescending(t => t.CreateTime).First(); + + var taskTwo = await _visitTaskRepository.AddAsync(new VisitTask() + { + TrialId = trialId, + SubjectId = subjectVisit.SubjectId, + IsUrgent = visit.IsUrgent, + TaskUrgentType = urgentType, + IsCanEditUrgentState = isCanEdit, + + //CheckPassedTime = subjectVisit.CheckPassedTime, + ArmEnum = Arm.DoubleReadingArm2,//特殊 + Code = currentMaxCodeInt + 1, + TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), + ReadingCategory = ReadingCategory.Visit, + + SourceSubjectVisitId = latestTask.SourceSubjectVisitId, + VisitTaskNum = latestTask.VisitTaskNum, + TaskBlindName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(latestTask.VisitTaskNum), + TaskName = latestTask.TaskName, + + BlindSubjectCode = latestTask.BlindSubjectCode, + BlindTrialSiteCode = latestTask.BlindTrialSiteCode, + IsAnalysisCreate = latestTask.IsAnalysisCreate, + IsSelfAnalysis = latestTask.IsSelfAnalysis, + + TrialReadingCriterionId = latestTask.TrialReadingCriterionId, + IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign, + IsClinicalDataSign = latestTask.IsClinicalDataSign + }); + + if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2) && task2 != null) + { + taskTwo.TaskAllocationState = TaskAllocationState.Allocated; + taskTwo.AllocateTime = DateTime.Now; + taskTwo.DoctorUserId = task2!.DoctorUserId; + taskTwo.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget); + } + + currentMaxCodeInt = currentMaxCodeInt + 1; + + _fusionCache.Set(CacheKeys.TrialStudyMaxCode(trialId), currentMaxCodeInt, TimeSpan.FromMinutes(30)); + } + } + } - } + #endregion + + } + else + { + //无序的时候 生成任务并分配出去 + if (assignConfigList.Count > 0 && trialReadingCriterionConfig.IsFollowVisitAutoAssign) + { + var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated; + + if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1) && task1 != null) + { + task1.TaskAllocationState = defaultState; + //分配给对应Arm的人 + task1.DoctorUserId = assignConfigList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm1)!.DoctorUserId; + task1.AllocateTime = DateTime.Now; + + task1.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget); + } + + if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2) && task2 != null) + { + task2.TaskAllocationState = defaultState; + task2.DoctorUserId = assignConfigList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm2)!.DoctorUserId; + task2.AllocateTime = DateTime.Now; + task2.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget); + } + } + + + } + }