合并代码
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
a340167bfb
|
@ -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 class SubjectCRCImageUploadedDto
|
||||||
{
|
{
|
||||||
public Guid VisitTaskId { get; set; }
|
public Guid VisitTaskId { get; set; }
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using Newtonsoft.Json;
|
using IRaCIS.Core.Application.Service.ImageAndDoc.DTO;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
@ -364,6 +365,46 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public decimal FileFize { get; set; }
|
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
|
public class CRCUploadedStudyQuqry
|
||||||
{
|
{
|
||||||
[NotDefault]
|
[NotDefault]
|
||||||
|
|
|
@ -670,6 +670,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
/// <param name="isDicom"></param>
|
/// <param name="isDicom"></param>
|
||||||
/// <param name="isAnonymize"></param>
|
/// <param name="isAnonymize"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
[HttpPost]
|
||||||
public async Task PackageAndAnonymizImage(Guid trialId, Guid subjectVisitId, bool isDicom, bool isAnonymize = true)
|
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>
|
/// <summary>
|
||||||
/// IQC 获取CRC 上传到某一个访视的的检查信息 (原始影像信息 包含dicom 非dicom)
|
/// IQC 获取CRC 上传到某一个访视的的检查信息 (原始影像信息 包含dicom 非dicom)
|
||||||
|
@ -963,6 +1049,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inQuery"></param>
|
/// <param name="inQuery"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
[HttpPost]
|
||||||
public async Task<List<SubjectCRCImageUploadedDto>> GetSubjectImageDownloadSelectList(IRReadingDownloadQuery inQuery)
|
public async Task<List<SubjectCRCImageUploadedDto>> GetSubjectImageDownloadSelectList(IRReadingDownloadQuery inQuery)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -125,6 +125,12 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.VisitNum, u => u.MapFrom(s => s.SubjectVisit.VisitNum))
|
.ForMember(d => d.VisitNum, u => u.MapFrom(s => s.SubjectVisit.VisitNum))
|
||||||
.ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName));
|
.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<DicomStudy, DicomStudyBasicInfo>();
|
||||||
CreateMap<NoneDicomStudy, NoneDicomStudyBasicInfo>();
|
CreateMap<NoneDicomStudy, NoneDicomStudyBasicInfo>();
|
||||||
CreateMap<VisitTask, SubjectCRCImageUploadedDto>()
|
CreateMap<VisitTask, SubjectCRCImageUploadedDto>()
|
||||||
|
|
|
@ -23,6 +23,8 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List<TaskStudy> TaskStudyList { get; set; }
|
public List<TaskStudy> TaskStudyList { get; set; }
|
||||||
|
|
||||||
|
public List<NoneDicomStudyFile> TaskNoneDicomStudyFileList { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
[ForeignKey("TrialReadingCriterionId")]
|
[ForeignKey("TrialReadingCriterionId")]
|
||||||
public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
|
public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
|
||||||
|
|
|
@ -44,6 +44,10 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
public Guid? VisitTaskId { get; set; }
|
public Guid? VisitTaskId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 为了不影响原始检查,跟任务绑定的 NoneDicomStudyId 为guid空 这个字段记录跟原始检查绑
|
||||||
|
/// </summary>
|
||||||
public Guid? OriginNoneDicomStudyId { get; set; }
|
public Guid? OriginNoneDicomStudyId { get; set; }
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
@ -760,7 +760,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
SelectList = selectList.Join(list, t => t.Id, u => u.DictionaryId, (t, u) =>
|
SelectList = selectList.Join(list, t => t.Id, u => u.DictionaryId, (t, u) =>
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Value = _userInfo.IsEn_Us ? t.Value : t.ValueCN,
|
Value =t.Value ,
|
||||||
t.ValueCN,
|
t.ValueCN,
|
||||||
t.Description,
|
t.Description,
|
||||||
t.ShowOrder,
|
t.ShowOrder,
|
||||||
|
@ -2809,7 +2809,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
//获取问题名称 组合成数组
|
//获取问题名称 组合成数组
|
||||||
var quesionList = await _dbContext.ReadingQuestionTrial.Where(t => taskQuestionAnswerList.Select(k => k.ReadingQuestionTrialId).Contains(t.Id)).IgnoreQueryFilters().Select(t => new
|
var quesionList = await _dbContext.ReadingQuestionTrial.Where(t => taskQuestionAnswerList.Select(k => k.ReadingQuestionTrialId).Contains(t.Id)).IgnoreQueryFilters().Select(t => new
|
||||||
{
|
{
|
||||||
QuestionName=_userInfo.IsEn_Us?t.QuestionEnName: t.QuestionName,
|
QuestionName=t.QuestionName,
|
||||||
t.QuestionEnName,
|
t.QuestionEnName,
|
||||||
QuestionId = t.Id,
|
QuestionId = t.Id,
|
||||||
t.DictionaryCode,
|
t.DictionaryCode,
|
||||||
|
@ -3118,7 +3118,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
|
|
||||||
var quesionList = await _dbContext.ReadingQuestionTrial.Where(t => questionIdList.Contains(t.Id)).Select(t => new
|
var quesionList = await _dbContext.ReadingQuestionTrial.Where(t => questionIdList.Contains(t.Id)).Select(t => new
|
||||||
{
|
{
|
||||||
QuestionName=_userInfo.IsEn_Us?t.QuestionEnName: t.QuestionName,
|
QuestionName=t.QuestionName,
|
||||||
t.QuestionEnName,
|
t.QuestionEnName,
|
||||||
QuestionId = t.Id,
|
QuestionId = t.Id,
|
||||||
t.DictionaryCode,
|
t.DictionaryCode,
|
||||||
|
@ -3136,7 +3136,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
{
|
{
|
||||||
TaskBlindName = u.VisitTask.TaskBlindName,
|
TaskBlindName = u.VisitTask.TaskBlindName,
|
||||||
QuestionId = u.ReadingQuestionTrialId,
|
QuestionId = u.ReadingQuestionTrialId,
|
||||||
QuestionName= _userInfo.IsEn_Us ? u.ReadingQuestionTrial.QuestionEnName : u.ReadingQuestionTrial.QuestionName,
|
QuestionName= u.ReadingQuestionTrial.QuestionName,
|
||||||
u.ReadingQuestionTrial.QuestionEnName,
|
u.ReadingQuestionTrial.QuestionEnName,
|
||||||
u.ReadingQuestionTrial.DictionaryCode,
|
u.ReadingQuestionTrial.DictionaryCode,
|
||||||
u.ReadingQuestionTrial.ShowOrder,
|
u.ReadingQuestionTrial.ShowOrder,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,12 @@ namespace IRaCIS.Core.Infrastructure.Extention
|
||||||
public string SortField { get; set; } = "";
|
public string SortField { get; set; } = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class SortInput
|
||||||
|
{
|
||||||
|
public bool Asc { get; set; } = true;
|
||||||
|
public string SortField { get; set; } = "";
|
||||||
|
}
|
||||||
|
|
||||||
public class PageInputMultiSort
|
public class PageInputMultiSort
|
||||||
{
|
{
|
||||||
public int PageIndex { get; set; } = 1;
|
public int PageIndex { get; set; } = 1;
|
||||||
|
|
Loading…
Reference in New Issue