This commit is contained in:
he
2023-03-22 10:28:12 +08:00
16 changed files with 347 additions and 71 deletions
@@ -32,16 +32,17 @@ namespace IRaCIS.Core.Application.ViewModel
public string TrialSiteCode { get; set; }
public SubjectStatus SubjectStatus { get; set; }
public List<EvaluationInfo> EvaluationList { get; set; }
public List<EvaluationInfo> FinalEvaluationList { get; set; }=new List<EvaluationInfo>();
public List<EvaluationInfo> ReadingEvaluationList { get; set; }
}
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;
@@ -11,15 +11,22 @@ using System.ComponentModel.DataAnnotations;
namespace IRaCIS.Core.Application.ViewModel
{
/// <summary> SubjectCriteriaEvaluationVisitFilterView 列表视图模型 </summary>
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
}
///<summary>SubjectCriteriaEvaluationVisitFilterQuery 列表查询参数模型</summary>
public class SubjectCriteriaEvaluationVisitFilterQuery : PageInput
public class SubjectCriteriaEvaluationVisitFilterQuery
{
[NotDefault]
public Guid TrialReadingCriterionId { get; set; }
@@ -14,7 +14,7 @@ namespace IRaCIS.Core.Application.Interfaces
{
Task<PageOutput<SubjectCriteriaEvaluationView>> GetSubjectCriteriaEvaluationList(SubjectCriteriaEvaluationQuery inQuery);
//Task<PageOutput<SubjectCriteriaEvaluationView>> GetSubjectCriteriaEvaluationList(SubjectCriteriaEvaluationQuery inQuery);
//Task<IResponseOutput> AddOrUpdateSubjectCriteriaEvaluation(SubjectCriteriaEvaluationAddOrEdit addOrEditSubjectCriteriaEvaluation);
@@ -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<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
private readonly IRepository<ReadingQuestionTrial> _trialReadingQuestionRepository;
private readonly IVisitTaskHelpeService _IVisitTaskHelpeService;
public SubjectCriteriaEvaluationService(IRepository<SubjectCriteriaEvaluation> subjectCriteriaEvaluationRepository, IRepository<Subject> subjectRepository,
IRepository<SubjectCriteriaEvaluationVisitFilter> subjectCriteriaEvaluationVisitFilterRepository, IRepository<SubjectVisit> subjectVisitRepository,
IRepository<SubjectCriteriaEvaluationVisitStudyFilter> subjectCriteriaEvaluationVisitStudyFilterRepository,
IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IVisitTaskHelpeService IVisitTaskHelpeService)
IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IVisitTaskHelpeService IVisitTaskHelpeService, IRepository<ReadingQuestionTrial> trialReadingQuestionRepository)
{
_subjectCriteriaEvaluationRepository = subjectCriteriaEvaluationRepository;
_subjectRepository = subjectRepository;
@@ -49,6 +52,8 @@ namespace IRaCIS.Core.Application.Service
_IVisitTaskHelpeService = IVisitTaskHelpeService;
_trialReadingQuestionRepository = trialReadingQuestionRepository;
}
@@ -58,20 +63,36 @@ namespace IRaCIS.Core.Application.Service
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<SubjectCriteriaEvaluationView>> GetSubjectCriteriaEvaluationList(SubjectCriteriaEvaluationQuery inQuery)
public async Task<(PageOutput<SubjectCriteriaEvaluationView>,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)
@@ -96,17 +117,110 @@ 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 &&
questionIdList.Contains(t.ReadingQuestionTrialId)
&& t.VisitTask.TaskState==TaskState.Effect)
.Select(u=>new EvaluationInfo()
{
QuestionId=u.ReadingQuestionTrialId,
Answer=u.Answer,
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);
return pageList;
foreach (var item in pageList.CurrentPageData)
{
switch (curentCriterionType)
{
case CriterionType.RECIST1Pointt1_MB:
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, addtionalQustionInfoList);
}
@@ -124,7 +238,7 @@ namespace IRaCIS.Core.Application.Service
{
if (addOrEditSubjectCriteriaEvaluation.Id != null)
if (addOrEditSubjectCriteriaEvaluation.Id == null)
{
var entity = await _subjectCriteriaEvaluationRepository.InsertFromDTOAsync(addOrEditSubjectCriteriaEvaluation);
@@ -310,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,
};
@@ -237,7 +237,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(x => x.CreateUserName, y => y.MapFrom(n => n.CreateUser.UserName));
#endregion
#region
@@ -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<SubjectCriteriaEvaluationAddOrEdit, SubjectCriteriaEvaluation>().ReverseMap();
CreateMap<SubjectCriteriaEvaluation, SubjectCriteriaEvaluationView>().ReverseMap();
CreateMap<SubjectCriteriaEvaluationVisitFilter, SubjectCriteriaEvaluationVisitFilterAddOrEdit>().ReverseMap();