diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 30201c674..0c637634c 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -9,6 +9,7 @@ using FellowOakDicom.Media; using Hangfire.Storage; using IRaCIS.Application.Contracts; using IRaCIS.Application.Interfaces; +using IRaCIS.Application.Services; using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson; using IRaCIS.Core.Application.BusinessFilter; using IRaCIS.Core.Application.Contracts; @@ -18,6 +19,7 @@ using IRaCIS.Core.Application.Filter; using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.MassTransit.Command; using IRaCIS.Core.Application.Service; +using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infra.EFCore; @@ -1283,7 +1285,26 @@ namespace IRaCIS.Core.API.Controllers } } + ///// + ///// 下载阅片报告和图片 + ///// + ///// + ///// + ///// + ///// + ///// + //[HttpPost("download/ReadingReportAndImage")] + //public async Task DownloadReadingReportAndImage([FromServices] IReadingImageTaskService _readingImageTaskService, [FromServices] IOSSService _oSSService, + // [FromServices] IHubContext _downLoadHub, + // [FromForm] GetReadingReportAndImageInDto inCommand) + //{ + // Response.ContentType = "application/zip"; + // Response.Headers["Content-Disposition"] = $"attachment; filename=Image_{ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId)}.zip"; + // Response.Headers["Cache-Control"] = "no-store"; + // var data = await _readingImageTaskService.GetReadingReportAndImage(inCommand); + + //} [HttpPost("download/PatientStudyBatchDownloadForm")] public async Task DownloadPatientStudyBatchForm([FromServices] IPatientService _patientService, [FromServices] IOSSService _oSSService, diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs index b77c1814f..4b1c6c754 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs @@ -291,6 +291,23 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public List SheetNames { get; set; } } + public class GetReadingReportAndImageInDto + { + public Guid TrialCriterionId { get; set; } + + public List VisitTaskIdList { get; set; } = new List() { }; + } + + public class ReadingReportAndImage + { + public string SubjectCode { get; set; } + + public string VisitName { get; set; } + + public List ReportUrlList { get; set; } = new List(); + + public List ImageUrlList { get; set; } = new List(); + } public class ExportReportQuestion diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs index b7bb3a914..ec0e57256 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs @@ -12,6 +12,7 @@ namespace IRaCIS.Core.Application.Contracts { public interface IReadingImageTaskService { + Task> GetReadingReportAndImage(GetReadingReportAndImageInDto inDto); Task SubmitVisitTaskQuestions(SubmitVisitTaskQuestionsInDto inDto); Task SubmitJudgeVisitTaskResult(SaveJudgeVisitTaskResult inDto); @@ -42,5 +43,6 @@ namespace IRaCIS.Core.Application.Contracts Task<(List, object)> GetRelatedVisitTask(GetRelatedVisitTaskInDto inDto); + } } \ No newline at end of file diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 506393028..302f1247a 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -71,6 +71,74 @@ namespace IRaCIS.Core.Application.Service IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IFusionCache _fusionCache) : BaseService, IReadingImageTaskService { + /// + /// 获取阅片报告数据和图像 + /// + /// + /// + [HttpPost] + public async Task> GetReadingReportAndImage(GetReadingReportAndImageInDto inDto) + { + var taskList=new List { }; + + if (inDto.VisitTaskIdList.Count != 0) + { + if (await _visitTaskRepository.AnyAsync(x => inDto.VisitTaskIdList.Contains(x.Id) && (x.TaskState != TaskState.Effect || x.ReadingTaskState != ReadingTaskState.HaveSigned))) + { + throw new BusinessValidationFailedException(_localizer["ReadingImage_ReportDataInvalid"]); + } + + taskList=await _visitTaskRepository.Where(x => inDto.VisitTaskIdList.Contains(x.Id)&&x.ReadingCategory==ReadingCategory.Visit).Include(x=>x.LesionList).Include(x=>x.Subject).Include(x=>x.SourceSubjectVisit).ToListAsync(); + } + else + { + taskList = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId==inDto.TrialCriterionId&&x.TaskState== TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReadingCategory == ReadingCategory.Visit) + .Include(x => x.LesionList).Include(x => x.Subject).Include(x => x.SourceSubjectVisit).ToListAsync(); + } + + List< ReadingReportAndImage > result = new List() { }; + + foreach (var item in taskList) + { + ReadingReportAndImage data = new ReadingReportAndImage() + { + SubjectCode = item.Subject != null ? item.Subject.Code : string.Empty, + VisitName = item.SourceSubjectVisit != null ? item.SourceSubjectVisit.VisitName : string.Empty, + ImageUrlList = item.LesionList != null ? item.LesionList.Where(x => x.PicturePath != string.Empty).Select(x => x.PicturePath).ToList() : new List() { }, + ReportUrlList = new List() + { + }, + }; + + if (item.ReportExportUrl != string.Empty) + { + data.ReportUrlList.Add(item.ReportExportUrl); + } + else + { + data.ReportUrlList.Add(await _readingCalculateService.GetVisitReadReportUrl(new CaGetVisitReadReportUrl() + { + VisitTaskId = item.Id, + })); + } + + if (item.TumorEvaluationUrl != string.Empty) + { + data.ReportUrlList.Add(item.TumorEvaluationUrl); + } + else + { + data.ReportUrlList.Add(await _readingCalculateService.GetTumorEvaluationReportUrl(new CaGetVisitReadReportUrl() + { + VisitTaskId = item.Id, + })); + } + + result.Add(data); + } + return result; + } + /// /// 获取TNMValue ///