diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/GeneralCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/GeneralCalculateService.cs new file mode 100644 index 000000000..73d51b400 --- /dev/null +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/GeneralCalculateService.cs @@ -0,0 +1,135 @@ +using IRaCIS.Core.Application.Service.Reading.Dto; +using IRaCIS.Core.Domain.Share; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IRaCIS.Core.Application.Service.ReadingCalculate +{ + public class GeneralCalculateService : BaseService, IGeneralCalculateService + { + + private readonly IRepository _readingTableQuestionAnswerRepository; + private readonly IRepository _visitTaskRepository; + private readonly IRepository _readingQuestionCriterionTrialRepository; + private readonly IRepository _readingTableQuestionTrialRepository; + private readonly IRepository _readingTableAnswerRowInfoRepository; + private readonly IRepository _readingQuestionTrialRepository; + private readonly IRepository _subjectVisitRepository; + private readonly IRepository _tumorAssessmentRepository; + private readonly IRepository _readingTaskQuestionAnswerRepository; + + public GeneralCalculateService( + IRepository readingTableQuestionAnswerRepository, + IRepository visitTaskRepository, + IRepository readingQuestionCriterionTrialRepository, + IRepository readingTableQuestionTrialRepository, + IRepository readingTableAnswerRowInfoRepository, + IRepository readingQuestionTrialRepository, + IRepository subjectVisitRepository, + IRepository tumorAssessmentRepository, + IRepository readingTaskQuestionAnswerRepository + ) + { + this._readingTableQuestionAnswerRepository = readingTableQuestionAnswerRepository; + this._visitTaskRepository = visitTaskRepository; + this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository; + this._readingTableQuestionTrialRepository = readingTableQuestionTrialRepository; + this._readingTableAnswerRowInfoRepository = readingTableAnswerRowInfoRepository; + this._readingQuestionTrialRepository = readingQuestionTrialRepository; + this._subjectVisitRepository = subjectVisitRepository; + this._tumorAssessmentRepository = tumorAssessmentRepository; + this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository; + } + + /// + /// 获取ReadingCalculateDto + /// + /// + /// + public async Task GetReadingCalculateDto(Guid visitTaskId) + { + var visitTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync(); + var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == (visitTask.SourceSubjectVisitId ?? default(Guid))).FirstOrDefaultAsync(); + + var baseLineVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == visitTask.SubjectId && x.IsBaseLine).Select(x => x.Id).FirstOrDefaultAsync(); + + + var rowInfoList = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == visitTaskId).ToListAsync(); + + var baseLinetaskId = await _visitTaskRepository.Where(x => x.SourceSubjectVisitId == baseLineVisitId && x.TaskState == TaskState.Effect + && x.TrialReadingCriterionId == visitTask.TrialReadingCriterionId + && x.ArmEnum == visitTask.ArmEnum).Select(x => x.Id).FirstOrDefaultAsync(); + + List questionInfos = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == visitTask.TrialReadingCriterionId).Select(x => new QuestionInfo() + { + LesionType = x.LesionType, + QuestionId = x.Id, + QuesionName = x.QuestionName, + QuestionType = x.QuestionType, + }).ToListAsync(); + + var questionAnswers = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == visitTaskId).Select(x => new + { + x.ReadingQuestionTrialId, + x.Answer + }).ToListAsync(); + + var tableQuestion = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == visitTaskId).Include(x => x.ReadingTableQuestionTrial).Select(x => new TableQuestionInfo() + { + Answer = x.Answer, + QuestionMark = x.ReadingTableQuestionTrial.QuestionMark, + TableQuestionId = x.TableQuestionId, + QuestionId = x.QuestionId, + QuestionType = x.ReadingQuestionTrial.QuestionType, + RowIndex = x.RowIndex, + RowId = x.RowId, + }).ToListAsync(); + + foreach (var item in questionInfos) + { + item.Answer = questionAnswers.Where(y => y.ReadingQuestionTrialId == item.QuestionId).Select(x => x.Answer).FirstOrDefault() ?? string.Empty; + + + var thisItemRowInfo = rowInfoList.Where(x => x.QuestionId == item.QuestionId).ToList(); + + var thisItemTableQuestions = tableQuestion.Where(x => x.QuestionId == item.QuestionId).ToList(); + + item.TableRowInfoList = thisItemRowInfo.Select(x => new TableRowInfo() + { + RowIndex = x.RowIndex, + MeasureData = x.MeasureData, + TableQuestionList = tableQuestion.Where(y => y.QuestionId == item.QuestionId && y.RowId == x.Id).ToList(), + + }).ToList(); + + + + + } + + ReadingCalculateDto readingData = new ReadingCalculateDto() + { + SubjectId = visitTask.SubjectId, + VisitTaskId = visitTaskId, + SubjectVisitId = visitTask.SourceSubjectVisitId!.Value, + QuestionInfo = questionInfos, + CriterionId = visitTask.TrialReadingCriterionId, + TrialId = visitTask.TrialId, + IsAnalysisCreate = visitTask.IsAnalysisCreate, + IsSelfAnalysis = visitTask.IsSelfAnalysis, + IsBaseLine = subjectVisit!.IsBaseLine, + DoctorUserId = visitTask.DoctorUserId, + TrialReadingCriterionId = visitTask.TrialReadingCriterionId, + BaseLineTaskId = baseLinetaskId, + ArmEnum = visitTask.ArmEnum, + VisitName = subjectVisit.VisitName, + BlindName = subjectVisit.BlindName, + }; + + return readingData; + } + } +} diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs new file mode 100644 index 000000000..5ee6d1ea9 --- /dev/null +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs @@ -0,0 +1,20 @@ +using IRaCIS.Core.Application.Service.Reading.Dto; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IRaCIS.Core.Application.Service +{ + public interface IGeneralCalculateService + { + + /// + /// 获取ReadingCalculateDto + /// + /// + /// + Task GetReadingCalculateDto(Guid visitTaskId); + } +} diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs index 59ce55a4e..12f265cc6 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs @@ -26,6 +26,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate private readonly IRepository _readingQuestionTrialRepository; private readonly IRepository _subjectVisitRepository; private readonly IRepository _tumorAssessmentRepository; + private readonly IGeneralCalculateService _generalCalculateService; private readonly IRepository _readingTaskQuestionAnswerRepository; public RECIST1Point1CalculateService( @@ -37,6 +38,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate IRepository readingQuestionTrialRepository, IRepository subjectVisitRepository, IRepository tumorAssessmentRepository, + IGeneralCalculateService generalCalculateService, IRepository readingTaskQuestionAnswerRepository ) { @@ -48,6 +50,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate this._readingQuestionTrialRepository = readingQuestionTrialRepository; this._subjectVisitRepository = subjectVisitRepository; this._tumorAssessmentRepository = tumorAssessmentRepository; + this._generalCalculateService = generalCalculateService; this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository; } @@ -70,7 +73,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate [HttpPost] public async Task TestCalculate(Guid visitTaskId, QuestionType type) { - ReadingCalculateDto readingData = await GetReadingCalculateDto(visitTaskId); + ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(visitTaskId); await ReadingCalculate(readingData,new List() { type}); } @@ -83,7 +86,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate [HttpPost] public async Task CalculateTask(CalculateTaskInDto inDto) { - ReadingCalculateDto readingData = await GetReadingCalculateDto(inDto.VisitTaskId); + ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(inDto.VisitTaskId); readingData.IsChangeOtherTask = inDto.IsChangeOtherTask; await ReadingCalculate(readingData); } @@ -273,7 +276,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// public async Task GetReportTumor(Guid visitTaskId) { - return await GetTumor(await GetReadingCalculateDto(visitTaskId)); + return await GetTumor(await _generalCalculateService.GetReadingCalculateDto(visitTaskId)); } /// @@ -283,7 +286,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// public async Task GetReportIsExistDisease(Guid visitTaskId) { - return await GetIsExistDisease(await GetReadingCalculateDto(visitTaskId)); + return await GetIsExistDisease(await _generalCalculateService.GetReadingCalculateDto(visitTaskId)); } /// @@ -347,93 +350,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } - /// - /// 获取ReadingCalculateDto - /// - /// - /// - public async Task GetReadingCalculateDto(Guid visitTaskId) - { - var visitTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync(); - var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == (visitTask.SourceSubjectVisitId ?? default(Guid))).FirstOrDefaultAsync(); - - var baseLineVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == visitTask.SubjectId && x.IsBaseLine).Select(x => x.Id).FirstOrDefaultAsync(); - - - var rowInfoList = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == visitTaskId).ToListAsync(); - - var baseLinetaskId = await _visitTaskRepository.Where(x => x.SourceSubjectVisitId == baseLineVisitId && x.TaskState == TaskState.Effect - && x.TrialReadingCriterionId == visitTask.TrialReadingCriterionId - && x.ArmEnum == visitTask.ArmEnum).Select(x => x.Id).FirstOrDefaultAsync(); - - List questionInfos = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == visitTask.TrialReadingCriterionId).Select(x => new QuestionInfo() - { - LesionType = x.LesionType, - QuestionId = x.Id, - QuesionName = x.QuestionName, - QuestionType = x.QuestionType, - }).ToListAsync(); - - var questionAnswers = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == visitTaskId).Select(x => new - { - x.ReadingQuestionTrialId, - x.Answer - }).ToListAsync(); - - var tableQuestion = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == visitTaskId).Include(x => x.ReadingTableQuestionTrial).Select(x => new TableQuestionInfo() - { - Answer = x.Answer, - QuestionMark = x.ReadingTableQuestionTrial.QuestionMark, - TableQuestionId = x.TableQuestionId, - QuestionId = x.QuestionId, - QuestionType = x.ReadingQuestionTrial.QuestionType, - RowIndex = x.RowIndex, - RowId = x.RowId, - }).ToListAsync(); - - foreach (var item in questionInfos) - { - item.Answer = questionAnswers.Where(y => y.ReadingQuestionTrialId == item.QuestionId).Select(x => x.Answer).FirstOrDefault() ?? string.Empty; - - - var thisItemRowInfo = rowInfoList.Where(x => x.QuestionId == item.QuestionId).ToList(); - - var thisItemTableQuestions = tableQuestion.Where(x => x.QuestionId == item.QuestionId).ToList(); - - item.TableRowInfoList = thisItemRowInfo.Select(x => new TableRowInfo() - { - RowIndex = x.RowIndex, - MeasureData = x.MeasureData, - TableQuestionList = tableQuestion.Where(y => y.QuestionId == item.QuestionId && y.RowId == x.Id).ToList(), - - }).ToList(); - - - - - } - - ReadingCalculateDto readingData = new ReadingCalculateDto() - { - SubjectId = visitTask.SubjectId, - VisitTaskId = visitTaskId, - SubjectVisitId = visitTask.SourceSubjectVisitId!.Value, - QuestionInfo = questionInfos, - CriterionId = visitTask.TrialReadingCriterionId, - TrialId = visitTask.TrialId, - IsAnalysisCreate=visitTask.IsAnalysisCreate, - IsSelfAnalysis=visitTask.IsSelfAnalysis, - IsBaseLine = subjectVisit!.IsBaseLine, - DoctorUserId = visitTask.DoctorUserId, - TrialReadingCriterionId= visitTask.TrialReadingCriterionId, - BaseLineTaskId = baseLinetaskId, - ArmEnum = visitTask.ArmEnum, - VisitName = subjectVisit.VisitName, - BlindName = subjectVisit.BlindName, - }; - - return readingData; - } + #region 将上一次的访视病灶添加到这一次