diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 5257b08f6..be71604f0 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -1645,7 +1645,8 @@ namespace IRaCIS.Application.Services var needFilterState = new List(); var query = _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == rowinfo.VisitTaskId && x.QuestionId == rowinfo.QuestionId && x.Id != rowinfo.Id) - .Where(x => x.SplitOrMergeType != SplitOrMergeType.Split && x.SplitOrMergeType != SplitOrMergeType.SplitMain&&x.SplitOrMergeType!=SplitOrMergeType.Merge && x.SplitOrMergeType != SplitOrMergeType.MergeMain); + .Where(x => x.SplitOrMergeType != SplitOrMergeType.Split && x.SplitOrMergeType != SplitOrMergeType.SplitMain + &&x.SplitOrMergeType!=SplitOrMergeType.Merge && x.SplitOrMergeType != SplitOrMergeType.MergeMain && x.SplitOrMergeType != SplitOrMergeType.MergeMained); switch (taskInfo.TrialReadingCriterion.CriterionType) { @@ -1855,12 +1856,21 @@ namespace IRaCIS.Application.Services IsDeleted = true }); - await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.RowId, x => new ReadingTableAnswerRowInfo() + if (!(await _readingTableAnswerRowInfoRepository.AnyAsync(x => x.SplitRowId == deleteRowInfo.SplitRowId && x.Id != deleteRowInfo.Id))) { + await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => x.Id == deleteRowInfo.SplitRowId, x => new ReadingTableAnswerRowInfo() + { + SplitOrMergeType = null, + }); + } + - IsDeleted = true - }); - await _readingTableAnswerRowInfoRepository.SaveChangesAsync(); + await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.RowId, x => new ReadingTableAnswerRowInfo() + { + + IsDeleted = true + }); + await _readingTableAnswerRowInfoRepository.SaveChangesAsync(); if (inDto.IsNeedSort) diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs index 98fe2a280..799a3f754 100644 --- a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs +++ b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs @@ -203,6 +203,22 @@ namespace IRaCIS.Core.Application.Contracts } + public class GetPTAndCtSeriesOutDto + { + public Guid VisitTaskId { get; set; } + public Guid CTSeriesId { get; set; } + public Guid PTSeriesId { get; set; } + + public DicomSeriesDTO? CTSeries { get; set; } + + public DicomSeriesDTO? PTSeries { get; set; } + } + + public class GetPTAndCtSeriesInDto + { + public List VisitTaskIds { get; set; } + } + public class VisitStudyDTO { public Guid StudyId { get; set; } diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 79488fdd3..33714e927 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -10,6 +10,7 @@ using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Application.Auth; using IRaCIS.Core.Infra.EFCore.Common; using MassTransit; +using IRaCIS.Core.Application.Service.Reading.Dto; namespace IRaCIS.Core.Application.Services { @@ -321,11 +322,104 @@ namespace IRaCIS.Core.Application.Services } /// - /// 获取访视下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的 + /// 获取PTAndCtSeries /// - /// + /// /// [HttpPost] + public async Task> GetPTAndCtSeries(GetPTAndCtSeriesInDto inDto) + { + var visitSeriesList=await _readingTableAnswerRowInfoRepository.Where(x => inDto.VisitTaskIds.Contains(x.VisitTaskId)) + .Where(x => x.PTSeriesId != null && x.CTSeriesId != null) + .Select(x => new + { + x.PTSeriesId, + x.CTSeriesId, + x.VisitTaskId, + x.VisitTask.VisitTaskNum, + x.UpdateTime + }).ToListAsync(); + + List result = new List(); + + List seriesIds = new List(); + + + foreach (var item in inDto.VisitTaskIds) + { + var visitSeries = visitSeriesList.Where(x => x.VisitTaskId == item).OrderByDescending(x => x.UpdateTime).FirstOrDefault(); + if (visitSeries != null) + { + result.Add(new GetPTAndCtSeriesOutDto() + { + PTSeriesId = visitSeries.PTSeriesId!.Value, + CTSeriesId = visitSeries.CTSeriesId!.Value, + }); + + seriesIds.Add(visitSeries.PTSeriesId!.Value); + seriesIds.Add(visitSeries.CTSeriesId!.Value); + } + + } + + + + List seriesLists = await _repository.Where(s => seriesIds.Contains(s.Id)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + var instanceList = await _repository.Where(t => seriesIds.Contains(t.SeriesId)) + .Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync(); + + seriesLists.ForEach(series => + { + series.InstanceList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k => k.Id).ToList(); + + + series.InstanceHtmlPathList = instanceList.Where(t => t.SeriesId == series.Id && t.HtmlPath != string.Empty).OrderBy(t => t.InstanceNumber).Select(k => k.HtmlPath).ToList(); + + //处理多帧 + series.InstancePathList = instanceList.Where(s => s.SeriesId == series.Id).OrderBy(t => t.InstanceNumber) + .SelectMany(u => + { + + if (u.NumberOfFrames > 1) + { + var pathList = new List(); + + for (int i = 1; i <= u.NumberOfFrames; i++) + { + pathList.Add(u.Path + "?frame=" + (i - 1)); + } + return pathList; + } + else + { + return new List { u.Path }; + + } + }) + .ToList(); + + series.WindowWidth = instanceList.FirstOrDefault()!.WindowWidth; + series.WindowCenter = instanceList.FirstOrDefault()!.WindowCenter; + }); + + + foreach (var item in result) + { + item.PTSeries = seriesLists.Where(x => x.Id == item.PTSeriesId).FirstOrDefault(); + item.CTSeries = seriesLists.Where(x => x.Id == item.CTSeriesId).FirstOrDefault(); + } + + return result; + } + + + /// + /// 获取访视下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的 + /// + /// + /// + [HttpPost] public async Task> GetReadingVisitStudyList(GetReadingVisitStudyListIndto indto) { var result = new List();