diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs index f1a47922a..1ff61ed04 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs @@ -78,11 +78,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO public string TaskBlindName { get; set; } public string TaskName { get; set; } + public Guid? SourceSubjectVisitId { get; set; } + public bool IsImageFilter { get; set; } public string CriterionModalitys { get; set; } - public Guid? SourceSubjectVisitId { get; set; } public List DicomStudyList { get; set; } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index e46526418..1f24c9735 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -385,6 +385,18 @@ namespace IRaCIS.Core.Application.Contracts } + public class IRUploadStudyQuery : SortInput + { + [NotDefault] + public Guid SubjectId { get; set; } + + [NotDefault] + public Guid TrialReadingCriterionId { get; set; } + + [NotDefault] + public string SubjectCode { get; set; } + } + public class IRUploadTaskDicomStudyDto : DicomStudyBasicInfo { @@ -403,6 +415,47 @@ namespace IRaCIS.Core.Application.Contracts public int UploadedFileCount { get; set; } } + public class TaskDicomStudyDTO: DicomStudyBasicInfo + { + public Guid SubjectId { get; set; } + + public string SubjectCode { get; set; } + + public string TaskBlindName { get; set; } + + public string TaskName { get; set; } + public Guid? SourceSubjectVisitId { get; set; } + + + + + public int UploadedSeriesCount { get; set; } + + public int UploadedInstanceCount { get; set; } + + public List UploadedSopInstanceUidList { get; set; } + + + } + + public class TaskNoneDicomStudyDTO : NoneDicomStudyBasicInfo + { + + + public int UploadedFileCount { get; set; } + + + public Guid SubjectId { get; set; } + + public string SubjectCode { get; set; } + + public string TaskBlindName { get; set; } + + public string TaskName { get; set; } + public Guid? SourceSubjectVisitId { get; set; } + + } + public class CRCUploadedStudyQuqry diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 3472c6714..23f219779 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -1,5 +1,4 @@ -using DocumentFormat.OpenXml.Office2010.Ink; -using FellowOakDicom; +using FellowOakDicom; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Filter; using IRaCIS.Core.Application.Helper; @@ -9,13 +8,14 @@ using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure.Extention; using MassTransit; +using MassTransit.Initializers; using MathNet.Numerics; using Medallion.Threading; using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal; using Newtonsoft.Json; using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Data; using System.IO.Compression; using System.Linq; @@ -43,6 +43,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc IRepository _taskSeriesRepository, IRepository _taskInstanceRepository, IRepository _readingQuestionCriterionTrialRepository, + IRepository _noneDicomStudyReposiotry, + IRepository _noneDicomStudyFileReposiotry, IDistributedLockProvider _distributedLockProvider) : BaseService, IDownloadAndUploadService { @@ -98,14 +100,13 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc /// /// 获取该受试者任务上传列表(展示已上传情况) /// - /// - /// /// - public async Task>> GetSubjectImageUploadList(Guid subjectId, Guid trialReadingCriterionId) + [HttpPost] + public async Task>> GetSubjectImageUploadList(IRUploadStudyQuery inQuery) { - await SubejctRandomReadingTaskNameDeal(subjectId, trialReadingCriterionId); + await SubejctRandomReadingTaskNameDeal(inQuery.SubjectId, inQuery.TrialReadingCriterionId); - var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.SourceSubjectVisitId != null + var query = _visitTaskRepository.Where(t => t.SubjectId == inQuery.SubjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id && t.TaskState == TaskState.Effect) .Select(u => new SubjectImageUploadDTO() { @@ -165,7 +166,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }) ; - var list = await query.ToListAsync(); + var list = await query.Where(t => t.SubjectCode == inQuery.SubjectCode).ToListAsync(); return ResponseOutput.Ok(list); } @@ -468,12 +469,18 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc [HttpDelete] - public async Task DeleteTaskStudy(Guid visitTaskId) + public async Task DeleteTaskStudy(Guid visitTaskId, bool isDicom, Guid? noneDicomStudyId) { - - await _taskStudyRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); - await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); - await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); + if (isDicom) + { + await _taskStudyRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); + await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); + await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId); + } + else + { + await _noneDicomStudyFileReposiotry.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visitTaskId && t.NoneDicomStudyId == noneDicomStudyId); + } return ResponseOutput.Ok(); } @@ -895,13 +902,15 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } + + #region 按照任务为维度 展示上传的列表 废弃 /// /// IR 影像上传任务列表 --old 20240903 界面调整,现在先废弃 /// /// /// [HttpPost] - public async Task> GetIRUploadTaskList(CRCUploadTaskQuery inQuery) + public async Task> GetIRUploadTaskList_Old(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) @@ -913,12 +922,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc return list; } /// - /// IR 上传任务 dicom 列表 后处理的数据不能排序 + /// IR 上传任务 dicom 列表 后处理的数据不能排序 --old 20240903 界面调整,现在先废弃 /// /// /// [HttpPost] - public async Task> GetIRUploadTaskDicomStudyList(CRCUploadTaskStudyQuery inQuery) + public async Task> GetIRUploadTaskDicomStudyList_Old(CRCUploadTaskStudyQuery inQuery) { var list = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId) .SelectMany(t => t.SourceSubjectVisit.StudyList) @@ -951,12 +960,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } /// - /// IR 上传任务 nonedicom 列表 后处理的数据不能排序 + /// IR 上传任务 nonedicom 列表 后处理的数据不能排序 --old 20240903 界面调整,现在先废弃 /// /// /// [HttpPost] - public async Task> GetIRUploadTaskNoneDicomStudyList(CRCUploadTaskStudyQuery inQuery) + public async Task> GetIRUploadTaskNoneDicomStudyList_Old(CRCUploadTaskStudyQuery inQuery) { var list = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId) .SelectMany(t => t.SourceSubjectVisit.StudyList) @@ -978,9 +987,70 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc return list; } + #endregion + #region IR 上传 列表,dicom 上以任务为维度,非dicom 以检查为维度 + + + + + + /// + /// IR 上传任务 nonedicom 列表 后处理的数据UploadedFileCount不能排序 --new + /// + /// + /// + [HttpPost] + public async Task> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery) + { + var query = from u in _visitTaskRepository.Where(t => t.SubjectId == inQuery.SubjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId + && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id && t.TaskState == TaskState.Effect) + join ns in _noneDicomStudyReposiotry.Where(t => t.SubjectId == inQuery.SubjectId) on u.SourceSubjectVisitId equals ns.SubjectVisitId + + select new TaskNoneDicomStudyDTO() + { + SubjectId = u.SubjectId, + SubjectCode = u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code, + TaskBlindName = u.TaskBlindName, + TaskName = u.TaskName, + SourceSubjectVisitId = u.SourceSubjectVisitId, + + Id = ns.Id, + Description = ns.Description, + ImageDate = ns.ImageDate, + BodyPart = ns.BodyPart, + FileCount = ns.FileCount, + Modality = ns.Modality, + StudyCode = ns.StudyCode, + + }; + + var list = await query.Where(t => t.SubjectCode == inQuery.SubjectCode).SortToListAsync(inQuery); + + var noneDicomStudyIdList = list.Select(t => t.Id).ToList(); + + + var taskNoneDicomStudyList = _visitTaskRepository.Where(t => noneDicomStudyIdList.Contains(t.Id)) + .SelectMany(t => t.TaskNoneDicomStudyFileList).Where(t => noneDicomStudyIdList.Contains((Guid)t.VisitTaskId)) + .Select(u => new + { + u.OriginNoneDicomStudyId, + }) + .ToList(); + + foreach (var item in list) + { + item.UploadedFileCount = taskNoneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).Count(); + } + + return list; + + } + #endregion + + /// /// IQC 获取CRC 上传到某一个访视的的检查信息 (原始影像信息 包含dicom 非dicom) ///