diff --git a/IRaCIS.Core.API/appsettings.Test_IRC.json b/IRaCIS.Core.API/appsettings.Test_IRC.json index 50a4c7090..bae3fe950 100644 --- a/IRaCIS.Core.API/appsettings.Test_IRC.json +++ b/IRaCIS.Core.API/appsettings.Test_IRC.json @@ -24,7 +24,7 @@ }, "ObjectStoreService": { "ObjectStoreUse": "AliyunOSS", - "IsOpenStoreSync": true, + "IsOpenStoreSync": false, "ApiDeployRegion": "CN", "SyncConfigList": [ { @@ -41,7 +41,7 @@ "Target": "AliyunOSS", "UploadRegion": "US", "TargetRegion": "CN", - "IsOpenSync": true + "IsOpenSync": false } ], "AliyunOSS": { diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 09b038baf..2ae7deaa1 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -391,9 +391,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }; - var addEntity = await _studyMonitorRepository.AddAsync(studyMonitor, true); + //var addEntity = await _studyMonitorRepository.AddAsync(studyMonitor, true); - return ResponseOutput.Ok(addEntity.Id); + return ResponseOutput.Ok(Guid.NewGuid()); } @@ -580,25 +580,25 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var trialId = incommand.TrialId; - var studyMonitor = await _studyMonitorRepository.FirstOrDefaultAsync(t => t.Id == incommand.StudyMonitorId); - studyMonitor.UploadFinishedTime = DateTime.Now; - studyMonitor.ArchiveFinishedTime = DateTime.Now; - studyMonitor.FailedFileCount = incommand.FailedFileCount; - studyMonitor.IsSuccess = incommand.FailedFileCount == 0; - studyMonitor.RecordPath = incommand.RecordPath; - studyMonitor.FileSize = incommand.Study.SeriesList.SelectMany(t => t.InstanceList).Sum(t => t.FileSize); + //var studyMonitor = await _studyMonitorRepository.FirstOrDefaultAsync(t => t.Id == incommand.StudyMonitorId); + //studyMonitor.UploadFinishedTime = DateTime.Now; + //studyMonitor.ArchiveFinishedTime = DateTime.Now; + //studyMonitor.FailedFileCount = incommand.FailedFileCount; + //studyMonitor.IsSuccess = incommand.FailedFileCount == 0; + //studyMonitor.RecordPath = incommand.RecordPath; + //studyMonitor.FileSize = incommand.Study.SeriesList.SelectMany(t => t.InstanceList).Sum(t => t.FileSize); var studyId = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString(), visiTaskId.ToString()); var findStudy = await _taskStudyRepository.FirstOrDefaultAsync(t => t.Id == studyId); - studyMonitor.StudyId = studyId; - studyMonitor.StudyCode = findStudy?.StudyCode ?? ""; + //studyMonitor.StudyId = studyId; + //studyMonitor.StudyCode = findStudy?.StudyCode ?? ""; - studyMonitor.IsDicomReUpload = findStudy != null; + //studyMonitor.IsDicomReUpload = findStudy != null; //上传 - if (studyMonitor.IsDicomReUpload == false) + if (findStudy == null) { @@ -640,7 +640,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc await _taskStudyRepository.AddAsync(study); - studyMonitor.StudyCode = study.StudyCode; + //studyMonitor.StudyCode = study.StudyCode; foreach (var seriesItem in incommand.Study.SeriesList) @@ -689,9 +689,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc - //重传的时候也要赋值检查Id - studyMonitor.StudyId = findStudy.Id; - studyMonitor.StudyCode = findStudy.StudyCode; + ////重传的时候也要赋值检查Id + //studyMonitor.StudyId = findStudy.Id; + //studyMonitor.StudyCode = findStudy.StudyCode; //特殊处理逻辑 findStudy.Modalities = string.Join("、", incommand.Study.SeriesList.Select(t => t.Modality).Union(findStudy.Modalities.Split("、", StringSplitOptions.RemoveEmptyEntries)).Distinct()); diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs index e24c8b288..0e2937ca7 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs @@ -1,4 +1,5 @@ -using FellowOakDicom; +using DocumentFormat.OpenXml.InkML; +using FellowOakDicom; using FellowOakDicom.Imaging; using FellowOakDicom.IO.Buffer; using IRaCIS.Core.Application.Contracts; @@ -67,6 +68,80 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc #endregion } + public class DeleteImagePathCommand + { + public string Path { get; set; } + } + + public async Task DeleteImageCache(DeleteImagePathCommand incommand) + { + await _oSSService.DeleteFromPrefix(incommand.Path, true); + + return ResponseOutput.Ok(); + } + + public async Task GetAnonymizeInfo(Guid visitTaskId, Guid? subjectVisitId) + { + + Guid svId = Guid.Empty; + + if (subjectVisitId != null) + { + svId = subjectVisitId.Value; + } + else + { + svId = (Guid)_visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => t.SourceSubjectVisitId).FirstOrDefault(); + + } + + // 写入dicom 固定的信息,以及组织路径的信息 以及匿名化的信息 + var otherData = GetSaveToDicomInfo(svId); + + var anonymizeList = _fusionCache.GetOrSetAsync(CacheKeys.SystemAnonymization, _ => CacheHelper.GetSystemAnonymizationListAsync(_systemAnonymizationRepository), TimeSpan.FromDays(7)).Result; + + return ResponseOutput.Ok(new + { + DicomStoreInfo = otherData, + AnonymizeFixedList = anonymizeList.Where(t => t.IsFixed).ToList(), + AnonymizeNotFixedList = anonymizeList.Where(t => t.IsFixed == false).ToList() + }); + } + + public async Task UpdateModality(Guid seriesId, string modality, bool isCRCReplace, + [FromServices] IRepository _taskSeriesRepository, + [FromServices] IRepository _taskStudyRepository + ) + { + if (isCRCReplace) + { + await _dicomSeriesRepository.BatchUpdateNoTrackingAsync(t => t.Id == seriesId, u => new DicomSeries() { Modality = modality }); + + var studyId = _dicomSeriesRepository.Where(t => t.Id == seriesId).Select(t => t.StudyId).FirstOrDefault(); + + //处理Modality + var seriesModalityList = _dicomStudyRepository.Where(t => t.Id == studyId).SelectMany(u => u.SeriesList.Select(t => t.Modality)).Distinct(); + string ModaliyStr = string.Join('、', seriesModalityList.ToList()); + + await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == studyId, u => new DicomStudy() { Modalities = ModaliyStr }); + } + else + { + await _taskSeriesRepository.BatchUpdateNoTrackingAsync(t => t.Id == seriesId, u => new TaskSeries() { Modality = modality }); + + + var studyId = _taskSeriesRepository.Where(t => t.Id == seriesId).Select(t => t.StudyId).FirstOrDefault(); + + //处理Modality + var seriesModalityList = _taskStudyRepository.Where(t => t.Id == studyId).SelectMany(u => u.SeriesList.Select(t => t.Modality)).Distinct(); + string ModaliyStr = string.Join('、', seriesModalityList.ToList()); + + await _taskStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == studyId, u => new TaskStudy() { Modalities = ModaliyStr }); + + } + return ResponseOutput.Ok(); + + } private static async Task TryWriteMergedDicomAsync(Func> sourceFactory, Stream output) { @@ -832,7 +907,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { //更新,需要删除缓存,并更新路径 - await _oSSService.DeleteFromPrefix(insntance.Path,true); + await _oSSService.DeleteFromPrefix(insntance.Path, true); await _dicomInstanceRepository.BatchUpdateNoTrackingAsync(t => t.Id == insntance.Id, u => new DicomInstance() { Path = insntance.Path }); }