获取PT CT 序列

IRC_NewDev
he 2024-03-19 11:18:58 +08:00
parent a15c91ebcb
commit 78756aa2f4
3 changed files with 127 additions and 7 deletions

View File

@ -1645,7 +1645,8 @@ namespace IRaCIS.Application.Services
var needFilterState = new List<string>();
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)

View File

@ -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<Guid> VisitTaskIds { get; set; }
}
public class VisitStudyDTO
{
public Guid StudyId { get; set; }

View File

@ -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
}
/// <summary>
/// 获取访视下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的
/// 获取PTAndCtSeries
/// </summary>
/// <param name="indto"></param>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<GetPTAndCtSeriesOutDto>> 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<GetPTAndCtSeriesOutDto> result = new List<GetPTAndCtSeriesOutDto>();
List<Guid> seriesIds = new List<Guid>();
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<DicomSeriesDTO> seriesLists = await _repository.Where<DicomSeries>(s => seriesIds.Contains(s.Id)).ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).ToListAsync();
var instanceList = await _repository.Where<DicomInstance>(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<string>();
for (int i = 1; i <= u.NumberOfFrames; i++)
{
pathList.Add(u.Path + "?frame=" + (i - 1));
}
return pathList;
}
else
{
return new List<string> { 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;
}
/// <summary>
/// 获取访视下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的
/// </summary>
/// <param name="indto"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<VisitStudyDTO>> GetReadingVisitStudyList(GetReadingVisitStudyListIndto indto)
{
var result = new List<VisitStudyDTO>();