修改非dicom 上传

Uat_Study
hang 2023-07-31 13:20:04 +08:00
parent ca9193438b
commit 427cb38f39
10 changed files with 74 additions and 49 deletions

View File

@ -267,7 +267,7 @@ namespace IRaCIS.Core.API.Controllers
[DisableFormValueModelBinding]
[DisableRequestSizeLimit]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task<IResponseOutput> ArchiveStudyNew(/*[FromForm] ArchiveStudyCommand archiveStudyCommand,*/ Guid trialId, Guid subjectVisitId, string studyInstanceUid, Guid? abandonStudyId,Guid studyMonitorId,
public async Task<IResponseOutput> ArchiveStudyNew(/*[FromForm] ArchiveStudyCommand archiveStudyCommand,*/ Guid trialId, Guid subjectVisitId, string studyInstanceUid, Guid? abandonStudyId, Guid studyMonitorId,
[FromServices] ILogger<UploadDownLoadController> _logger,
[FromServices] IEasyCachingProvider _provider,
[FromServices] IStudyService _studyService,
@ -301,9 +301,9 @@ namespace IRaCIS.Core.API.Controllers
{
_provider.Set($"StudyUid_{trialId}_{archiveStudyCommand.StudyInstanceUid}", _userInfo.Id, TimeSpan.FromMinutes(30));
}
//if (_provider.Exists($"StudyUid_{trialId}_{archiveStudyCommand.StudyInstanceUid}"))
//{
// //---当前已有人正在上传和归档该检查!
@ -406,7 +406,7 @@ namespace IRaCIS.Core.API.Controllers
studyMonitor.IsSuccess = true;
}
}
catch (Exception e)
{
@ -423,7 +423,7 @@ namespace IRaCIS.Core.API.Controllers
studyMonitor.StudyCode = archiveResult.ArchivedDicomStudies.FirstOrDefault()?.StudyCode;
studyMonitor.ArchiveFinishedTime = DateTime.Now;
await _studyMonitorRepository.SaveChangesAsync();
await _studyMonitorRepository.SaveChangesAsync();
}
@ -671,24 +671,43 @@ namespace IRaCIS.Core.API.Controllers
public class UploadNoneDicomFileCommand
{
public Guid TrialId { get; set; }
public Guid SubjectVisitId { get; set; }
public Guid NoneDicomStudyId { get; set; }
public Guid StudyMonitorId { get; set; }
public List<OSSFileDTO> UploadedFileList { get; set; } = new List<OSSFileDTO>();
public class OSSFileDTO
{
public string FilePath { get; set; }
public string FileName { get; set; }
public int FileFize { get; set; }
}
}
/// <summary>
/// 上传非Dicom 文件 支持压缩包 多文件上传
/// </summary>
/// <param name="formCollection"></param>
/// <param name="subjectVisitId"></param>
/// <param name="noneDicomStudyId"></param>
/// <param name="studyMonitorId"></param>
/// <param name="_noneDicomStudyRepository"></param>
/// <returns></returns>
//[DisableRequestSizeLimit]
[RequestSizeLimit(1_073_741_824)]
[HttpPost("NoneDicomStudy/UploadNoneDicomFile/{trialId:guid}/{subjectVisitId:guid}/{noneDicomStudyId:guid}/{studyMonitorId:guid}")]
[HttpPost("NoneDicomStudy/UploadNoneDicomFile")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
//[Authorize(Policy = IRaCISPolicy.CRC)]
public async Task<IResponseOutput> UploadNoneDicomFile(IFormCollection formCollection, Guid subjectVisitId, Guid noneDicomStudyId, Guid studyMonitorId,
public async Task<IResponseOutput> UploadNoneDicomFile(UploadNoneDicomFileCommand incommand,
[FromServices] IRepository<NoneDicomStudy> _noneDicomStudyRepository, [FromServices] IRepository<StudyMonitor> _studyMonitorRepository)
{
var subjectVisitId = incommand.SubjectVisitId;
var studyMonitorId=incommand.StudyMonitorId;
var noneDicomStudyId=incommand.NoneDicomStudyId;
await _qCCommon.VerifyIsCRCSubmmitAsync(_repository, _userInfo, subjectVisitId);
var sv = (await _repository.Where<SubjectVisit>(t => t.Id == subjectVisitId).Select(t => new { t.TrialId, t.SiteId, t.SubjectId }).FirstOrDefaultAsync()).IfNullThrowConvertException();
@ -697,33 +716,24 @@ namespace IRaCIS.Core.API.Controllers
studyMonitor.UploadFinishedTime = DateTime.Now;
await FileUploadAsync(async (fileName) =>
foreach (var item in incommand.UploadedFileList)
{
await _repository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, NoneDicomStudyId = noneDicomStudyId });
var (serverFilePath, relativePath, fileRealName) = FileStoreHelper.GetNoneDicomFilePath(_hostEnvironment, fileName, sv.TrialId, sv.SiteId, sv.SubjectId, subjectVisitId);
await _repository.AddAsync(new NoneDicomStudyFile() { FileName = fileRealName, Path = relativePath, NoneDicomStudyId = noneDicomStudyId });
return serverFilePath;
});
}
var uploadFinishedTime = DateTime.Now;
//// 上传非Dicom 后 将状态改为待提交 分为普通上传 和QC后重传 普通上传时才改为待提交
//await _repository.UpdatePartialFromQueryAsync<SubjectVisit>(t => t.Id == subjectVisitId && t.SubmitState == SubmitStateEnum.None, u => new SubjectVisit() { SubmitState = SubmitStateEnum.ToSubmit });
var noneDicomStudy = await _noneDicomStudyRepository.FirstOrDefaultAsync((t => t.Id == noneDicomStudyId));
noneDicomStudy.FileCount = noneDicomStudy.FileCount + formCollection.Files.Count;
noneDicomStudy.FileCount = noneDicomStudy.FileCount + incommand.UploadedFileList.Count;
studyMonitor.FileCount = formCollection.Files.Count;
studyMonitor.FileSize = formCollection.Files.Sum(t => t.Length);
studyMonitor.FileCount = incommand.UploadedFileList.Count;
studyMonitor.FileSize = incommand.UploadedFileList.Sum(t => t.FileFize);
studyMonitor.IsDicom = false;
studyMonitor.IsDicomReUpload = false;
studyMonitor.StudyId = noneDicomStudyId;
studyMonitor.StudyCode = noneDicomStudy.StudyCode;
studyMonitor.ArchiveFinishedTime = DateTime.Now;
studyMonitor.ArchiveFinishedTime = DateTime.Now;
studyMonitor.IP = _userInfo.IP;
await _repository.SaveChangesAsync();
@ -752,7 +762,7 @@ namespace IRaCIS.Core.API.Controllers
if (!fileName.EndsWith(".xlsx") && !fileName.EndsWith(".csv") && !fileName.EndsWith(".xls"))
{
//---支持.xlsx、.xls、.csv格式的文件上传。
//---支持.xlsx、.xls、.csv格式的文件上传。
throw new BusinessValidationFailedException(StaticData.International("UploadDownLoad_SupportedFormats"));
}
@ -910,11 +920,11 @@ namespace IRaCIS.Core.API.Controllers
var dt = DateTime.Now;
etcCheckList = etcCheckList.Where(t => !(t.Modality == string.Empty || t.SiteCode == string.Empty || t.SubjectCode == string.Empty || t.VisitName == string.Empty || t.StudyDate == string.Empty ||! DateTime.TryParse(t.StudyDate, out dt))).ToList();
etcCheckList = etcCheckList.Where(t => !(t.Modality == string.Empty || t.SiteCode == string.Empty || t.SubjectCode == string.Empty || t.VisitName == string.Empty || t.StudyDate == string.Empty || !DateTime.TryParse(t.StudyDate, out dt))).ToList();
if (etcCheckList.Count == 0)
{
//---请保证上传数据符合模板文件中的样式,且存在有效数据。
//---请保证上传数据符合模板文件中的样式,且存在有效数据。
return ResponseOutput.NotOk(StaticData.International("UploadDownLoad_InvalidData"));
}
@ -994,7 +1004,7 @@ namespace IRaCIS.Core.API.Controllers
}
#endregion

View File

@ -266,14 +266,10 @@
<param name="taskMedicalReviewId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadNoneDicomFile(Microsoft.AspNetCore.Http.IFormCollection,System.Guid,System.Guid,System.Guid,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.StudyMonitor})">
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadNoneDicomFile(IRaCIS.Core.API.Controllers.StudyController.UploadNoneDicomFileCommand,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.StudyMonitor})">
<summary>
上传非Dicom 文件 支持压缩包 多文件上传
</summary>
<param name="formCollection"></param>
<param name="subjectVisitId"></param>
<param name="noneDicomStudyId"></param>
<param name="studyMonitorId"></param>
<param name="_noneDicomStudyRepository"></param>
<returns></returns>
</member>

View File

@ -11841,6 +11841,14 @@
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Application.Services.ReadingImageTaskService.ClaimOrCancelSubjectAsync(IRaCIS.Core.Application.ViewModel.ClaimSubjectDto)">
<summary>
前端 仅仅释放的时候使用,领取是后端调用该方法
</summary>
<param name="claimSubjectDto"></param>
<returns></returns>
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
</member>
<member name="M:IRaCIS.Application.Services.ReadingImageTaskService.SubmitTaskChangeState(System.Guid)">
<summary>
签名提交任务修改状态

View File

@ -894,9 +894,8 @@ namespace IRaCIS.Core.Application.ViewModel
public Guid? VisitTaskId { get; set; }
[NotDefault]
public Guid TrialReadingCriterionId { get; set; }
[NotDefault]
public Guid SubejctId { get; set; }
public bool IsClaim { get; set; }

View File

@ -30,6 +30,8 @@ namespace IRaCIS.Core.Application.Contracts
public bool IsDeleted { get; set; }
public bool IsReading { get; set; } = true;
public string IamgeResizePath { get; set; }
}

View File

@ -23,11 +23,15 @@ namespace IRaCIS.Core.Application.Services
/// <summary> 指定资源Id获取Dicom序列所属的实例信息列表 </summary>
/// <param name="seriesId"> Dicom序列的Id </param>
[HttpGet("{seriesId:guid}")]
public async Task<IEnumerable<DicomInstanceDTO>> List(Guid seriesId)
public async Task<IResponseOutput<List<DicomInstanceDTO>> > List(Guid seriesId)
{
return await _instanceRepository.Where(s => s.SeriesId == seriesId).OrderBy(s => s.InstanceNumber).
var list= await _instanceRepository.Where(s => s.SeriesId == seriesId).OrderBy(s => s.InstanceNumber).
ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime)
.ProjectTo<DicomInstanceDTO>(_mapper.ConfigurationProvider).ToListAsync();
var imageResizePath = await _instanceRepository.Where(s => s.SeriesId == seriesId).Select(t=>t.DicomSerie.ImageResizePath).FirstOrDefaultAsync();
return ResponseOutput.Ok(list, new { ImageResizePath = imageResizePath });
}

View File

@ -6,7 +6,7 @@ namespace IRaCIS.Core.Application.Services
public interface IInstanceService
{
Task<FileContentResult> Content(Guid instanceId);
Task<IEnumerable<DicomInstanceDTO>> List(Guid seriesId);
Task<IResponseOutput<List<DicomInstanceDTO>>> List(Guid seriesId);
IEnumerable<Guid> List(Guid seriesId, string tpCode, bool? key);
Task<FileContentResult> Preview(Guid instanceId);
}

View File

@ -2315,8 +2315,8 @@ namespace IRaCIS.Application.Services
if (task != null)
{
// 无序 自动领取该Subject
await ClaimOrCancelSubjectAsync(new ClaimSubjectDto() { IsClaim = true, TrialReadingCriterionId=task.TrialReadingCriterionId, VisitTaskId = task.VisitTaskId, IsInOrder = false });
// 无序
await ClaimOrCancelSubjectAsync(new ClaimSubjectDto() { IsClaim = true, VisitTaskId = task.VisitTaskId, IsInOrder = false });
}
}
@ -2448,7 +2448,12 @@ namespace IRaCIS.Application.Services
}
/// <summary>
/// 前端 仅仅释放的时候使用,领取是后端调用该方法
/// </summary>
/// <param name="claimSubjectDto"></param>
/// <returns></returns>
/// <exception cref="BusinessValidationFailedException"></exception>
[HttpPost]
public async Task ClaimOrCancelSubjectAsync(ClaimSubjectDto claimSubjectDto)
{

View File

@ -180,11 +180,12 @@ namespace IRaCIS.Application.Services
[AllowAnonymous]
public async Task<object> GetEnvironmentName([FromServices] IWebHostEnvironment env)
{
var a = IdentifierHelper.CreateGuid("123456");
var a = IdentifierHelper.CreateGuid("654321");
var k = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes("123456"));
var c = MD5Helper.Md5("123456");
var c = MD5Helper.Md5("654321");
//update DicomInstance set Path = '/IRaCISData/TrialData/' + cast(DicomInstance.TrialId as varchar) + '/' + DicomInstance.SiteId + '/' + DicomInstance.SubjectId + '/' + DicomInstance.SubjectVisitId + '/Dicom/' + DicomInstance.StudyId + '/' + DicomInstance.Id + '.dcm'

View File

@ -57,7 +57,7 @@ namespace IRaCIS.Core.Domain.Models
public bool IsDeleted {get;set;}
public bool IsReading { get; set; } = true;
public string IamgeResizePath { get; set; }=string.Empty;
public string ImageResizePath { get; set; }=string.Empty;
}
}