From afe5f1e58f541c4b32c8c03ddc402af1843f276f Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 21 Mar 2023 16:01:39 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRaCIS.Core.Application.xml | 2 +- .../Service/Common/ExcelExportService.cs | 2 + .../DTO/SubjectCriteriaEvaluationViewModel.cs | 5 +- .../SubjectCriteriaEvaluationService.cs | 43 +++++- .../Service/Reading/_MapConfig.cs | 2 + ...askIsFrontTaskNeedSignButNotSignTrigger.cs | 125 +++++++++++++++++- .../SubjectCriteriaEvaluation.cs | 22 +-- .../SubjectCriteriaEvaluationVisitFilter.cs | 10 +- .../TrialCriterionAdditionalAssessmentType.cs | 32 +---- .../ReadingTaskQuestionAnswer.cs | 4 +- IRaCIS.Core.Domain/Visit/Subject.cs | 6 +- 11 files changed, 200 insertions(+), 53 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 85840b02d..cdbc3bcc5 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -9259,7 +9259,7 @@ - 因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务 + 维护 IsFrontTaskNeedSignButNotSign 字段 另外附加评估结果 diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index cc35e0c0b..a58d864f8 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -412,6 +412,8 @@ namespace IRaCIS.Core.Application.Service.Common + + /// /// 阅片期信息表 /// diff --git a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/DTO/SubjectCriteriaEvaluationViewModel.cs b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/DTO/SubjectCriteriaEvaluationViewModel.cs index 8f6792956..c4ded2679 100644 --- a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/DTO/SubjectCriteriaEvaluationViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/DTO/SubjectCriteriaEvaluationViewModel.cs @@ -32,7 +32,10 @@ namespace IRaCIS.Core.Application.ViewModel public string TrialSiteCode { get; set; } public SubjectStatus SubjectStatus { get; set; } - public List EvaluationList { get; set; } + public List FinalEvaluationList { get; set; } + + + public List ReadingEvaluationList { get; set; } } diff --git a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationService.cs b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationService.cs index 1316bbfd5..0cf7b9dce 100644 --- a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationService.cs +++ b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationService.cs @@ -65,11 +65,15 @@ namespace IRaCIS.Core.Application.Service var resultTrialReadingCriterionId = Guid.Empty; + var curentCriterionType = CriterionType.NoCriterion; + //BM 需要找基线 两个人做的结果 if (trialReadingCritionList.First(t => t.Id == inQuery.TrialReadingCriterionId).CriterionType == CriterionType.RECIST1Pointt1_MB) { resultTrialReadingCriterionId = trialReadingCritionList.First(t => t.CriterionType == CriterionType.RECIST1Point1).Id; + + curentCriterionType = CriterionType.RECIST1Pointt1_MB; } @@ -96,16 +100,43 @@ namespace IRaCIS.Core.Application.Service IsJoinEvaluation = subjectCriteriaEvaluation.IsJoinEvaluation, - EvaluationList=subject.SubjectAdditionalEvaluationResult.Where(t=>t.IsFinalResult && t.TrialReadingCriterionId==resultTrialReadingCriterionId).Select(u=>new EvaluationInfo() - { Answer=u.Answer,FinalTranslateDictionaryCode=u.FinalTranslateDictionaryCode,QuestioName=u.TrialReadingQuestion .QuestionName,QuestioNameEn=u.TrialReadingQuestion.QuestionEnName}).ToList() + + ReadingEvaluationList= subject.ReadingTaskQuestionAnswerList + .Where(t=>t.ReadingQuestionCriterionTrialId == resultTrialReadingCriterionId && t.ReadingQuestionTrial.IsAdditional==true && t.ReadingQuestionTrial.Type!="group" && t.VisitTask.SourceSubjectVisit.IsBaseLine) + .Select(u=>new EvaluationInfo() + { + Answer=u.Answer, + QuestioName=u.ReadingQuestionTrial.QuestionName, + QuestioNameEn=u.ReadingQuestionTrial.QuestionEnName, + FinalTranslateDictionaryCode=u.ReadingQuestionTrial.DictionaryCode + }).ToList() + + //EvaluationList=subject + //.SubjectAdditionalEvaluationResult + //.Where(t=>t.IsFinalResult && t.TrialReadingCriterionId==resultTrialReadingCriterionId) + //.Select(u=>new EvaluationInfo() + //{ Answer=u.Answer,FinalTranslateDictionaryCode=u.FinalTranslateDictionaryCode,QuestioName=u.TrialReadingQuestion .QuestionName,QuestioNameEn=u.TrialReadingQuestion.QuestionEnName}).ToList() + + }; - - - - var pageList = await subjectCriteriaEvaluationQueryable.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField == string.Empty ? nameof(SubjectCriteriaEvaluationView.SubjectCode) : inQuery.SortField, inQuery.Asc); + switch (curentCriterionType) + { + + case CriterionType.RECIST1Pointt1_MB: + + + break; + default: + break; + } + + + + + return pageList; } diff --git a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs index 7abf0c702..ab9cfe420 100644 --- a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs @@ -254,6 +254,8 @@ namespace IRaCIS.Core.Application.Service // .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.subject.Code)) // .ForMember(d => d.SubjectStatus, u => u.MapFrom(s => s.subject.Status)); + + CreateMap().ReverseMap(); CreateMap().ReverseMap(); CreateMap().ReverseMap(); diff --git a/IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSignButNotSignTrigger.cs b/IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSignButNotSignTrigger.cs index 5a3523799..f528dbd6c 100644 --- a/IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSignButNotSignTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSignButNotSignTrigger.cs @@ -10,21 +10,34 @@ using System.Linq.Expressions; namespace IRaCIS.Core.Application.Triggers { /// - /// 因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务 + /// 维护 IsFrontTaskNeedSignButNotSign 字段 另外附加评估结果 /// public class VisitTaskIsFrontTaskNeedSignButNotSignTrigger : IAfterSaveTrigger { private readonly IRepository _visitTaskRepository; + private readonly IRepository _trialReadingCriterionRepository; + + private readonly IRepository _trialReadingQuestionRepository; + + private readonly IRepository _readingTaskQuestionAnswerRepository; + + private readonly IRepository _subjectAdditionalEvaluationResultRepository; + public VisitTaskIsFrontTaskNeedSignButNotSignTrigger( - IRepository visitTaskRepository) + IRepository visitTaskRepository, IRepository trialReadingCriterionRepository, IRepository trialReadingQuestionRepository + , IRepository readingTaskQuestionAnswerRepository, IRepository subjectAdditionalEvaluationResultRepository) { - + _trialReadingCriterionRepository = trialReadingCriterionRepository; _visitTaskRepository = visitTaskRepository; + _trialReadingQuestionRepository = trialReadingQuestionRepository; + + _readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository; + _subjectAdditionalEvaluationResultRepository = subjectAdditionalEvaluationResultRepository; } @@ -38,7 +51,7 @@ namespace IRaCIS.Core.Application.Triggers if (context.ChangeType == ChangeType.Added) { - if (visitTask.IsNeedClinicalDataSign ) + if (visitTask.IsNeedClinicalDataSign) { var visitTaskIdQueryable = _visitTaskRepository.Where(visitTaskLambda) //该Subject 该标准的任务 @@ -67,6 +80,110 @@ namespace IRaCIS.Core.Application.Triggers } } + + + #region 附加评估 暂时废弃 +// //从未签名状态 改为签名状态时 判断是否进行了附加评估,将附加评估的结果冗余 +// if (context.ChangeType == ChangeType.Modified && visitTask.ReadingTaskState == ReadingTaskState.HaveSigned && context.UnmodifiedEntity.ReadingTaskState != ReadingTaskState.HaveSigned) +// { + +// var criterion = _trialReadingCriterionRepository.Where(t => t.Id == visitTask.TrialReadingCriterionId).FirstOrDefault(); + +// //如果是附加评估 +// if (criterion.IsAdditionalAssessment) +// { + + +// if (visitTask.ReadingCategory == ReadingCategory.Visit) +// { + + +// switch (criterion.CriterionType) +// { +// case CriterionType.RECIST1Point1: +// var isbaseLine = _visitTaskRepository.Where(t => t.Id == visitTask.Id).Select(t => t.SourceSubjectVisit.IsBaseLine).FirstOrDefault(); + + + +// if (isbaseLine) +// { +// var currentTaskAdditionarlAnswer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == visitTask.Id && +// t.ReadingQuestionTrial.IsAdditional == true && t.ReadingQuestionTrial.Type != "group" +// ).Include(t => t.ReadingQuestionTrial).FirstOrDefaultAsync(); + + +// //双重阅片完成了 +// if (criterion.ReadingType == ReadingMethod.Double && +//(_visitTaskRepository.Where(t => t.SubjectId == visitTask.SubjectId && t.TaskName == visitTask.TaskName && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned).Count() == 2) +// ) +// { + +// var otherTaskId = await _visitTaskRepository.Where(t => t.SubjectId == visitTask.SubjectId && t.TaskName == visitTask.TaskName && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.Id != visitTask.Id) +// .Select(t => t.Id).FirstOrDefaultAsync(); + + +// var otherTaskAdditionarlAnswer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == otherTaskId && +// t.ReadingQuestionTrial.IsAdditional == true && t.ReadingQuestionTrial.Type != "group" +// ).Include(t => t.ReadingQuestionTrial).FirstOrDefaultAsync(); + + + +// await _subjectAdditionalEvaluationResultRepository.AddAsync(new SubjectAdditionalEvaluationResult() +// { +// TrialReadingCriterionId = visitTask.TrialReadingCriterionId, +// IsFinalResult = true, +// SubjectId = visitTask.SubjectId, +// TrialReadingQuestionId = currentTaskAdditionarlAnswer.ReadingQuestionTrialId, +// FinalAnswer = currentTaskAdditionarlAnswer.Answer, +// FinalTranslateDictionaryCode = currentTaskAdditionarlAnswer.ReadingQuestionTrial.DictionaryCode, + +// }); + +// } +// if (criterion.ReadingType == ReadingMethod.Single) +// { + +// await _subjectAdditionalEvaluationResultRepository.AddAsync(new SubjectAdditionalEvaluationResult() +// { +// TrialReadingCriterionId = visitTask.TrialReadingCriterionId, +// IsFinalResult = true, +// SubjectId = visitTask.SubjectId, +// TrialReadingQuestionId = currentTaskAdditionarlAnswer.ReadingQuestionTrialId, +// FinalAnswer = currentTaskAdditionarlAnswer.Answer, +// FinalTranslateDictionaryCode = currentTaskAdditionarlAnswer.ReadingQuestionTrial.DictionaryCode, + +// }); + +// } + + + +// } + +// break; +// default: +// break; +// } + + + + + +// } + + + + + + + + +// } +// } + + + #endregion + } diff --git a/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluation.cs b/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluation.cs index b70fab15c..72d1a76c0 100644 --- a/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluation.cs +++ b/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluation.cs @@ -63,16 +63,20 @@ namespace IRaCIS.Core.Domain.Models public DateTime UpdateTime { get; set; } - + [JsonIgnore] public List SubjectCriteriaEvaluationVisitFilterList { get; set; } - - ///// - // /// 是否影像筛选 - // /// - //[Required] - //public bool IsImageFiltering { get; set; } - - } + + + + + + ///// + // /// 是否影像筛选 + // /// + //[Required] + //public bool IsImageFiltering { get; set; } + + } } diff --git a/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationVisitFilter.cs b/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationVisitFilter.cs index 05f2f7539..28135100b 100644 --- a/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationVisitFilter.cs +++ b/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationVisitFilter.cs @@ -58,22 +58,28 @@ namespace IRaCIS.Core.Domain.Models } - + /// + /// 影像确认结果 + /// public enum ImageDeterminationResultState { //待定 None = 0, + //通过 Passed = 1, } + /// + /// 影像筛选状态 + /// public enum ImageFilterState { //默认值 待筛选 None = 0, - //已完成 + //筛选已完成 Finished = 1 } diff --git a/IRaCIS.Core.Domain/Reading/ReadingCriterion/TrialCriterionAdditionalAssessmentType.cs b/IRaCIS.Core.Domain/Reading/ReadingCriterion/TrialCriterionAdditionalAssessmentType.cs index 3f385cdde..c46d0fef0 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingCriterion/TrialCriterionAdditionalAssessmentType.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingCriterion/TrialCriterionAdditionalAssessmentType.cs @@ -18,49 +18,25 @@ namespace IRaCIS.Core.Domain.Models public class TrialCriterionAdditionalAssessmentType : Entity, IAuditUpdate, IAuditAdd { - - /// - /// TrialReadingCriterionId - /// - [Required] public Guid TrialReadingCriterionId { get; set; } - /// - /// CriterionType - /// - public CriterionType CriterionType { get; set; } public AdditionalAssessmentType AdditionalAssessmentType { get; set; } - /// - /// IsSelected - /// public bool? IsSelected { get; set; } - /// - /// CreateTime - /// - [Required] + public DateTime CreateTime { get; set; } - /// - /// CreateUserId - /// - [Required] + public Guid CreateUserId { get; set; } - /// - /// UpdateTime - /// - [Required] + public DateTime UpdateTime { get; set; } - /// - /// UpdateUserId - /// - [Required] + public Guid UpdateUserId { get; set; } diff --git a/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTaskQuestionAnswer.cs b/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTaskQuestionAnswer.cs index 38c8fdff9..ccc45dda0 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTaskQuestionAnswer.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingTaskQuestionAnswer.cs @@ -74,7 +74,9 @@ namespace IRaCIS.Core.Domain.Models public ReadingQuestionTrial ReadingQuestionTrial { get; set; } - } + + + } diff --git a/IRaCIS.Core.Domain/Visit/Subject.cs b/IRaCIS.Core.Domain/Visit/Subject.cs index 0a16d6309..2a901ed65 100644 --- a/IRaCIS.Core.Domain/Visit/Subject.cs +++ b/IRaCIS.Core.Domain/Visit/Subject.cs @@ -31,7 +31,11 @@ namespace IRaCIS.Core.Domain.Models [JsonIgnore] - public List SubjectAdditionalEvaluationResult { get; set; } + public List SubjectAdditionalEvaluationResult { get; set; } + + + [JsonIgnore] + public List ReadingTaskQuestionAnswerList { get; set; } [JsonIgnore] [ForeignKey("FinalSubjectVisitId")] From 3b20301edce49bbefd04bbb185532e3cfea1f802 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 21 Mar 2023 16:02:17 +0800 Subject: [PATCH 2/5] x --- IRaCIS.Core.Application/Service/Reading/_MapConfig.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs index ab9cfe420..244523aa2 100644 --- a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs @@ -237,7 +237,7 @@ namespace IRaCIS.Core.Application.Service .ForMember(x => x.CreateUserName, y => y.MapFrom(n => n.CreateUser.UserName)); #endregion - + #region 阅片部位 From 95b932554d688d7a35efd5d57c2a3bf987a2fc22 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 21 Mar 2023 16:11:58 +0800 Subject: [PATCH 3/5] x --- .../AdditionalEvaluate/SubjectCriteriaEvaluationService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationService.cs b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationService.cs index 0cf7b9dce..c59a99575 100644 --- a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationService.cs +++ b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationService.cs @@ -155,7 +155,7 @@ namespace IRaCIS.Core.Application.Service { - if (addOrEditSubjectCriteriaEvaluation.Id != null) + if (addOrEditSubjectCriteriaEvaluation.Id == null) { var entity = await _subjectCriteriaEvaluationRepository.InsertFromDTOAsync(addOrEditSubjectCriteriaEvaluation); From 8c49955057032531b2d1f1d0f40d2aa16bbcbebd Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 21 Mar 2023 17:32:31 +0800 Subject: [PATCH 4/5] x --- .../DTO/SubjectCriteriaEvaluationViewModel.cs | 6 +- ...tCriteriaEvaluationVisitFilterViewModel.cs | 15 ++- .../ISubjectCriteriaEvaluationService.cs | 2 +- .../SubjectCriteriaEvaluationService.cs | 117 +++++++++++++++--- .../Reading/UrgentType.cs | 27 ++++ 5 files changed, 144 insertions(+), 23 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/DTO/SubjectCriteriaEvaluationViewModel.cs b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/DTO/SubjectCriteriaEvaluationViewModel.cs index c4ded2679..656f271fe 100644 --- a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/DTO/SubjectCriteriaEvaluationViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/DTO/SubjectCriteriaEvaluationViewModel.cs @@ -32,7 +32,7 @@ namespace IRaCIS.Core.Application.ViewModel public string TrialSiteCode { get; set; } public SubjectStatus SubjectStatus { get; set; } - public List FinalEvaluationList { get; set; } + public List FinalEvaluationList { get; set; }=new List(); public List ReadingEvaluationList { get; set; } @@ -41,10 +41,8 @@ namespace IRaCIS.Core.Application.ViewModel public class EvaluationInfo { - public string QuestioName { get; set; } - - public string QuestioNameEn { get; set; } + public Guid? QuestionId { get; set; } public string Answer { get; set; } public string FinalTranslateDictionaryCode { get; set; } = string.Empty; diff --git a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/DTO/SubjectCriteriaEvaluationVisitFilterViewModel.cs b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/DTO/SubjectCriteriaEvaluationVisitFilterViewModel.cs index 49ec90376..ba0c13edc 100644 --- a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/DTO/SubjectCriteriaEvaluationVisitFilterViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/DTO/SubjectCriteriaEvaluationVisitFilterViewModel.cs @@ -11,15 +11,22 @@ using System.ComponentModel.DataAnnotations; namespace IRaCIS.Core.Application.ViewModel { /// SubjectCriteriaEvaluationVisitFilterView 列表视图模型 - public class SubjectCriteriaEvaluationVisitFilterView: SubjectCriteriaEvaluationVisitFilterAddOrEdit + public class SubjectCriteriaEvaluationVisitFilterView { public DateTime? CreateTime { get; set; } public Guid? CreateUserId { get; set; } public Guid? UpdateUserId { get; set; } public DateTime? UpdateTime { get; set; } - public new ImageFilterState? ImageFilterState { get; set; } - public new ImageDeterminationResultState? ImageDeterminationResultState { get; set; } + public Guid? Id { get; set; } + public Guid SubjectId { get; set; } + public Guid TrialReadingCriterionId { get; set; } + public Guid SubjectVisitId { get; set; } + + public ImageFilterState? ImageFilterState { get; set; } + public ImageDeterminationResultState? ImageDeterminationResultState { get; set; } + + public bool? IsGeneratedTask { get; set; } @@ -29,7 +36,7 @@ namespace IRaCIS.Core.Application.ViewModel } ///SubjectCriteriaEvaluationVisitFilterQuery 列表查询参数模型 - public class SubjectCriteriaEvaluationVisitFilterQuery : PageInput + public class SubjectCriteriaEvaluationVisitFilterQuery { [NotDefault] public Guid TrialReadingCriterionId { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/Interface/ISubjectCriteriaEvaluationService.cs b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/Interface/ISubjectCriteriaEvaluationService.cs index 119a85055..821834fd6 100644 --- a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/Interface/ISubjectCriteriaEvaluationService.cs +++ b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/Interface/ISubjectCriteriaEvaluationService.cs @@ -14,7 +14,7 @@ namespace IRaCIS.Core.Application.Interfaces { - Task> GetSubjectCriteriaEvaluationList(SubjectCriteriaEvaluationQuery inQuery); + //Task> GetSubjectCriteriaEvaluationList(SubjectCriteriaEvaluationQuery inQuery); //Task AddOrUpdateSubjectCriteriaEvaluation(SubjectCriteriaEvaluationAddOrEdit addOrEditSubjectCriteriaEvaluation); diff --git a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationService.cs b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationService.cs index c59a99575..f7a212f4d 100644 --- a/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationService.cs +++ b/IRaCIS.Core.Application/Service/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationService.cs @@ -15,6 +15,7 @@ using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Application.Contracts; using DocumentFormat.OpenXml.Spreadsheet; using Panda.DynamicWebApi.Attributes; +using IRaCIS.Core.Domain.Share.Reading; namespace IRaCIS.Core.Application.Service { @@ -33,12 +34,14 @@ namespace IRaCIS.Core.Application.Service private readonly IRepository _trialReadingCriterionRepository; + private readonly IRepository _trialReadingQuestionRepository; + private readonly IVisitTaskHelpeService _IVisitTaskHelpeService; public SubjectCriteriaEvaluationService(IRepository subjectCriteriaEvaluationRepository, IRepository subjectRepository, IRepository subjectCriteriaEvaluationVisitFilterRepository, IRepository subjectVisitRepository, IRepository subjectCriteriaEvaluationVisitStudyFilterRepository, - IRepository trialReadingCriterionRepository, IVisitTaskHelpeService IVisitTaskHelpeService) + IRepository trialReadingCriterionRepository, IVisitTaskHelpeService IVisitTaskHelpeService, IRepository trialReadingQuestionRepository) { _subjectCriteriaEvaluationRepository = subjectCriteriaEvaluationRepository; _subjectRepository = subjectRepository; @@ -49,6 +52,8 @@ namespace IRaCIS.Core.Application.Service _IVisitTaskHelpeService = IVisitTaskHelpeService; + _trialReadingQuestionRepository = trialReadingQuestionRepository; + } @@ -58,24 +63,36 @@ namespace IRaCIS.Core.Application.Service /// /// [HttpPost] - public async Task> GetSubjectCriteriaEvaluationList(SubjectCriteriaEvaluationQuery inQuery) + public async Task<(PageOutput,object)> GetSubjectCriteriaEvaluationList(SubjectCriteriaEvaluationQuery inQuery) { var trialReadingCritionList = _trialReadingCriterionRepository.Where(t => t.TrialId == inQuery.TrialId).ToList(); var resultTrialReadingCriterionId = Guid.Empty; + var resultTrialReadingCriterion = trialReadingCritionList.First(); + var curentCriterionType = CriterionType.NoCriterion; + //BM 需要找基线 两个人做的结果 if (trialReadingCritionList.First(t => t.Id == inQuery.TrialReadingCriterionId).CriterionType == CriterionType.RECIST1Pointt1_MB) { - - resultTrialReadingCriterionId = trialReadingCritionList.First(t => t.CriterionType == CriterionType.RECIST1Point1).Id; + + resultTrialReadingCriterion = trialReadingCritionList.First(t => t.CriterionType == CriterionType.RECIST1Point1); + resultTrialReadingCriterionId = resultTrialReadingCriterion.Id; curentCriterionType = CriterionType.RECIST1Pointt1_MB; } + var addtionalQustionInfoList = _trialReadingQuestionRepository.Where(t => t.ReadingQuestionCriterionTrialId == resultTrialReadingCriterionId && t.IsAdditional == true && t.Type != "group").IgnoreQueryFilters().Select(t => new + { + QuestionId= t.Id, + t.QuestionEnName, + t.QuestionName + }).ToList(); + + var questionIdList= addtionalQustionInfoList.Select(t=>t.QuestionId).ToList(); var subjectCriteriaEvaluationQueryable = from subject in _subjectRepository.Where(t=>t.TrialId==inQuery.TrialId) @@ -102,12 +119,14 @@ namespace IRaCIS.Core.Application.Service ReadingEvaluationList= subject.ReadingTaskQuestionAnswerList - .Where(t=>t.ReadingQuestionCriterionTrialId == resultTrialReadingCriterionId && t.ReadingQuestionTrial.IsAdditional==true && t.ReadingQuestionTrial.Type!="group" && t.VisitTask.SourceSubjectVisit.IsBaseLine) + .Where(t=>t.ReadingQuestionCriterionTrialId == resultTrialReadingCriterionId && + questionIdList.Contains(t.ReadingQuestionTrialId) + && t.VisitTask.TaskState==TaskState.Effect) .Select(u=>new EvaluationInfo() { + QuestionId=u.ReadingQuestionTrialId, Answer=u.Answer, - QuestioName=u.ReadingQuestionTrial.QuestionName, - QuestioNameEn=u.ReadingQuestionTrial.QuestionEnName, + FinalTranslateDictionaryCode=u.ReadingQuestionTrial.DictionaryCode }).ToList() @@ -122,22 +141,86 @@ namespace IRaCIS.Core.Application.Service var pageList = await subjectCriteriaEvaluationQueryable.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField == string.Empty ? nameof(SubjectCriteriaEvaluationView.SubjectCode) : inQuery.SortField, inQuery.Asc); - switch (curentCriterionType) + + foreach (var item in pageList.CurrentPageData) { - - case CriterionType.RECIST1Pointt1_MB: + switch (curentCriterionType) + { + case CriterionType.RECIST1Pointt1_MB: - break; - default: - break; + if (resultTrialReadingCriterion.ReadingType == ReadingMethod.Double) + { + if (item.ReadingEvaluationList.Count==2) + { + if (item.ReadingEvaluationList.All(t => t.Answer == 1.ToString())) + { + item.FinalEvaluationList.Add(new EvaluationInfo() { QuestionId=item.ReadingEvaluationList.First().QuestionId, Answer = ((int)BrainMetastasisResult.Yes).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult) + }); + } + else if (item.ReadingEvaluationList.All(t => t.Answer == 0.ToString())) + { + item.FinalEvaluationList.Add(new EvaluationInfo() { + QuestionId = item.ReadingEvaluationList.First().QuestionId, + Answer = ((int)BrainMetastasisResult.No).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult) + }); + } + else if (item.ReadingEvaluationList.First().Answer != item.ReadingEvaluationList.Last().Answer) + { + item.FinalEvaluationList.Add(new EvaluationInfo() { QuestionId = item.ReadingEvaluationList.First().QuestionId, Answer = ((int)BrainMetastasisResult.Maybe).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult)}); + } + else + { + + } + + } + else + { + item.FinalEvaluationList.Add(new EvaluationInfo() { QuestionId= addtionalQustionInfoList.FirstOrDefault()?.QuestionId, Answer = ((int)BrainMetastasisResult.Unknown).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult) }); + } + } + else if (resultTrialReadingCriterion.ReadingType == ReadingMethod.Single) + { + + if (item.ReadingEvaluationList.Count == 1) + { + if (item.ReadingEvaluationList.All(t => t.Answer == 1.ToString())) + { + item.FinalEvaluationList.Add(new EvaluationInfo() { QuestionId = item.ReadingEvaluationList.First().QuestionId, Answer = ((int)BrainMetastasisResult.Yes).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult) }); + } + else if (item.ReadingEvaluationList.All(t => t.Answer == 0.ToString())) + { + item.FinalEvaluationList.Add(new EvaluationInfo() { QuestionId = item.ReadingEvaluationList.First().QuestionId, Answer = ((int)BrainMetastasisResult.No).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult) }); + } + else + { + + } + } + else + { + item.FinalEvaluationList.Add(new EvaluationInfo() { QuestionId = addtionalQustionInfoList.FirstOrDefault()?.QuestionId, Answer = ((int)BrainMetastasisResult.Unknown).ToString(), FinalTranslateDictionaryCode = nameof(BrainMetastasisResult) }); + } + + } + else + { + + } + + break; + default: + break; + } } + - return pageList; + return (pageList, addtionalQustionInfoList); } @@ -341,6 +424,12 @@ namespace IRaCIS.Core.Application.Service ImageDeterminationResultState = subjectCriteriaEvaluationVisitFilter.ImageDeterminationResultState, ImageFilterState = subjectCriteriaEvaluationVisitFilter.ImageFilterState, IsGeneratedTask = subjectCriteriaEvaluationVisitFilter.IsGeneratedTask, + Id = subjectCriteriaEvaluationVisitFilter.Id, + + CreateTime = subjectCriteriaEvaluationVisitFilter.CreateTime, + CreateUserId=subjectCriteriaEvaluationVisitFilter.CreateUserId, + UpdateTime= subjectCriteriaEvaluationVisitFilter.UpdateTime, + UpdateUserId= subjectCriteriaEvaluationVisitFilter.UpdateUserId, }; diff --git a/IRaCIS.Core.Domain.Share/Reading/UrgentType.cs b/IRaCIS.Core.Domain.Share/Reading/UrgentType.cs index 7c4515320..06788ce7d 100644 --- a/IRaCIS.Core.Domain.Share/Reading/UrgentType.cs +++ b/IRaCIS.Core.Domain.Share/Reading/UrgentType.cs @@ -36,4 +36,31 @@ namespace IRaCIS.Core.Domain.Share.Reading TNM = 2 } + + /// + /// 阅片脑转移推断结果 + /// + public enum BrainMetastasisResult + { + + /// + /// 否 + /// + No = 0, + + /// + /// 是 + /// + Yes = 1, + + /// + /// 可能 + /// + Maybe = 3, + + /// + /// 未知 + /// + Unknown = 4 + } } From de04d51cd74e29bc14da508bd8fe7b653c971cb5 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 21 Mar 2023 17:55:14 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=98=85=E7=89=87?= =?UTF-8?q?=E6=A0=87=E5=87=86=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Allocation/VisitTaskService.cs | 8 +++++--- .../Service/WorkLoad/DTO/DoctorWorkLoadViewModel.cs | 6 ++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 47ae89828..01a5f77e1 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -90,11 +90,12 @@ namespace IRaCIS.Core.Application.Service.Allocation return await _visitTaskRepository.SaveChangesAsync(); } - public async Task> GetTrialCriterionList(Guid trialId, bool isHaveSigned = true) + public async Task> GetTrialCriterionList(Guid trialId, bool isHaveSigned = true,bool? isAutoCreate = null) { var list = await _repository.Where(t => t.TrialId == trialId && t.IsConfirm) + .OrderBy(t => t.ShowOrder) - .Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, TrialReadingCriterionName = t.CriterionName, CriterionType = t.CriterionType, ReadingType = t.ReadingType, ReadingInfoSignTime = t.ReadingInfoSignTime }) + .Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, IsAutoCreate=t.IsAutoCreate,IsAdditionalAssessment=t.IsAdditionalAssessment, TrialReadingCriterionName = t.CriterionName, CriterionType = t.CriterionType, ReadingType = t.ReadingType, ReadingInfoSignTime = t.ReadingInfoSignTime }) .ToListAsync(); if (list.Count == 0) @@ -106,7 +107,8 @@ namespace IRaCIS.Core.Application.Service.Allocation - return list.AsQueryable().WhereIf(isHaveSigned == true, t => t.ReadingInfoSignTime != null).ToList(); + return list.AsQueryable().WhereIf(isHaveSigned == true, t => t.ReadingInfoSignTime != null) + .WhereIf(isAutoCreate == false, t => t.IsAutoCreate == isAutoCreate).ToList(); } diff --git a/IRaCIS.Core.Application/Service/WorkLoad/DTO/DoctorWorkLoadViewModel.cs b/IRaCIS.Core.Application/Service/WorkLoad/DTO/DoctorWorkLoadViewModel.cs index fe2a4b76e..093c7a829 100644 --- a/IRaCIS.Core.Application/Service/WorkLoad/DTO/DoctorWorkLoadViewModel.cs +++ b/IRaCIS.Core.Application/Service/WorkLoad/DTO/DoctorWorkLoadViewModel.cs @@ -343,6 +343,12 @@ namespace IRaCIS.Application.Contracts public bool IsGlobalReading { get; set; } = true; + //是否附加评估 + public bool IsAdditionalAssessment { get; set; } + + + //自动 手动生成任务 + public bool IsAutoCreate { get; set; } public bool IsArbitrationReading { get; set; } = true;