From 412ca21ba20ea8f3ce5be2c93a979a53d190a630 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 5 Aug 2022 13:05:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 21 ++++++----- IRaCIS.Core.API/IRaCIS.Core.API.xml | 4 +- IRaCIS.Core.API/SignalRHub/UploadHub.cs | 37 +++++++++++++++++++ IRaCIS.Core.API/Startup.cs | 3 ++ .../RequestResponseLoggingMiddleware.cs | 2 +- .../IRaCIS.Core.Application.xml | 7 ++++ 6 files changed, 61 insertions(+), 13 deletions(-) create mode 100644 IRaCIS.Core.API/SignalRHub/UploadHub.cs diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 8a4588392..fbffda7fa 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -24,6 +24,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.SignalR; using Microsoft.AspNetCore.StaticFiles; using Microsoft.AspNetCore.WebUtilities; using Microsoft.EntityFrameworkCore; @@ -130,7 +131,7 @@ namespace IRaCIS.Core.API.Controllers /// 流式上传 Dicom上传 [Route("base")] - public virtual async Task DicomFileUploadAsync(Func filePathFunc) + public virtual async Task DicomFileUploadAsync(Func filePathFunc) { var fileCount = 0; @@ -163,7 +164,7 @@ namespace IRaCIS.Core.API.Controllers { ++fileCount; - await filePathFunc(entry.Key, entry.OpenEntryStream()); + await filePathFunc(entry.Key, entry.OpenEntryStream(), fileCount); } } } @@ -174,7 +175,7 @@ namespace IRaCIS.Core.API.Controllers { ++fileCount; - await filePathFunc(fileName, section.Body); + await filePathFunc(fileName, section.Body, fileCount); } } @@ -224,12 +225,12 @@ namespace IRaCIS.Core.API.Controllers [DisableRequestSizeLimit] [TypeFilter(typeof(TrialResourceFilter))] public async Task ArchiveStudyNew([FromForm] ArchiveStudyCommand archiveStudyCommand, - [FromServices] ILogger _logger, + [FromServices] ILogger _logger, [FromServices] IEasyCachingProvider _provider, - [FromServices] IStudyService _studyService, - - [FromServices] IDicomArchiveService _dicomArchiveService, - [FromServices] IRepository _repository + [FromServices] IStudyService _studyService, + [FromServices] IHubContext _uploadHub, + [FromServices] IDicomArchiveService _dicomArchiveService, + [FromServices] IRepository _repository ) { @@ -261,7 +262,7 @@ namespace IRaCIS.Core.API.Controllers var savedInfo = _studyService.GetSaveToDicomInfo(archiveStudyCommand.SubjectVisitId); - archiveResult.ReceivedFileCount = await DicomFileUploadAsync(async (fileName, fileStream) => + archiveResult.ReceivedFileCount = await DicomFileUploadAsync(async (fileName, fileStream, receivedCount) => { try @@ -280,6 +281,7 @@ namespace IRaCIS.Core.API.Controllers } } + await _uploadHub.Clients.All.ReceivProgressAsync(archiveStudyCommand.StudyInstanceUid, receivedCount); } catch (Exception e) @@ -337,7 +339,6 @@ namespace IRaCIS.Core.API.Controllers else { studyMonitor.IsSuccess = false; - studyMonitor.UploadFinishedTime = DateTime.Now; studyMonitor.Note= JsonConvert.SerializeObject(archiveResult); _provider.Remove("StudyUid_" + archiveStudyCommand.StudyInstanceUid); diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 1dbe638d2..960630722 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -220,10 +220,10 @@ 流式上传 通用封装 不返回任何数据,后续还有事情处理 - + 流式上传 Dicom上传 - + Dicom 归档 diff --git a/IRaCIS.Core.API/SignalRHub/UploadHub.cs b/IRaCIS.Core.API/SignalRHub/UploadHub.cs new file mode 100644 index 000000000..98eb1ea23 --- /dev/null +++ b/IRaCIS.Core.API/SignalRHub/UploadHub.cs @@ -0,0 +1,37 @@ +using EasyCaching.Core; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.SignalR; +using System.Threading.Tasks; + +namespace IRaCIS.Core.API +{ + public interface IUploadClient + { + Task ReceivProgressAsync( string studyInstanceUid , int haveReceivedCount); + } + + + //[Authorize] + public class UploadHub : Hub + { + //private IEasyCachingProvider _provider { get; } + + //public UploadHub(IEasyCachingProvider provider) + //{ + // _provider = provider; + //} + + public override Task OnConnectedAsync() + { + return base.OnConnectedAsync(); + } + + public async Task SendProgress(string studyInstanceUid, int haveReceivedCount) + { + + + await Clients.All.ReceivProgressAsync(studyInstanceUid, haveReceivedCount); + } + + } +} diff --git a/IRaCIS.Core.API/Startup.cs b/IRaCIS.Core.API/Startup.cs index e52799119..24663f7e8 100644 --- a/IRaCIS.Core.API/Startup.cs +++ b/IRaCIS.Core.API/Startup.cs @@ -146,6 +146,8 @@ namespace IRaCIS.Core.API //DicomӰȾͼƬ ƽ̨ services.AddDicomSetup(); + // ʵʱӦ + services.AddSignalR(); //services.AddSingleton(); @@ -212,6 +214,7 @@ namespace IRaCIS.Core.API app.UseEndpoints(endpoints => { + endpoints.MapHub("/UploadHub"); endpoints.MapControllers(); }); diff --git a/IRaCIS.Core.API/_PipelineExtensions/Serilog/RequestResponseLoggingMiddleware.cs b/IRaCIS.Core.API/_PipelineExtensions/Serilog/RequestResponseLoggingMiddleware.cs index 7b2bd5c96..112314b65 100644 --- a/IRaCIS.Core.API/_PipelineExtensions/Serilog/RequestResponseLoggingMiddleware.cs +++ b/IRaCIS.Core.API/_PipelineExtensions/Serilog/RequestResponseLoggingMiddleware.cs @@ -24,7 +24,7 @@ namespace IRaCIS.Core.API._PipelineExtensions.Serilog if (ContentType != null) { - isUploadRelation = context.Request.ContentType.Contains("multipart/form-data") || context.Request.ContentType.Contains("boundary"); + isUploadRelation = context.Request.ContentType.Contains("multipart/form-data") || context.Request.ContentType.Contains("boundary") || context.Request.ContentType.Contains("octet-stream"); } diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 655e88298..38f4fe058 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -4757,6 +4757,13 @@ 项目配置的针对访视检查是那种审核,0 不审,1 单审,2双审 当前 QC进入的是那种审核 1 单审,2复审 + + + 获取质控问题答案 + + + + 获取某次访视 QC 问题核对答案 列表 初始化进去的时候是模板项,QC填写了就是对应的内容