diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomSeriesModel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomSeriesModel.cs index 46416894..4d348f7e 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomSeriesModel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomSeriesModel.cs @@ -5,6 +5,8 @@ public bool IsDicom { get; set; } = true; + public bool IsBeMark { get; set; } = false; + public Guid Id { get; set; } public Guid StudyId { get; set; } public string StudyInstanceUid { get; set; } = String.Empty; diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 67d917fb..82dfadde 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -229,6 +229,7 @@ namespace IRaCIS.Application.Services var readingPastResultList = await _visitTaskRepository.Where(x => x.TrialId == taskInfo.TrialId && x.SubjectId == taskInfo.SubjectId && + x.VisitTaskNum<= taskInfo.VisitTaskNum&& x.ArmEnum == taskInfo.ArmEnum && x.Id != inDto.VisitTaskId && x.DoctorUserId == taskInfo.DoctorUserId && diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs index cfa42598..566c028b 100644 --- a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs +++ b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs @@ -189,6 +189,8 @@ namespace IRaCIS.Core.Application.Contracts public string StudyCode { get; set; } = String.Empty; public string Modalities { get; set; } = String.Empty; + public bool IsLastTaskStudy { get; set; } = false; + public int SeriesCount { get; set; } public int InstanceCount { get; set; } diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index a86a52bb..a1571ed6 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -21,6 +21,8 @@ namespace IRaCIS.Core.Application.Services private readonly IRepository _trialRepository; private readonly IRepository _readingPeriodSetRepository; private readonly IRepository _noneDicomStudyRepository; + private readonly IRepository _visitTaskRepository; + private readonly IRepository _readingTableAnswerRowInfoRepository; private readonly IRepository _noneDicomStudyFileRepository; private readonly IRepository _readingPeriodPlanRepository; private readonly IRepository _subjectRepository; @@ -30,6 +32,8 @@ namespace IRaCIS.Core.Application.Services IRepository trialRepository, IRepository readingPeriodSetRepository, IRepository noneDicomStudyRepository, + IRepository visitTaskRepository, + IRepository readingTableAnswerRowInfoRepository, IRepository noneDicomStudyFileRepository, IRepository readingPeriodPlanRepository, IRepository subjectRepository) @@ -39,6 +43,8 @@ namespace IRaCIS.Core.Application.Services this._trialRepository = trialRepository; this._readingPeriodSetRepository = readingPeriodSetRepository; this._noneDicomStudyRepository = noneDicomStudyRepository; + this._visitTaskRepository = visitTaskRepository; + this._readingTableAnswerRowInfoRepository = readingTableAnswerRowInfoRepository; this._noneDicomStudyFileRepository = noneDicomStudyFileRepository; this._readingPeriodPlanRepository = readingPeriodPlanRepository; _subjectRepository = subjectRepository; @@ -230,11 +236,65 @@ namespace IRaCIS.Core.Application.Services /// /// /// + /// /// - [HttpGet, Route("{trialId:guid}/{sujectVisitId:guid}")] + [HttpGet, Route("{trialId:guid}/{sujectVisitId:guid}/{visitTaskId}")] [AllowAnonymous] - public async Task> GetReadingVisitStudyList(Guid trialId, Guid sujectVisitId) + public async Task> GetReadingVisitStudyList(Guid trialId, Guid sujectVisitId,Guid visitTaskId) { + var result = new List(); + + var thisRowinfo = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == visitTaskId && x.StudyId != null).ToListAsync(); + + + var taskInfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync(); + var lasttask = await _visitTaskRepository.Where(x => + x.TrialId == taskInfo.TrialId && + x.SubjectId == taskInfo.SubjectId && + x.VisitTaskNum < taskInfo.VisitTaskNum && + x.ArmEnum == taskInfo.ArmEnum && + x.ReadingCategory == taskInfo.ReadingCategory && + x.Id != visitTaskId && + x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && + x.ReadingTaskState == ReadingTaskState.HaveSigned && + x.TaskState == TaskState.Effect && + x.IsAnalysisCreate == taskInfo.IsAnalysisCreate).OrderByDescending(x => x.VisitTaskNum).FirstOrDefaultAsync(); + if(lasttask != null) + { + var lastRowinfo = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == lasttask.Id && x.StudyId != null).ToListAsync(); + var lastStudyIds = lastRowinfo.Select(x => x.StudyId).ToList(); + var lastSeriesIdIds = lastRowinfo.Where(x=>x.SeriesId!=null).Select(x => x.SeriesId).ToList(); + if (lastRowinfo.Count>0) + { + var lastVisitTaskStudy= await _repository.Where(t => lastStudyIds.Contains(t.Id)).Select(k => new VisitStudyDTO() + { + InstanceCount = k.InstanceCount, + Modalities = k.Modalities, + SeriesCount = k.SeriesCount, + StudyCode = k.StudyCode, + StudyId = k.Id, + IsLastTaskStudy=true, + + }).FirstOrDefaultAsync(); + + if (lastVisitTaskStudy != null) + { + lastVisitTaskStudy.SeriesList = await _repository.Where(s => lastSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber). + ThenBy(s => s.SeriesTime) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + lastVisitTaskStudy.SeriesCount = lastVisitTaskStudy.SeriesList.Count(); + + lastVisitTaskStudy.SeriesList.ForEach(x => + { + x.InstanceList = lastRowinfo.Where(y => y.SeriesId == x.Id&&y.InstanceId!=null).Select(y => y.InstanceId.Value).ToList(); + x.InstanceCount = x.InstanceList.Count(); + }); + } + result.Add(lastVisitTaskStudy); + } + } + + var studyList = await _repository.Where(t => t.TrialId == trialId && t.SubjectVisitId == sujectVisitId).Select(k => new VisitStudyDTO() { InstanceCount = k.InstanceCount, @@ -255,7 +315,6 @@ namespace IRaCIS.Core.Application.Services ThenBy(s => s.SeriesTime) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - t.SeriesList.ForEach(series => series.InstanceList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k => k.Id).ToList()); //设置为阅片与否 不更改数据库检查 的instance数量 和 SeriesCount 所以这里要实时统计 @@ -310,9 +369,16 @@ namespace IRaCIS.Core.Application.Services studyList.AddRange(noDicomStudyList); - + studyList.ForEach(x => + { + x.SeriesList.ForEach(y => + { + y.IsBeMark = thisRowinfo.Any(z => z.SeriesId == y.Id); + }); - return studyList; + }); + result.AddRange(studyList); + return result; //return ResponseOutput.Ok(studyList.Where(t => t.SeriesList.Count > 0).ToList());