From dc6123509c60f2bdf85837ad5e4cd69ecb500561 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 30 Nov 2022 16:54:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingMedicalReviewService.cs | 281 ++++++++++-------- .../TrialSiteUser/DTO/TrialConfigDTO.cs | 123 +------- 2 files changed, 158 insertions(+), 246 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/MedicalAudit/ReadingMedicalReviewService.cs b/IRaCIS.Core.Application/Service/Reading/MedicalAudit/ReadingMedicalReviewService.cs index 8749a8744..852d50fd8 100644 --- a/IRaCIS.Core.Application/Service/Reading/MedicalAudit/ReadingMedicalReviewService.cs +++ b/IRaCIS.Core.Application/Service/Reading/MedicalAudit/ReadingMedicalReviewService.cs @@ -104,63 +104,179 @@ namespace IRaCIS.Core.Application.Service var result = await _readingMedicineQuestionAnswerRepository.SaveChangesAsync(); #region 取任务 - if (medicalReviewInfo.IsReadingTaskViewInOrder) - { - medicalReviewInfo.TaskList = await _visitTaskRepository - .WhereIf(taskInfo.ArmEnum == Arm.JudgeArm, x => x.ArmEnum == Arm.JudgeArm) - .WhereIf(taskInfo.ArmEnum != Arm.JudgeArm, x => x.ArmEnum != Arm.JudgeArm) - .Where(x => x.IsAnalysisCreate == taskInfo.IsAnalysisCreate) - .Where(x => x.TaskState == TaskState.Effect) - .Where(x => x.SubjectId == taskInfo.SubjectId - && x.ArmEnum == taskInfo.ArmEnum - && x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId - && x.DoctorUserId == taskInfo.DoctorUserId && - x.ReadingTaskState == ReadingTaskState.HaveSigned && - x.ReReadingApplyState != ReReadingApplyState.Agree - ).OrderBy(x => x.VisitTaskNum).Select(x => new TaskInfo() - { - TaskId = x.Id, - IsCurrentTask = x.Id == taskInfo.Id, - ReadingCategory = x.ReadingCategory, - TaskBlindName = x.TaskBlindName, - ArmEnum = x.ArmEnum, - TaskName = x.TaskName, - SouceReadModuleId = x.SouceReadModuleId, - SourceSubjectVisitId = x.SourceSubjectVisitId, - JudgeVisitTaskId = x.JudgeVisitTaskId, - JudgeResultArm = x.JudgeResultTask.ArmEnum, - SubjectId = x.SubjectId, + + // 先判断是否是肿瘤学任务 + if (taskInfo.ReadingCategory == ReadingCategory.Oncology) + { + var oncologyList = await _readingOncologyTaskInfoRepository.Where(x => x.OncologyTaskId == visitTaskfInfo.Id).ToListAsync(); + + var taskIds= oncologyList.Select(x=>x.VisitTaskId).ToList(); + + medicalReviewInfo.TaskList = await _visitTaskRepository.Where(x=> + taskIds.Contains(x.Id) + ).OrderBy(x => x.VisitTaskNum).Select(x => new TaskInfo() + { + TaskId = x.Id, + IsCurrentTask = x.Id == taskInfo.Id, + ReadingCategory = x.ReadingCategory, + TaskBlindName = x.TaskBlindName, + ArmEnum = x.ArmEnum, + TaskName = x.TaskName, + SouceReadModuleId = x.SouceReadModuleId, + SourceSubjectVisitId = x.SourceSubjectVisitId, + JudgeVisitTaskId = x.JudgeVisitTaskId, + JudgeResultArm = x.JudgeResultTask.ArmEnum, + SubjectId = x.SubjectId, + }).ToListAsync(); + + + medicalReviewInfo.TaskList.ForEach(x => + { + var oncologyInfo = oncologyList.Where(y => y.OncologyTaskId == x.TaskId).FirstOrDefault(); + if (oncologyInfo != null) + { + x.OncologyEvaluationResult = oncologyInfo.EvaluationResult; + x.OncologyEvaluationReason = oncologyInfo.EvaluationResult; + } + + }); + + } + else + { + if (medicalReviewInfo.IsReadingTaskViewInOrder) + { + medicalReviewInfo.TaskList = await _visitTaskRepository + .WhereIf(taskInfo.ArmEnum == Arm.JudgeArm, x => x.ArmEnum == Arm.JudgeArm) + .WhereIf(taskInfo.ArmEnum != Arm.JudgeArm, x => x.ArmEnum != Arm.JudgeArm) + .Where(x => x.IsAnalysisCreate == taskInfo.IsAnalysisCreate) + .Where(x => x.TaskState == TaskState.Effect) + .Where(x => x.SubjectId == taskInfo.SubjectId + && x.ArmEnum == taskInfo.ArmEnum + && x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId + + && x.DoctorUserId == taskInfo.DoctorUserId && + x.ReadingTaskState == ReadingTaskState.HaveSigned && + x.ReReadingApplyState != ReReadingApplyState.Agree + ).OrderBy(x => x.VisitTaskNum).Select(x => new TaskInfo() + { + TaskId = x.Id, + IsCurrentTask = x.Id == taskInfo.Id, + ReadingCategory = x.ReadingCategory, + TaskBlindName = x.TaskBlindName, + ArmEnum = x.ArmEnum, + TaskName = x.TaskName, + SouceReadModuleId = x.SouceReadModuleId, + SourceSubjectVisitId = x.SourceSubjectVisitId, + JudgeVisitTaskId = x.JudgeVisitTaskId, + JudgeResultArm = x.JudgeResultTask.ArmEnum, + SubjectId = x.SubjectId, // 这里先只查裁判任务 访视和全局任务到后面查询 JudgeQuestionAnswerInfoList = x.JudgeResultTask.ReadingTaskQuestionAnswerList.Where(y => y.ReadingQuestionTrial.IsJudgeQuestion).Select(y => new JudgeQuestionAnswerInfo() - { - VisitTaskId=y.VisitTaskId, - Answer = y.Answer, - QuestionName = y.ReadingQuestionTrial.QuestionName, - ShowOrder=y.ReadingQuestionTrial.ShowOrder, - DictionaryCode = y.ReadingQuestionTrial.DictionaryCode, - QuestionGenre = y.ReadingQuestionTrial.QuestionGenre, + { + VisitTaskId = y.VisitTaskId, + Answer = y.Answer, + QuestionName = y.ReadingQuestionTrial.QuestionName, + ShowOrder = y.ReadingQuestionTrial.ShowOrder, + DictionaryCode = y.ReadingQuestionTrial.DictionaryCode, + QuestionGenre = y.ReadingQuestionTrial.QuestionGenre, - }).OrderBy(x=>x.ShowOrder).ToList(), - }).ToListAsync(); + }).OrderBy(x => x.ShowOrder).ToList(), + }).ToListAsync(); + + + List otherTask = await _visitTaskRepository.Where(x => x.ArmEnum != Arm.JudgeArm && x.SubjectId == taskInfo.SubjectId + && x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId + && x.DoctorUserId != taskInfo.DoctorUserId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReReadingApplyState != ReReadingApplyState.Agree) + .Where(x => x.IsAnalysisCreate == taskInfo.IsAnalysisCreate) + .OrderBy(x => x.VisitTaskNum).Select(x => new TaskInfo() + { + TaskId = x.Id, + IsCurrentTask = x.Id == taskInfo.Id, + ReadingCategory = x.ReadingCategory, + TaskBlindName = x.TaskBlindName, + ArmEnum = x.ArmEnum, + TaskName = x.TaskName, + SouceReadModuleId = x.SouceReadModuleId, + SourceSubjectVisitId = x.SourceSubjectVisitId, + }).ToListAsync(); + + medicalReviewInfo.TaskList.ForEach(x => + { + x.OtherTaskId = otherTask.Where(y => y.SouceReadModuleId == x.SouceReadModuleId && y.SourceSubjectVisitId == x.SourceSubjectVisitId).Select(y => y.TaskId).FirstOrDefault(); + }); + } + else + { + medicalReviewInfo.TaskList = await _visitTaskRepository.Where(x => x.Id == taskInfo.Id).Select(x => new TaskInfo() + { + TaskId = x.Id, + IsCurrentTask = x.Id == taskInfo.Id, + ReadingCategory = x.ReadingCategory, + TaskBlindName = x.TaskBlindName, + ArmEnum = x.ArmEnum, + TaskName = x.TaskName, + SouceReadModuleId = x.SouceReadModuleId, + SourceSubjectVisitId = x.SourceSubjectVisitId, + SubjectId = x.SubjectId, + // 这里先只查裁判任务 访视和全局任务到后面查询 + JudgeQuestionAnswerInfoList = x.JudgeResultTask.ReadingTaskQuestionAnswerList.Where(y => y.ReadingQuestionTrial.IsJudgeQuestion).Select(y => new JudgeQuestionAnswerInfo() + { + VisitTaskId = y.VisitTaskId, + Answer = y.Answer, + QuestionName = y.ReadingQuestionTrial.QuestionName, + ShowOrder = y.ReadingQuestionTrial.ShowOrder, + DictionaryCode = y.ReadingQuestionTrial.DictionaryCode, + QuestionGenre = y.ReadingQuestionTrial.QuestionGenre, + + }).OrderBy(x => x.ShowOrder).ToList(), + }).ToListAsync(); + + + + + + List otherTask = await _visitTaskRepository.Where(x => x.ArmEnum != Arm.JudgeArm && x.SouceReadModuleId == taskInfo.SouceReadModuleId && x.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId + && x.DoctorUserId != taskInfo.DoctorUserId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReReadingApplyState != ReReadingApplyState.Agree + && x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId + ) + .Where(x => x.IsAnalysisCreate == taskInfo.IsAnalysisCreate) + .OrderBy(x => x.VisitTaskNum).Select(x => new TaskInfo() + { + TaskId = x.Id, + IsCurrentTask = x.Id == taskInfo.Id, + ReadingCategory = x.ReadingCategory, + TaskBlindName = x.TaskBlindName, + ArmEnum = x.ArmEnum, + TaskName = x.TaskName, + SouceReadModuleId = x.SouceReadModuleId, + SourceSubjectVisitId = x.SourceSubjectVisitId, + }).ToListAsync(); + + medicalReviewInfo.TaskList.ForEach(x => + { + x.OtherTaskId = otherTask.Where(y => y.SouceReadModuleId == x.SouceReadModuleId && y.SourceSubjectVisitId == x.SourceSubjectVisitId).Select(y => y.TaskId).FirstOrDefault(); + }); + } // 这里处理 访视和全局任务 以及肿瘤学 if (taskInfo.ArmEnum != Arm.JudgeArm) { var taskIds = medicalReviewInfo.TaskList.Select(x => x.TaskId).ToList(); - + // 找访视 - var visitTaskAnswer = await _readingTaskQuestionAnswerRepository.Where(x => taskIds.Contains(x.VisitTaskId)&&x.ReadingQuestionTrial.IsJudgeQuestion).Select(x => new JudgeQuestionAnswerInfo + var visitTaskAnswer = await _readingTaskQuestionAnswerRepository.Where(x => taskIds.Contains(x.VisitTaskId) && x.ReadingQuestionTrial.IsJudgeQuestion).Select(x => new JudgeQuestionAnswerInfo { - Answer = x.Answer, - VisitTaskId=x.VisitTaskId, + Answer = x.Answer, + VisitTaskId = x.VisitTaskId, DictionaryCode = x.ReadingQuestionTrial.DictionaryCode, ShowOrder = x.ReadingQuestionTrial.ShowOrder, QuestionGenre = x.ReadingQuestionTrial.QuestionGenre, QuestionName = x.ReadingQuestionTrial.QuestionName }).ToListAsync(); - visitTaskAnswer.AddRange(await _readingGlobalTaskInfoRepository.Where(x => taskIds.Contains(x.GlobalTaskId)&&x.GlobalAnswerType==GlobalAnswerType.Question && x.TrialReadingQuestion.IsJudgeQuestion).Select(x => new JudgeQuestionAnswerInfo + visitTaskAnswer.AddRange(await _readingGlobalTaskInfoRepository.Where(x => taskIds.Contains(x.GlobalTaskId) && x.GlobalAnswerType == GlobalAnswerType.Question && x.TrialReadingQuestion.IsJudgeQuestion).Select(x => new JudgeQuestionAnswerInfo { Answer = x.Answer, VisitTaskId = x.GlobalTaskId, @@ -170,97 +286,14 @@ namespace IRaCIS.Core.Application.Service QuestionName = x.TrialReadingQuestion.QuestionName }).ToListAsync()); - // 肿瘤学没有问题 - var oncologyInfoList= await _readingOncologyTaskInfoRepository.Where(x => taskIds.Contains(x.OncologyTaskId)).ToListAsync(); - - - - medicalReviewInfo.TaskList.ForEach(x => { - var oncologyInfo = oncologyInfoList.Where(y => y.OncologyTaskId == x.TaskId).FirstOrDefault(); - if (oncologyInfo != null) - { - x.OncologyEvaluationResult = oncologyInfo.EvaluationResult; - x.OncologyEvaluationReason = oncologyInfo.EvaluationResult; - } x.JudgeQuestionAnswerInfoList = visitTaskAnswer.Where(y => y.VisitTaskId == x.TaskId).OrderBy(y => y.ShowOrder).ToList(); }); } - - - List otherTask = await _visitTaskRepository.Where(x => x.ArmEnum != Arm.JudgeArm && x.SubjectId == taskInfo.SubjectId - && x.DoctorUserId != taskInfo.DoctorUserId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReReadingApplyState != ReReadingApplyState.Agree) - .Where(x => x.IsAnalysisCreate == taskInfo.IsAnalysisCreate) - .OrderBy(x => x.VisitTaskNum).Select(x => new TaskInfo() - { - TaskId = x.Id, - IsCurrentTask = x.Id == taskInfo.Id, - ReadingCategory = x.ReadingCategory, - TaskBlindName = x.TaskBlindName, - ArmEnum = x.ArmEnum, - TaskName = x.TaskName, - SouceReadModuleId = x.SouceReadModuleId, - SourceSubjectVisitId = x.SourceSubjectVisitId, - }).ToListAsync(); - - medicalReviewInfo.TaskList.ForEach(x => - { - x.OtherTaskId = otherTask.Where(y => y.SouceReadModuleId == x.SouceReadModuleId && y.SourceSubjectVisitId == x.SourceSubjectVisitId).Select(y => y.TaskId).FirstOrDefault(); - }); } - else - { - medicalReviewInfo.TaskList = await _visitTaskRepository.Where(x => x.Id == taskInfo.Id).Select(x => new TaskInfo() - { - TaskId = x.Id, - IsCurrentTask = x.Id == taskInfo.Id, - ReadingCategory = x.ReadingCategory, - TaskBlindName = x.TaskBlindName, - ArmEnum = x.ArmEnum, - TaskName = x.TaskName, - SouceReadModuleId = x.SouceReadModuleId, - SourceSubjectVisitId = x.SourceSubjectVisitId, - SubjectId = x.SubjectId, - JudgeQuestionAnswerInfoList = x.ArmEnum == Arm.JudgeArm ? x.JudgeResultTask.ReadingTaskQuestionAnswerList.Where(y => y.ReadingQuestionTrial.IsJudgeQuestion).Select(y => new JudgeQuestionAnswerInfo() - { - Answer = y.Answer, - QuestionName = y.ReadingQuestionTrial.QuestionName, - DictionaryCode = y.ReadingQuestionTrial.DictionaryCode, - QuestionGenre = y.ReadingQuestionTrial.QuestionGenre, - }).ToList() : x.ReadingTaskQuestionAnswerList.Where(y => y.ReadingQuestionTrial.IsJudgeQuestion).Select(y => new JudgeQuestionAnswerInfo() - { - Answer = y.Answer, - QuestionName = y.ReadingQuestionTrial.QuestionName, - DictionaryCode = y.ReadingQuestionTrial.DictionaryCode, - QuestionGenre = y.ReadingQuestionTrial.QuestionGenre, - }).ToList() - }).ToListAsync(); - - - List otherTask = await _visitTaskRepository.Where(x => x.ArmEnum != Arm.JudgeArm && x.SouceReadModuleId == taskInfo.SouceReadModuleId && x.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId - && x.DoctorUserId != taskInfo.DoctorUserId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReReadingApplyState != ReReadingApplyState.Agree - &&x.TrialReadingCriterionId== taskInfo.TrialReadingCriterionId - ) - .Where(x => x.IsAnalysisCreate == taskInfo.IsAnalysisCreate) - .OrderBy(x => x.VisitTaskNum).Select(x => new TaskInfo() - { - TaskId = x.Id, - IsCurrentTask = x.Id == taskInfo.Id, - ReadingCategory = x.ReadingCategory, - TaskBlindName = x.TaskBlindName, - ArmEnum = x.ArmEnum, - TaskName = x.TaskName, - SouceReadModuleId = x.SouceReadModuleId, - SourceSubjectVisitId = x.SourceSubjectVisitId, - }).ToListAsync(); - - medicalReviewInfo.TaskList.ForEach(x => - { - x.OtherTaskId = otherTask.Where(y => y.SouceReadModuleId == x.SouceReadModuleId && y.SourceSubjectVisitId == x.SourceSubjectVisitId).Select(y => y.TaskId).FirstOrDefault(); - }); - } + #endregion return medicalReviewInfo; diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs index cbd1dd754..a13217055 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs @@ -509,144 +509,23 @@ namespace IRaCIS.Core.Application.Contracts public Guid CreateUserId { get; set; } } - public class TrialReadQuestion + public class TrialReadQuestion :ReadingQuestionTrial { - - public Guid Id { get; set; } - - /// - /// 排序 - /// - public int ShowOrder { get; set; } - /// /// 分页名称 /// public string PageName { get; set; } - /// - /// 问题名称 - /// - public string QuestionName { get; set; } - - /// - /// 类型 - /// - public string Type { get; set; } - - /// - /// 父问题触发 - /// - public string ParentTriggerValue { get; set; } - /// /// 父问题名称 /// public string ParentQuestionName { get; set; } - /// - /// 是否是必须 - /// - public IsRequired IsRequired { get; set; } - - /// - /// 是否显示 - /// - public ShowQuestion ShowQuestion { get; set; } - - /// - /// 类型值 - /// - public string TypeValue { get; set; } - - /// - /// 单位 - /// - public ValueUnit? Unit { get; set; } - - /// - /// 自定义单位 - /// - public string CustomUnit { get; set; } = string.Empty; - - /// - /// 是否启用 - /// - public bool IsEnable { get; set; } - - /// - /// 是否是裁判问题 - /// - public bool IsJudgeQuestion { get; set; } - - /// - /// 备注 - /// - public string Remark { get; set; } - - /// - /// 分组 - /// - public string GroupName { get; set; } - - /// - /// 答案分组 - /// - public string AnswerGroup { get; set; } = string.Empty; - - /// - /// 答案组合 - /// - public string AnswerCombination { get; set; } = string.Empty; - - /// - /// 裁判类型 - /// - public JudgeTypeEnum JudgeType { get; set; } - - - /// - /// 关联Value - /// - public string RelevanceValue { get; set; } = string.Empty; - public int? RelevanceShowOrder { get; set; } public int? ParentQuestionShowOrder { get; set; } - - /// - /// 病灶类型 - /// - public LesionType? LesionType { get; set; } - - /// - /// 最大问题数 - /// - public int? MaxQuestionCount { get; set; } - - /// - /// 是否显示在Dicom阅片中 - /// - public bool IsShowInDicom { get; set; } = false; - - - /// - /// 序号标记 - /// - public string OrderMark { get; set; } = string.Empty; - - /// - /// 自定义计算标记 - /// - public CustomCalculateMark? CustomCalculateMark { get; set; } - - /// - /// 自定义计算标记 - /// - public string CalculateQuestions { get; set; } = "[]"; - } public class TrialJudgeQuestion