影像下载和上传入口增加
parent
f14d4bf373
commit
9f4e43e20a
|
@ -22,7 +22,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO
|
|||
public string TaskName { get; set; }
|
||||
|
||||
public bool IsImageFilter { get; set; }
|
||||
public string CriterionModalitys { get; set; }
|
||||
public string CriterionModalitys { get; set; }
|
||||
|
||||
public Guid? SourceSubjectVisitId { get; set; }
|
||||
public PackState PackState { get; set; }
|
||||
|
@ -33,7 +33,40 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO
|
|||
|
||||
}
|
||||
|
||||
public class StudyBasicInfo
|
||||
|
||||
|
||||
|
||||
public class StudyBasicInfo : DicomStudyBasicInfo
|
||||
{
|
||||
|
||||
public List<string> SopInstanceUidList { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class SubjectCRCImageUploadedDto
|
||||
{
|
||||
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 List<DicomStudyBasicInfo> DicomStudyList { get; set; }
|
||||
|
||||
public List<NoneDicomStudyBasicInfo> NoneDicomStudyList { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class DicomStudyBasicInfo
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string StudyInstanceUid { get; set; }
|
||||
|
@ -54,8 +87,26 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO
|
|||
public string Description { get; set; }
|
||||
public int SeriesCount { get; set; }
|
||||
public int InstanceCount { get; set; }
|
||||
}
|
||||
|
||||
public List<string> SopInstanceUidList { get; set; }
|
||||
public class NoneDicomStudyBasicInfo
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public string StudyCode { get; set; } = string.Empty;
|
||||
|
||||
public int FileCount { get; set; }
|
||||
|
||||
public string BodyPart { get; set; }
|
||||
|
||||
public string Modality { get; set; }
|
||||
|
||||
public DateTime ImageDate { get; set; }
|
||||
|
||||
public string Description { get; set; } = string.Empty;
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -377,7 +377,30 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public class IRReadingDownloadQuery
|
||||
{
|
||||
[NotDefault]
|
||||
public Guid VisitTaskId { get; set; }
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
public string SubjectCode { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class IRDownloadQuery
|
||||
{
|
||||
[NotDefault]
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
[NotDefault]
|
||||
public Guid TrialReadingCriterionId { get; set; }
|
||||
|
||||
public string SubjectCode { get; set; }
|
||||
|
||||
public List<Guid> SubjectVisitIdList { get; set; }
|
||||
|
||||
public List<Guid> DicomStudyIdList { get; set; }
|
||||
|
||||
public List<Guid> NoneDicomStudyIdList { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -914,8 +914,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
SubjectCode = sv.Subject.Code,
|
||||
VisitName = sv.VisitName,
|
||||
|
||||
StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id):false)
|
||||
|
||||
StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false)
|
||||
|
||||
.Select(u => new
|
||||
{
|
||||
u.PatientId,
|
||||
|
@ -935,8 +935,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
|
||||
}).ToList(),
|
||||
|
||||
NoneDicomStudyList = sv.NoneDicomStudyList.Where( t => isQueryNoneDicom?inQuery.NoneDicomStudyIdList.Contains(t.Id):false)
|
||||
|
||||
NoneDicomStudyList = sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false)
|
||||
|
||||
.Select(nd => new
|
||||
{
|
||||
nd.Modality,
|
||||
|
@ -952,44 +952,53 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
}).ToList()
|
||||
};
|
||||
|
||||
var result = query.ToList();
|
||||
var result = query.FirstOrDefault();
|
||||
|
||||
return ResponseOutput.Ok(result);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// IR 阅片页面获取下载检查的信息 会根据标准进行过滤检查,(后端要考虑到一致性分析 subjectCode的问题)
|
||||
/// IR 阅片页面 和IR 任务列表页面下载 勾选下载列表(后端要考虑到一致性分析 subjectCode的问题)
|
||||
/// </summary>
|
||||
/// <param name="inQuery"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput> GetIRReadingDownloadStudyInfo(IRReadingDownloadQuery inQuery)
|
||||
public async Task<List<SubjectCRCImageUploadedDto>> GetSubjectImageDownloadSelectList(IRReadingDownloadQuery inQuery)
|
||||
{
|
||||
var taskInfo = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId)
|
||||
.Select(t => new
|
||||
{
|
||||
t.BlindSubjectCode,
|
||||
t.IsAnalysisCreate,
|
||||
t.SourceSubjectVisitId,
|
||||
t.TrialReadingCriterion.IsImageFilter,
|
||||
t.TrialReadingCriterion.CriterionModalitys
|
||||
})
|
||||
.FirstNotNullAsync();
|
||||
|
||||
if (taskInfo.SourceSubjectVisitId == null)
|
||||
{
|
||||
return ResponseOutput.NotOk("请开发核实传递的参数,该查询任务关联访视Id没有值");
|
||||
}
|
||||
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<SubjectCRCImageUploadedDto>(_mapper.ConfigurationProvider);
|
||||
|
||||
var query = from sv in _subjectVisitRepository.Where(t => t.Id == taskInfo.SourceSubjectVisitId)
|
||||
|
||||
var list = await query.Where(t=>t.SubjectCode==inQuery.SubjectCode).ToListAsync();
|
||||
|
||||
return list;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// IR 阅片页面获取下载检查的信息 会根据标准进行过滤检查,(后端要考虑到一致性分析 subjectCode的问题)
|
||||
/// </summary>
|
||||
/// <param name="inQuery"></param>
|
||||
/// <param name="_subjectRepository"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput> GetIRReadingDownloadStudyInfo(IRDownloadQuery inQuery, [FromServices] IRepository<Subject> _subjectRepository)
|
||||
{
|
||||
var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId)
|
||||
.Select(t => new { t.IsImageFilter, t.CriterionModalitys }).FirstNotNullAsync();
|
||||
|
||||
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)))
|
||||
|
||||
select new
|
||||
{
|
||||
SubjectCode = sv.Subject.Code,
|
||||
VisitName = sv.VisitName,
|
||||
StudyList = sv.StudyList.AsQueryable().WhereIf(taskInfo.IsImageFilter, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))
|
||||
StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false)
|
||||
.Select(u => new
|
||||
{
|
||||
u.PatientId,
|
||||
|
@ -1008,7 +1017,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
|
||||
}),
|
||||
|
||||
NoneDicomStudyList = sv.NoneDicomStudyList.AsQueryable().WhereIf(taskInfo.IsImageFilter, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|"))
|
||||
NoneDicomStudyList = sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false)
|
||||
.Select(nd => new
|
||||
{
|
||||
nd.Modality,
|
||||
|
@ -1024,7 +1033,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
})
|
||||
};
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
|
||||
var result = await query.FirstOrDefaultAsync();
|
||||
|
||||
return ResponseOutput.Ok(result);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ using IRaCIS.Application.Contracts;
|
|||
using IRaCIS.Core.Application.Contracts;
|
||||
using IRaCIS.Core.Application.Contracts.Dicom.DTO;
|
||||
using IRaCIS.Core.Application.Contracts.DTO;
|
||||
using IRaCIS.Core.Application.Service.ImageAndDoc.DTO;
|
||||
using IRaCIS.Core.Application.ViewModel;
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
|
||||
|
@ -60,17 +61,17 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(o => o.StudyTime, t => t.MapFrom(u => u.DicomStudy.StudyTime))
|
||||
|
||||
.ForMember(o => o.StudyCode, t => t.MapFrom(u => u.DicomStudy.StudyCode))
|
||||
//.ForMember(o => o.InstanceList, t => t.MapFrom(u => u.DicomInstanceList.Select(t=>t.Id).ToArray()))
|
||||
// .ForMember(o => o.InstancePathList, t => t.MapFrom(u => u.DicomInstanceList.OrderBy(t=>t.InstanceNumber).Select(t => t.Path)))
|
||||
//.ForMember(o => o.InstanceList, t => t.MapFrom(u => u.DicomInstanceList.Select(t=>t.Id).ToArray()))
|
||||
// .ForMember(o => o.InstancePathList, t => t.MapFrom(u => u.DicomInstanceList.OrderBy(t=>t.InstanceNumber).Select(t => t.Path)))
|
||||
;
|
||||
|
||||
CreateMap<DicomStudy, QAStudyInfoDTO>()
|
||||
.ForMember(o => o.IsCompleteClinicalData, t => t.MapFrom(u => !u.ReadingClinicalDataList.Any(x=>x.ReadingClinicalDataPDFList.Count()==0)))
|
||||
.ForMember(o => o.UploadedTime, t => t.MapFrom(u => u.CreateTime))
|
||||
.ForMember(o => o.IsCompleteClinicalData, t => t.MapFrom(u => !u.ReadingClinicalDataList.Any(x => x.ReadingClinicalDataPDFList.Count() == 0)))
|
||||
.ForMember(o => o.UploadedTime, t => t.MapFrom(u => u.CreateTime))
|
||||
.ForMember(o => o.Uploader, t => t.MapFrom(u => u.Uploader.LastName + " / " + u.Uploader.FirstName))
|
||||
.ForMember(o => o.StudyId, t => t.MapFrom(u => u.Id))
|
||||
.ForMember(o => o.IsHaveUploadFailed, t => t.MapFrom(u => u.DicomStudyMonitorList.Any(t=>t.FailedFileCount>0)))
|
||||
.ForMember(o => o.Modalities, t => t.MapFrom(u => string.Join('、', u.SeriesList.Select(t => t.Modality).Distinct()) ));
|
||||
.ForMember(o => o.IsHaveUploadFailed, t => t.MapFrom(u => u.DicomStudyMonitorList.Any(t => t.FailedFileCount > 0)))
|
||||
.ForMember(o => o.Modalities, t => t.MapFrom(u => string.Join('、', u.SeriesList.Select(t => t.Modality).Distinct())));
|
||||
|
||||
|
||||
|
||||
|
@ -124,10 +125,19 @@ 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<DicomStudy, DicomStudyBasicInfo>();
|
||||
CreateMap<NoneDicomStudy, NoneDicomStudyBasicInfo>();
|
||||
CreateMap<VisitTask, SubjectCRCImageUploadedDto>()
|
||||
.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))
|
||||
.ForMember(d => d.DicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.StudyList))
|
||||
.ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.NoneDicomStudyList))
|
||||
;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -18,6 +18,10 @@ namespace IRaCIS.Core.Domain.Models
|
|||
#region 导航属性
|
||||
[JsonIgnore]
|
||||
public List<NoneDicomStudyFile> NoneDicomFileList { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public List<NoneDicomStudyFile> TaskNoneDicomFileList { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public SubjectVisit SubjectVisit { get; set; }
|
||||
[JsonIgnore]
|
||||
|
|
|
@ -8,9 +8,7 @@ using System.ComponentModel.DataAnnotations;
|
|||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
namespace IRaCIS.Core.Domain.Models
|
||||
{
|
||||
///<summary>
|
||||
///NoneDicomStudyFile
|
||||
///</summary>
|
||||
|
||||
[Table("NoneDicomStudyFile")]
|
||||
public class NoneDicomStudyFile : BaseAddAuditEntity
|
||||
{
|
||||
|
@ -23,9 +21,9 @@ namespace IRaCIS.Core.Domain.Models
|
|||
[JsonIgnore]
|
||||
public VisitTask VisitTask { get; set; }
|
||||
|
||||
//[ForeignKey("OriginNoneDicomStudyId")]
|
||||
//[JsonIgnore]
|
||||
//public NoneDicomStudy OriginNoneDicomStudy { get; set; }
|
||||
[ForeignKey("OriginNoneDicomStudyId")]
|
||||
[JsonIgnore]
|
||||
public NoneDicomStudy OriginNoneDicomStudy { get; set; }
|
||||
#endregion
|
||||
|
||||
|
||||
|
|
|
@ -72,6 +72,8 @@ namespace IRaCIS.Core.Infra.EFCore
|
|||
builder.HasNoKey();
|
||||
});
|
||||
|
||||
modelBuilder.Entity<NoneDicomStudy>().HasMany(t => t.NoneDicomFileList).WithOne(s => s.NoneDicomStudy).HasForeignKey(t => t.NoneDicomStudyId);
|
||||
modelBuilder.Entity<NoneDicomStudy>().HasMany(t => t.TaskNoneDicomFileList).WithOne(s => s.OriginNoneDicomStudy).HasForeignKey(t => t.OriginNoneDicomStudyId);
|
||||
|
||||
modelBuilder.Entity<ReadingQuestionTrial>().HasQueryFilter(p => p.IsAdditional == false);
|
||||
|
||||
|
|
Loading…
Reference in New Issue