Uat_Study
hang 2022-08-05 13:05:51 +08:00
parent d0856021db
commit 412ca21ba2
6 changed files with 61 additions and 13 deletions

View File

@ -24,6 +24,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Microsoft.AspNetCore.StaticFiles; using Microsoft.AspNetCore.StaticFiles;
using Microsoft.AspNetCore.WebUtilities; using Microsoft.AspNetCore.WebUtilities;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -130,7 +131,7 @@ namespace IRaCIS.Core.API.Controllers
/// <summary> 流式上传 Dicom上传 </summary> /// <summary> 流式上传 Dicom上传 </summary>
[Route("base")] [Route("base")]
public virtual async Task<int> DicomFileUploadAsync(Func<string, Stream, Task> filePathFunc) public virtual async Task<int> DicomFileUploadAsync(Func<string, Stream, int, Task> filePathFunc)
{ {
var fileCount = 0; var fileCount = 0;
@ -163,7 +164,7 @@ namespace IRaCIS.Core.API.Controllers
{ {
++fileCount; ++fileCount;
await filePathFunc(entry.Key, entry.OpenEntryStream()); await filePathFunc(entry.Key, entry.OpenEntryStream(), fileCount);
} }
} }
} }
@ -174,7 +175,7 @@ namespace IRaCIS.Core.API.Controllers
{ {
++fileCount; ++fileCount;
await filePathFunc(fileName, section.Body); await filePathFunc(fileName, section.Body, fileCount);
} }
} }
@ -224,12 +225,12 @@ namespace IRaCIS.Core.API.Controllers
[DisableRequestSizeLimit] [DisableRequestSizeLimit]
[TypeFilter(typeof(TrialResourceFilter))] [TypeFilter(typeof(TrialResourceFilter))]
public async Task<IResponseOutput> ArchiveStudyNew([FromForm] ArchiveStudyCommand archiveStudyCommand, public async Task<IResponseOutput> ArchiveStudyNew([FromForm] ArchiveStudyCommand archiveStudyCommand,
[FromServices] ILogger<UploadDownLoadController> _logger, [FromServices] ILogger<UploadDownLoadController> _logger,
[FromServices] IEasyCachingProvider _provider, [FromServices] IEasyCachingProvider _provider,
[FromServices] IStudyService _studyService, [FromServices] IStudyService _studyService,
[FromServices] IHubContext<UploadHub, IUploadClient> _uploadHub,
[FromServices] IDicomArchiveService _dicomArchiveService, [FromServices] IDicomArchiveService _dicomArchiveService,
[FromServices] IRepository _repository [FromServices] IRepository _repository
) )
{ {
@ -261,7 +262,7 @@ namespace IRaCIS.Core.API.Controllers
var savedInfo = _studyService.GetSaveToDicomInfo(archiveStudyCommand.SubjectVisitId); var savedInfo = _studyService.GetSaveToDicomInfo(archiveStudyCommand.SubjectVisitId);
archiveResult.ReceivedFileCount = await DicomFileUploadAsync(async (fileName, fileStream) => archiveResult.ReceivedFileCount = await DicomFileUploadAsync(async (fileName, fileStream, receivedCount) =>
{ {
try try
@ -280,6 +281,7 @@ namespace IRaCIS.Core.API.Controllers
} }
} }
await _uploadHub.Clients.All.ReceivProgressAsync(archiveStudyCommand.StudyInstanceUid, receivedCount);
} }
catch (Exception e) catch (Exception e)
@ -337,7 +339,6 @@ namespace IRaCIS.Core.API.Controllers
else else
{ {
studyMonitor.IsSuccess = false; studyMonitor.IsSuccess = false;
studyMonitor.UploadFinishedTime = DateTime.Now;
studyMonitor.Note= JsonConvert.SerializeObject(archiveResult); studyMonitor.Note= JsonConvert.SerializeObject(archiveResult);
_provider.Remove("StudyUid_" + archiveStudyCommand.StudyInstanceUid); _provider.Remove("StudyUid_" + archiveStudyCommand.StudyInstanceUid);

View File

@ -220,10 +220,10 @@
<member name="M:IRaCIS.Core.API.Controllers.UploadBaseController.FileUploadAsync(System.Func{System.String,System.Threading.Tasks.Task{System.String}})"> <member name="M:IRaCIS.Core.API.Controllers.UploadBaseController.FileUploadAsync(System.Func{System.String,System.Threading.Tasks.Task{System.String}})">
<summary> 流式上传 通用封装 不返回任何数据,后续还有事情处理 </summary> <summary> 流式上传 通用封装 不返回任何数据,后续还有事情处理 </summary>
</member> </member>
<member name="M:IRaCIS.Core.API.Controllers.UploadBaseController.DicomFileUploadAsync(System.Func{System.String,System.IO.Stream,System.Threading.Tasks.Task})"> <member name="M:IRaCIS.Core.API.Controllers.UploadBaseController.DicomFileUploadAsync(System.Func{System.String,System.IO.Stream,System.Int32,System.Threading.Tasks.Task})">
<summary> 流式上传 Dicom上传 </summary> <summary> 流式上传 Dicom上传 </summary>
</member> </member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.ArchiveStudyNew(IRaCIS.Core.Application.Contracts.ArchiveStudyCommand,Microsoft.Extensions.Logging.ILogger{IRaCIS.Core.API.Controllers.UploadDownLoadController},EasyCaching.Core.IEasyCachingProvider,IRaCIS.Core.Application.Contracts.IStudyService,IRaCIS.Core.Application.Contracts.Dicom.IDicomArchiveService,IRaCIS.Core.Infra.EFCore.IRepository)"> <member name="M:IRaCIS.Core.API.Controllers.StudyController.ArchiveStudyNew(IRaCIS.Core.Application.Contracts.ArchiveStudyCommand,Microsoft.Extensions.Logging.ILogger{IRaCIS.Core.API.Controllers.UploadDownLoadController},EasyCaching.Core.IEasyCachingProvider,IRaCIS.Core.Application.Contracts.IStudyService,Microsoft.AspNetCore.SignalR.IHubContext{IRaCIS.Core.API.UploadHub,IRaCIS.Core.API.IUploadClient},IRaCIS.Core.Application.Contracts.Dicom.IDicomArchiveService,IRaCIS.Core.Infra.EFCore.IRepository)">
<summary>Dicom 归档</summary> <summary>Dicom 归档</summary>
</member> </member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadVisitClinicalData(System.Guid)"> <member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadVisitClinicalData(System.Guid)">

View File

@ -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<IUploadClient>
{
//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);
}
}
}

View File

@ -146,6 +146,8 @@ namespace IRaCIS.Core.API
//DicomÓ°ÏñäÖȾͼƬ ¿çƽ̨ //DicomÓ°ÏñäÖȾͼƬ ¿çƽ̨
services.AddDicomSetup(); services.AddDicomSetup();
// 实时应用
services.AddSignalR();
//services.AddSingleton<IImportResultFilter, ImportResultFilteTest>(); //services.AddSingleton<IImportResultFilter, ImportResultFilteTest>();
@ -212,6 +214,7 @@ namespace IRaCIS.Core.API
app.UseEndpoints(endpoints => app.UseEndpoints(endpoints =>
{ {
endpoints.MapHub<UploadHub>("/UploadHub");
endpoints.MapControllers(); endpoints.MapControllers();
}); });

View File

@ -24,7 +24,7 @@ namespace IRaCIS.Core.API._PipelineExtensions.Serilog
if (ContentType != null) 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");
} }

View File

@ -4757,6 +4757,13 @@
<param name="trialQCProcess">项目配置的针对访视检查是那种审核0 不审1 单审2双审</param> <param name="trialQCProcess">项目配置的针对访视检查是那种审核0 不审1 单审2双审</param>
<param name="currentQCType">当前 QC进入的是那种审核 1 单审2复审</param> <param name="currentQCType">当前 QC进入的是那种审核 1 单审2复审</param>
</member> </member>
<member name="M:IRaCIS.Core.Application.Image.QA.QCListService.GetQCQuestionAnswer(IRaCIS.Core.Application.Contracts.GetQCQuestionAnswerInDto)">
<summary>
获取质控问题答案
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Image.QA.QCListService.GetQCQuestionAnswerList(System.Guid,System.Guid,IRaCIS.Core.Domain.Share.TrialQCProcess,IRaCIS.Core.Domain.Share.CurrentQC)"> <member name="M:IRaCIS.Core.Application.Image.QA.QCListService.GetQCQuestionAnswerList(System.Guid,System.Guid,IRaCIS.Core.Domain.Share.TrialQCProcess,IRaCIS.Core.Domain.Share.CurrentQC)">
<summary> <summary>
获取某次访视 QC 问题核对答案 列表 初始化进去的时候是模板项QC填写了就是对应的内容 获取某次访视 QC 问题核对答案 列表 初始化进去的时候是模板项QC填写了就是对应的内容