提交后发布事件

irc-add-image
hang 2026-08-21 15:34:56 +08:00
parent 80d78cb989
commit 1e9efd6d40
3 changed files with 96 additions and 21 deletions

View File

@ -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": {

View File

@ -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());

View File

@ -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<IResponseOutput> DeleteImageCache(DeleteImagePathCommand incommand)
{
await _oSSService.DeleteFromPrefix(incommand.Path, true);
return ResponseOutput.Ok();
}
public async Task<IResponseOutput> 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<IResponseOutput> UpdateModality(Guid seriesId, string modality, bool isCRCReplace,
[FromServices] IRepository<TaskSeries> _taskSeriesRepository,
[FromServices] IRepository<TaskStudy> _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<bool> TryWriteMergedDicomAsync(Func<Task<Stream>> sourceFactory, Stream output)
{