diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs index 231a57382..cdbc2a392 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs @@ -18,6 +18,8 @@ namespace IRaCIS.Core.Application.ViewModel public Guid VisitTaskId { get; set; } + public Guid SubjectVisitId { get; set; } + public List QuestionInfo { get; set; } = new List(); diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index b74434c1d..6852c140a 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -66,7 +66,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public List RelationQuestions { get; set; } = new List(); } + public class GetTableAnswerRowInfoInDto + { + public Guid VisitTaskId { get; set; } + public Guid? QuestionId { get; set; } + } public class GetReadingQuestionAndAnswerInDto { @@ -621,6 +626,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string MeasureData { get; set; } + public Guid? SeriesId { get; set; } + + public Guid? InstanceId { get; set; } + + public List AnswerList { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCalculateService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCalculateService.cs index efbcd9cc6..cef4dab3f 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCalculateService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCalculateService.cs @@ -22,19 +22,25 @@ namespace IRaCIS.Core.Application.Service { private readonly IRepository _readingTableQuestionAnswerRepository; private readonly IRepository _visitTaskRepository; - private readonly IRepository _tumorAssessmentRepository; + private readonly IRepository _readingTableQuestionTrialRepository; + private readonly IRepository _subjectVisitRepository; + private readonly IRepository _tumorAssessmentRepository; private readonly IRepository _readingTaskQuestionAnswerRepository; public ReadingCalculateService( IRepository readingTableQuestionAnswerRepository, IRepository visitTaskRepository, - IRepository tumorAssessmentRepository, + IRepository readingTableQuestionTrialRepository, + IRepository subjectVisitRepository, + IRepository tumorAssessmentRepository, IRepository ReadingTaskQuestionAnswerRepository ) { this._readingTableQuestionAnswerRepository = readingTableQuestionAnswerRepository; this._visitTaskRepository = visitTaskRepository; - this._tumorAssessmentRepository = tumorAssessmentRepository; + this._readingTableQuestionTrialRepository = readingTableQuestionTrialRepository; + this._subjectVisitRepository = subjectVisitRepository; + this._tumorAssessmentRepository = tumorAssessmentRepository; this._readingTaskQuestionAnswerRepository = ReadingTaskQuestionAnswerRepository; } @@ -226,9 +232,33 @@ namespace IRaCIS.Core.Application.Service /// /// /// - public async Task GetIsAddFive(ReadingCalculateDto inDto) + public async Task GetIsAddFive(ReadingCalculateDto inDto) { - return string.Empty; + + var LastVisitTaskId = await this.GetLastVisitTaskId(inDto); + + var questionIds = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).Select(x => x.QuestionId).ToList(); + var lastQuestionAsnwer = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == LastVisitTaskId && questionIds.Contains(x.QuestionId)).Include(x=>x.ReadingQuestionTrial).ToListAsync(); + var rowIndexs = lastQuestionAsnwer.Where(x=>x.ReadingTableQuestionTrial.QuestionMark==QuestionMark.IsLymph&&x.Answer=="是").Select(x => x.RowIndex).Distinct().OrderBy(x => x).ToList(); + + var thisQuestionAsnwer = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList(); + + var isExists = false; + foreach (var item in rowIndexs) + { + var lastValue = decimal.Parse(lastQuestionAsnwer.Where(x => x.RowIndex == item && x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault() ?? "0"); + + var thisRowData = thisQuestionAsnwer.Where(x => x.RowIndex == item).SelectMany(x => x.TableQuestionList).ToList(); + var thisValue = decimal.Parse(thisRowData.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault() ?? "0"); + + if (thisValue - lastValue > 5) + { + isExists = true; + } + } + + return isExists; + } #endregion @@ -275,14 +305,14 @@ namespace IRaCIS.Core.Application.Service /// private async Task GetBaseLineSOD(ReadingCalculateDto inDto) { - if (await _visitTaskRepository.AnyAsync(x => x.Id == inDto.VisitTaskId && x.SourceSubjectVisit.IsBaseLine)) + if (await _visitTaskRepository.AnyAsync(x => x.Id == inDto.VisitTaskId && x.SourceSubjectVisit.IsBaseLine&&!x.IsAnalysisCreate)) { return 0; } // 先找到基线的任务 var baseLineTaskId = await _visitTaskRepository.Where(x => x.SubjectId == inDto.SubjectId && x.ReadingCategory == ReadingCategory.Visit - && x.SourceSubjectVisit.IsBaseLine && x.TaskState == TaskState.Effect) + && x.SourceSubjectVisit.IsBaseLine && x.TaskState == TaskState.Effect&&!x.IsAnalysisCreate) .Select(x => x.Id).FirstOrDefaultAsync(); @@ -317,7 +347,24 @@ namespace IRaCIS.Core.Application.Service } #endregion + /// + /// 获取上一个访视任务Id + /// + /// + private async Task GetLastVisitTaskId(ReadingCalculateDto inDto) + { + // 拿到这一个访视 + var thisNum = await _subjectVisitRepository.Where(x => x.Id == inDto.SubjectVisitId).Select(x => x.VisitNum).FirstOrDefaultAsync(); + // 先找到上一个访视 + var lastVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == inDto.SubjectId && x.VisitNum < thisNum).OrderByDescending(x => x.VisitNum).Select(x => x.Id).FirstOrDefaultAsync(); + + // 找到访视任务Id + + var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit && x.TaskState == TaskState.Effect && !x.IsAnalysisCreate && x.SourceSubjectVisitId == lastVisitId).Select(x => x.Id).FirstOrDefaultAsync(); + + return LastVisitTaskId; + } #endregion } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs index 087962e32..734b67a89 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs @@ -123,6 +123,20 @@ namespace IRaCIS.Application.Services // result.SinglePage = groupList; //} + /// + /// 获取表格答案行信息 + /// + /// + /// + /// (QuestionId) 可为空 + /// + /// + public async Task> GetTableAnswerRowInfo(GetTableAnswerRowInfoInDto inDto) + { + return await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId) + .WhereIf(inDto.QuestionId != null, x => x.QuestionId == inDto.QuestionId) + .ToListAsync(); + } /// /// 获取表格问题及答案(2022-08-26) @@ -279,6 +293,8 @@ namespace IRaCIS.Application.Services answers.Add("MeasureData", rowInfo==null?string.Empty:rowInfo.MeasureData); answers.Add("RowIndex", x.ToString()); + answers.Add("InstanceId", rowInfo == null ? string.Empty : rowInfo.InstanceId.ToString()); + answers.Add("SeriesId", rowInfo == null ? string.Empty : rowInfo.SeriesId.ToString()); item.TableQuestions.Answers.Add(answers); }); @@ -1532,6 +1548,7 @@ namespace IRaCIS.Application.Services QuestionId=inDto.QuestionId, TableQuestionId=x.TableQuestionId, RowIndex=inDto.RowIndex, + VisitTaskId = inDto.VisitTaskId }).ToList(); @@ -1542,6 +1559,8 @@ namespace IRaCIS.Application.Services QuestionId = inDto.QuestionId, MeasureData = inDto.MeasureData, RowIndex = inDto.RowIndex, + InstanceId=inDto.InstanceId, + SeriesId=inDto.SeriesId, VisitTaskId = inDto.VisitTaskId, diff --git a/IRaCIS.Core.Domain/Reading/ReadingTableAnswerRowInfo.cs b/IRaCIS.Core.Domain/Reading/ReadingTableAnswerRowInfo.cs index 6f2aba2d0..7aa6de1d4 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingTableAnswerRowInfo.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingTableAnswerRowInfo.cs @@ -29,10 +29,21 @@ namespace IRaCIS.Core.Domain.Models /// TrialId /// public Guid TrialId { get; set; } - + + /// - /// RowIndex - /// + /// InstanceId + /// + public Guid? InstanceId { get; set; } + + /// + /// SeriesId + /// + public Guid? SeriesId { get; set; } + + /// + /// RowIndex + /// public int RowIndex { get; set; } /// diff --git a/IRaCIS.Core.Domain/Reading/ReadingTableQuestionAnswer.cs b/IRaCIS.Core.Domain/Reading/ReadingTableQuestionAnswer.cs index 5ceb1f6c2..8357efdb4 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingTableQuestionAnswer.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingTableQuestionAnswer.cs @@ -60,6 +60,10 @@ namespace IRaCIS.Core.Domain.Models public ReadingQuestionTrial ReadingQuestionTrial { get; set; } + [ForeignKey("TableQuestionId")] + + public ReadingTableQuestionTrial ReadingTableQuestionTrial { get; set; } + }