增加影像检查下载

IRC_NewDev
hang 2024-08-29 10:59:18 +08:00
parent 0e0cf881be
commit b1d6d20800
9 changed files with 188 additions and 4 deletions

View File

@ -34,6 +34,7 @@ using Microsoft.AspNetCore.Diagnostics;
using IRaCIS.Core.Application.MassTransit.Command;
using IRaCIS.Core.Application.MassTransit.Consumer;
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
#region 获取环境变量
//以配置文件为准,否则 从url中取环境值(服务以命令行传递参数启动,配置文件配置了就不需要传递环境参数)

View File

@ -43,6 +43,25 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO
}
public class SubjectUploadTaskInfo
{
public Guid VisitTaskId { get; set; }
public Guid SubjectId { get; set; }
public string SubjectCode { get; set; }
public string TaskBlindName { get; set; }
public string TaskName { get; set; }
public bool IsImageFilter { get; set; }
public string CriterionModalitys { get; set; }
public Guid? SourceSubjectVisitId { get; set; }
}
public class SubjectCRCImageUploadedDto
{
public Guid VisitTaskId { get; set; }

View File

@ -1,4 +1,5 @@
using Newtonsoft.Json;
using IRaCIS.Core.Application.Service.ImageAndDoc.DTO;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
@ -364,6 +365,46 @@ namespace IRaCIS.Core.Application.Contracts
public decimal FileFize { get; set; }
}
public class CRCUploadTaskQuery
{
[NotDefault]
public Guid SubjectId { get; set; }
[NotDefault]
public Guid TrialReadingCriterionId { get; set; }
[NotDefault]
public string SubjectCode { get; set; }
}
public class CRCUploadTaskStudyQuery: SortInput
{
[NotDefault]
public Guid VisitTaskId { get; set; }
}
public class IRUploadTaskDicomStudyDto : DicomStudyBasicInfo
{
public int UploadedSeriesCount { get; set; }
public int UploadedInstanceCount { get; set; }
public List<string> UploadedSopInstanceUidList { get; set; }
}
public class IRUploadTaskNoneDicomStudyDto : NoneDicomStudyBasicInfo
{
public int UploadedFileCount { get; set; }
}
public class CRCUploadedStudyQuqry
{
[NotDefault]

View File

@ -670,6 +670,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
/// <param name="isDicom"></param>
/// <param name="isAnonymize"></param>
/// <returns></returns>
[HttpPost]
public async Task PackageAndAnonymizImage(Guid trialId, Guid subjectVisitId, bool isDicom, bool isAnonymize = true)
{
@ -894,6 +895,91 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
}
/// <summary>
/// IR 影像上传任务列表
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<SubjectUploadTaskInfo>> GetIRUploadTaskList(CRCUploadTaskQuery inQuery)
{
var query = _visitTaskRepository.Where(t => t.SubjectId == inQuery.SubjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId
&& t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id && t.TaskState == TaskState.Effect)
.ProjectTo<SubjectUploadTaskInfo>(_mapper.ConfigurationProvider);
var list = await query.Where(t => t.SubjectCode == inQuery.SubjectCode).ToListAsync();
return list;
}
/// <summary>
/// IR 上传任务 dicom 列表 后处理的数据不能排序
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<IRUploadTaskDicomStudyDto>> GetIRUploadTaskDicomStudyList(CRCUploadTaskStudyQuery inQuery)
{
var list = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId)
.SelectMany(t => t.SourceSubjectVisit.StudyList)
.ProjectTo<IRUploadTaskDicomStudyDto>(_mapper.ConfigurationProvider).SortToListAsync(inQuery);
var taskDicomStudyList = _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId)
.SelectMany(t => t.TaskStudyList)
.Select(u => new
{
u.Id,
u.SeriesCount,
u.InstanceCount,
SopInstanceList = u.InstanceList.Select(t => t.SopInstanceUid).ToList()
})
.ToList();
foreach (var item in list)
{
var find = taskDicomStudyList.FirstOrDefault(t => t.Id == item.Id);
if (find != null)
{
item.UploadedInstanceCount = find.InstanceCount;
item.UploadedSopInstanceUidList = find.SopInstanceList;
item.UploadedSeriesCount = find.SeriesCount;
}
}
return list;
}
/// <summary>
/// IR 上传任务 nonedicom 列表 后处理的数据不能排序
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<IRUploadTaskNoneDicomStudyDto>> GetIRUploadTaskNoneDicomStudyList(CRCUploadTaskStudyQuery inQuery)
{
var list = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId)
.SelectMany(t => t.SourceSubjectVisit.StudyList)
.ProjectTo<IRUploadTaskNoneDicomStudyDto>(_mapper.ConfigurationProvider).SortToListAsync(inQuery);
var taskNoneDicomStudyList = _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId)
.SelectMany(t => t.TaskNoneDicomStudyFileList).Where(t => t.VisitTaskId == inQuery.VisitTaskId)
.Select(u => new
{
u.OriginNoneDicomStudyId,
})
.ToList();
foreach (var item in list)
{
item.UploadedFileCount = taskNoneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).Count();
}
return list;
}
/// <summary>
/// IQC 获取CRC 上传到某一个访视的的检查信息 (原始影像信息 包含dicom 非dicom)
@ -963,6 +1049,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<SubjectCRCImageUploadedDto>> GetSubjectImageDownloadSelectList(IRReadingDownloadQuery inQuery)
{
@ -970,8 +1057,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
&& t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id && t.TaskState == TaskState.Effect)
.ProjectTo<SubjectCRCImageUploadedDto>(_mapper.ConfigurationProvider);
var list = await query.Where(t=>t.SubjectCode==inQuery.SubjectCode).ToListAsync();
var list = await query.Where(t => t.SubjectCode == inQuery.SubjectCode).ToListAsync();
return list;
@ -992,7 +1079,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var isQueryDicom = inQuery.DicomStudyIdList.Count > 0;
var isQueryNoneDicom = inQuery.NoneDicomStudyIdList.Count > 0;
var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t=>inQuery.SubjectVisitIdList.Contains(t.Id)))
var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => inQuery.SubjectVisitIdList.Contains(t.Id)))
select new
{

View File

@ -125,6 +125,12 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.VisitNum, u => u.MapFrom(s => s.SubjectVisit.VisitNum))
.ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName));
CreateMap<VisitTask, SubjectUploadTaskInfo>()
.ForMember(d => d.VisitTaskId, u => u.MapFrom(s => s.Id))
.ForMember(d => d.IsImageFilter, u => u.MapFrom(s => s.TrialReadingCriterion.IsImageFilter))
.ForMember(d => d.CriterionModalitys, u => u.MapFrom(s => s.TrialReadingCriterion.CriterionModalitys))
.ForMember(d => d.SubjectCode, u => u.MapFrom(u => u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code));
CreateMap<DicomStudy, DicomStudyBasicInfo>();
CreateMap<NoneDicomStudy, NoneDicomStudyBasicInfo>();
CreateMap<VisitTask, SubjectCRCImageUploadedDto>()

View File

@ -23,6 +23,8 @@ namespace IRaCIS.Core.Domain.Models
[JsonIgnore]
public List<TaskStudy> TaskStudyList { get; set; }
public List<NoneDicomStudyFile> TaskNoneDicomStudyFileList { get; set; }
[JsonIgnore]
[ForeignKey("TrialReadingCriterionId")]
public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }

View File

@ -44,6 +44,10 @@ namespace IRaCIS.Core.Domain.Models
public Guid? VisitTaskId { get; set; }
/// <summary>
/// 为了不影响原始检查,跟任务绑定的 NoneDicomStudyId 为guid空 这个字段记录跟原始检查绑
/// </summary>
public Guid? OriginNoneDicomStudyId { get; set; }
#endregion

View File

@ -165,6 +165,24 @@ namespace IRaCIS.Core.Infrastructure.Extention
}
public static async Task<List<T>> SortToListAsync<T>(this IQueryable<T> source, SortInput sortInput, string sortField="", CancellationToken cancellationToken = default)
{
var propName = string.Empty;
if (string.IsNullOrWhiteSpace(sortInput.SortField))
{
propName = sortField;
}
else
{
propName = sortInput.SortField;
}
source = string.IsNullOrWhiteSpace(propName) ? source : (sortInput.Asc ? source.OrderBy(propName) : source.OrderBy(propName + " desc"));
return await source.ToListAsync(cancellationToken);
}
}
}

View File

@ -13,6 +13,12 @@ namespace IRaCIS.Core.Infrastructure.Extention
public string SortField { get; set; } = "";
}
public class SortInput
{
public bool Asc { get; set; } = true;
public string SortField { get; set; } = "";
}
public class PageInputMultiSort
{
public int PageIndex { get; set; } = 1;