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 + } }