diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index e86a619b6..e9cc5f089 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1955,6 +1955,11 @@ TaskAllocationRuleAddOrEdit 列表查询参数模型 + + + 阅片期 + + VisitTaskView 列表视图模型 @@ -2721,6 +2726,21 @@ 1 Mint、2 PACS + + + QC流程 0 不审,1 单审,2双审 + + + + + 影像一致性核查 + + + + + 流程是否确认 + + 是否有 入组评估确认 @@ -4227,6 +4247,12 @@ + + + 完成阅片修改状态 + + + 添加阅片期任务 @@ -4237,14 +4263,14 @@ 触发裁判任务(新) - + 触发裁判任务(老) - + diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/TaskAllocationRuleViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/TaskAllocationRuleViewModel.cs index b118b83c7..da8ee4f48 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/TaskAllocationRuleViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/TaskAllocationRuleViewModel.cs @@ -138,6 +138,11 @@ namespace IRaCIS.Core.Application.ViewModel //裁判的时候传递 public List JudgeVisitTaskIdList { get; set; } = new List(); + + /// + /// 阅片期 + /// + public List ReadingGenerataTaskList= new List(); } diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs index 195631a55..1264398e9 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs @@ -317,62 +317,61 @@ namespace IRaCIS.Core.Application.Service { if (trialConfig.ReadingType == ReadingMethod.Double) { - //每个访视 根据项目配置生成任务 双审生成两个 - var task1 = await _visitTaskRepository.AddAsync(new VisitTask() + foreach (var item in generateTaskCommand.ReadingGenerataTaskList) { - TrialId = trialId, - //SubjectId = subjectVisit.SubjectId, - //IsUrgent = subjectVisit.IsUrgent, - //TaskBlindName = subjectVisit.BlindName, - //TaskName = subjectVisit.VisitName, - ArmEnum = Arm.DoubleReadingArm1,//特殊 - Code = currentMaxCodeInt + 1, - //SourceSubjectVisitId = subjectVisit.Id, - TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), - ReadingCategory = ReadingCategory.ReadingPeriod - }); - - var task2 = await _visitTaskRepository.AddAsync(new VisitTask() - { - TrialId = trialId, - //SubjectId = subjectVisit.SubjectId, - //IsUrgent = subjectVisit.IsUrgent, - //TaskBlindName = subjectVisit.BlindName, - //TaskName = subjectVisit.VisitName, - ArmEnum = Arm.DoubleReadingArm2,//特殊 - Code = currentMaxCodeInt + 2, - //SourceSubjectVisitId = subjectVisit.Id, - TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 2, nameof(VisitTask)), - ReadingCategory = ReadingCategory.ReadingPeriod - }); - - currentMaxCodeInt = currentMaxCodeInt + 2; - - _provider.Set($"{trialId }_{ StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt + 2, TimeSpan.FromMinutes(30)); - - + //每个访视 根据项目配置生成任务 双审生成两个 + var task1 = await _visitTaskRepository.AddAsync(new VisitTask() + { + TrialId = trialId, + SubjectId = item.SubjectId, + IsUrgent = item.IsUrgent, + TaskName = item.ReadingName, + ArmEnum = Arm.DoubleReadingArm1,//特殊 + Code = currentMaxCodeInt + 1, + SouceReadModuleId=item.ReadModuleId, + TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), + ReadingCategory = ReadingCategory.ReadingPeriod + }); + var task2 = await _visitTaskRepository.AddAsync(new VisitTask() + { + TrialId = trialId, + SubjectId = item.SubjectId, + IsUrgent = item.IsUrgent, + TaskName = item.ReadingName, + ArmEnum = Arm.DoubleReadingArm2,//特殊 + Code = currentMaxCodeInt + 2, + SouceReadModuleId = item.ReadModuleId, + TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 2, nameof(VisitTask)), + ReadingCategory = ReadingCategory.ReadingPeriod + }); + currentMaxCodeInt = currentMaxCodeInt + 2; + _provider.Set($"{trialId }_{ StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt + 2, TimeSpan.FromMinutes(30)); + } } else { - var singleTask = await _visitTaskRepository.AddAsync(new VisitTask() + foreach (var item in generateTaskCommand.ReadingGenerataTaskList) { - TrialId = trialId, - //SubjectId = subjectVisit.SubjectId, - //IsUrgent = subjectVisit.IsUrgent, - //TaskBlindName = subjectVisit.BlindName, - //TaskName = subjectVisit.VisitName, - ArmEnum = Arm.SingleReadingArm, //特殊 - Code = currentMaxCodeInt + 1, - //SourceSubjectVisitId = subjectVisit.Id, - TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), - ReadingCategory = ReadingCategory.ReadingPeriod - }); + var singleTask = await _visitTaskRepository.AddAsync(new VisitTask() + { + TrialId = trialId, + SubjectId = item.SubjectId, + IsUrgent = item.IsUrgent, + TaskName = item.ReadingName, + ArmEnum = Arm.SingleReadingArm, //特殊 + Code = currentMaxCodeInt + 1, + SouceReadModuleId = item.ReadModuleId, + TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), + ReadingCategory = ReadingCategory.ReadingPeriod + }); - singleTask.AllocateTime = DateTime.Now; + singleTask.AllocateTime = DateTime.Now; - currentMaxCodeInt = currentMaxCodeInt + 1; + currentMaxCodeInt = currentMaxCodeInt + 1; - _provider.Set($"{trialId }_{ StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt + 1, TimeSpan.FromMinutes(30)); + _provider.Set($"{trialId }_{ StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt + 1, TimeSpan.FromMinutes(30)); + } + } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs index cea9696f5..b9d1ab155 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs @@ -310,58 +310,122 @@ namespace IRaCIS.Application.Services ReadingTaskState = ReadingTaskState.HaveSigned }); var result = await _visitTaskRepository.SaveChangesAsync(); + // 触裁判任务 await this.TriggerJudgeQuestionNew(inDto.VisitTaskId); - + // 添加阅片期任务 + await this.AddReadingTask(inDto.VisitTaskId); + + // 完成阅片修改状态 + await this.FinishReadUpdateState(inDto.VisitTaskId); return ResponseOutput.Ok(result); } - - public async Task FinishReadUpdateState() + /// + /// 完成阅片修改状态 + /// + /// + private async Task FinishReadUpdateState(Guid visitTaskId) { - - } + var taskInfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstOrDefaultAsync(); + if (!await _visitTaskRepository.AnyAsync(x => x.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && x.SouceReadModuleId == taskInfo.SouceReadModuleId && x.ReadingTaskState != ReadingTaskState.HaveSigned)) + { + + if (taskInfo.SouceReadModuleId != null) + { + await _readModuleRepository.UpdatePartialFromQueryAsync(taskInfo.SouceReadModuleId.Value, x => new ReadModule + { + ReadingStatus = ReadingStatusEnum.ReadCompleted + }); + } + else if (taskInfo.SourceSubjectVisitId != null) + { + await _subjectVisitRepository.UpdatePartialFromQueryAsync(taskInfo.SourceSubjectVisitId.Value, x => new SubjectVisit + { + ReadingStatus = ReadingStatusEnum.ReadCompleted + }); + } + + await _subjectVisitRepository.SaveChangesAsync(); + } + } /// /// 添加阅片期任务 /// /// - private async Task AddReadingTask(Guid VisitTaskId) + private async Task AddReadingTask(Guid visitTaskId) { // ****** 先生成阅片期 阅片期任务阅片完成之后生成肿瘤学的 如果没有阅片期 直接生成肿瘤学 *********//// - - - var taskInfo = await _visitTaskRepository.Where(x => x.Id == VisitTaskId).FirstOrDefaultAsync(); - - // 任务类型 - switch (taskInfo.ReadingCategory) + #region 建立关系 + Dictionary typeChange = new Dictionary(); + typeChange.Add(ModuleTypeEnum.InPlanSubjectVisit, ReadingCategory.Visit); + typeChange.Add(ModuleTypeEnum.OutPlanSubjectVisit, ReadingCategory.Visit); + typeChange.Add(ModuleTypeEnum.Read, ReadingCategory.ReadingPeriod); + typeChange.Add(ModuleTypeEnum.Global, ReadingCategory.Global); + typeChange.Add(ModuleTypeEnum.Referee, ReadingCategory.Judge); + typeChange.Add(ModuleTypeEnum.Oncology, ReadingCategory.Oncology); + #endregion + var taskInfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstOrDefaultAsync(); + List needReadList = new List(); + if (!await _visitTaskRepository.AnyAsync(x => x.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId&&x.SouceReadModuleId== taskInfo.SouceReadModuleId && x.ReadingTaskState != ReadingTaskState.HaveSigned)) { - case ReadingCategory.Visit: - //if (!await _visitTaskRepository.AnyAsync(x => x.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && x.ReadingTaskState != ReadingTaskState.HaveSigned)) - //{ - // var needReadList = await _readModuleRepository.Where(x => x.SubjectVisitId == taskInfo.SourceSubjectVisitId) - // .Select(x=> new ReadingGenerataTaskDTO { - // IsUrgent=x.IsUrgent, - // SubjectId=x.SubjectId, - // ReadingName= - // }).ToListAsync(); - // if() + // 任务类型 + switch (taskInfo.ReadingCategory) + { + case ReadingCategory.Visit: + needReadList = await _readModuleRepository.Where(x => x.SubjectVisitId == taskInfo.SourceSubjectVisitId) + .Select(x => new ReadingGenerataTaskDTO + { + IsUrgent = x.IsUrgent ?? false, + SubjectId = x.SubjectId, + ReadingName = x.ModuleName, + ReadModuleId = x.Id, + ReadingCategory = typeChange[x.ModuleType], + }).ToListAsync(); + if (needReadList.Any(x => x.ReadingCategory == ReadingCategory.ReadingPeriod)) + { + needReadList = needReadList.Where(x => x.ReadingCategory != ReadingCategory.Oncology).ToList(); + } + needReadList = needReadList.Where(x => _visitTaskRepository.Where(y => y.SouceReadModuleId == x.ReadModuleId).Count() == 0).ToList(); + await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() + { - - //} - break; + ReadingCategory = ReadingCategory.ReadingPeriod, + TrialId = taskInfo.TrialId, + ReadingGenerataTaskList = needReadList + }) ; + break; + // 肿瘤学 + case ReadingCategory.ReadingPeriod: + var subjectId = await _readModuleRepository.Where(x => x.Id == taskInfo.SouceReadModuleId).Select(x => x.SubjectVisitId).FirstOrDefaultAsync(); + needReadList=await _readModuleRepository.Where(x => x.SubjectVisitId == subjectId&&x.ModuleType==ModuleTypeEnum.Oncology) + .Select(x => new ReadingGenerataTaskDTO + { + IsUrgent = x.IsUrgent ?? false, + SubjectId = x.SubjectId, + ReadingName = x.ModuleName, + ReadModuleId = x.Id, + ReadingCategory = typeChange[x.ModuleType], + }).ToListAsync(); + needReadList = needReadList.Where(x => _visitTaskRepository.Where(y => y.SouceReadModuleId == x.ReadModuleId).Count() == 0).ToList(); + break; + } } + + + } /// /// 触发裁判任务(新) /// - /// + /// /// - private async Task TriggerJudgeQuestionNew(Guid VisitTaskId) + private async Task TriggerJudgeQuestionNew(Guid visitTaskId) { - var visitTask = await _visitTaskRepository.Where(x => x.Id == VisitTaskId).FirstOrDefaultAsync(); + var visitTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstOrDefaultAsync(); var visitTaskids = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned &&x.ReadingCategory!= ReadingCategory.Judge && x.SourceSubjectVisitId == visitTask.SourceSubjectVisitId && x.SouceReadModuleId == visitTask.SouceReadModuleId).Select(x => x.Id).ToListAsync(); if (visitTaskids.Count == 2) { @@ -423,11 +487,11 @@ namespace IRaCIS.Application.Services /// /// 触发裁判任务(老) /// - /// + /// /// - private async Task TriggerJudgeQuestionOld(Guid VisitTaskId) + private async Task TriggerJudgeQuestionOld(Guid visitTaskId) { - var visitTask = await _visitTaskRepository.Where(x => x.Id == VisitTaskId).FirstOrDefaultAsync(); + var visitTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstOrDefaultAsync(); var visitTaskids = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReadingCategory != ReadingCategory.Judge && x.SourceSubjectVisitId == visitTask.SourceSubjectVisitId && x.SouceReadModuleId == visitTask.SouceReadModuleId).Select(x => x.Id).ToListAsync(); if (visitTaskids.Count == 2) {