获取PT CT 序列
parent
a15c91ebcb
commit
78756aa2f4
|
@ -1645,7 +1645,8 @@ namespace IRaCIS.Application.Services
|
||||||
var needFilterState = new List<string>();
|
var needFilterState = new List<string>();
|
||||||
|
|
||||||
var query = _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == rowinfo.VisitTaskId && x.QuestionId == rowinfo.QuestionId && x.Id != rowinfo.Id)
|
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)
|
switch (taskInfo.TrialReadingCriterion.CriterionType)
|
||||||
{
|
{
|
||||||
|
@ -1855,6 +1856,15 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
IsDeleted = true
|
IsDeleted = true
|
||||||
});
|
});
|
||||||
|
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,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.RowId, x => new ReadingTableAnswerRowInfo()
|
await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.RowId, x => new ReadingTableAnswerRowInfo()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -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 class VisitStudyDTO
|
||||||
{
|
{
|
||||||
public Guid StudyId { get; set; }
|
public Guid StudyId { get; set; }
|
||||||
|
|
|
@ -10,6 +10,7 @@ using IRaCIS.Core.Infrastructure;
|
||||||
using IRaCIS.Core.Application.Auth;
|
using IRaCIS.Core.Application.Auth;
|
||||||
using IRaCIS.Core.Infra.EFCore.Common;
|
using IRaCIS.Core.Infra.EFCore.Common;
|
||||||
using MassTransit;
|
using MassTransit;
|
||||||
|
using IRaCIS.Core.Application.Service.Reading.Dto;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Services
|
namespace IRaCIS.Core.Application.Services
|
||||||
{
|
{
|
||||||
|
@ -320,6 +321,99 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取PTAndCtSeries
|
||||||
|
/// </summary>
|
||||||
|
/// <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>
|
/// <summary>
|
||||||
/// 获取访视下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的
|
/// 获取访视下的Dicom 检查信息 分所有的, 阅片的 不阅片 isReading : 0 查询所有 1 查询仅仅阅片的
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Reference in New Issue