修改上传逻辑

This commit is contained in:
2024-09-12 16:09:37 +08:00
parent d600862fb0
commit df1665307a
28 changed files with 444 additions and 2662 deletions
@@ -186,11 +186,6 @@ namespace IRaCIS.Core.Application.Contracts
[NotDefault]
public Guid SubjectVisitId { get; set; }
public long FileSize { get; set; }
public bool IsDicomReUpload { get; set; }
public int FileCount { get; set; }
}
@@ -232,16 +232,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
TrialId = preArchiveStudyCommand.TrialId,
SubjectId = preArchiveStudyCommand.SubjectId,
SubjectVisitId = preArchiveStudyCommand.SubjectVisitId,
IsSuccess = false,
UploadStartTime = DateTime.Now,
IsDicom = true,
IP = _userInfo.IP,
IsDicomReUpload = preArchiveStudyCommand.IsDicomReUpload,
FileSize = preArchiveStudyCommand.FileSize,
FileCount = preArchiveStudyCommand.FileCount,
};
@@ -372,17 +367,20 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
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());
var findStudy = await _taskStudyRepository.FirstOrDefaultAsync(t => t.Id == studyId);
studyMonitor.StudyId = studyId;
studyMonitor.StudyCode = findStudy?.StudyCode ?? "";
studyMonitor.IsDicomReUpload = findStudy != null;
//上传
if (studyMonitor.IsDicomReUpload == false)
{
//目前不考虑重传的问题,后面的直接覆盖前面的,全部删除
if (_taskStudyRepository.Any(t => t.VisitTaskId == visiTaskId && t.StudyInstanceUid == incommand.Study.StudyInstanceUid))
{
await _taskStudyRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visiTaskId);
await _taskSeriesRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visiTaskId);
await _taskInstanceRepository.BatchDeleteNoTrackingAsync(t => t.VisitTaskId == visiTaskId);
}
var study = _mapper.Map<TaskStudy>(incommand.Study);
@@ -422,7 +420,6 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
await _taskStudyRepository.AddAsync(study);
studyMonitor.StudyId = study.Id;
studyMonitor.StudyCode = study.StudyCode;
@@ -465,18 +462,16 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
else
{
var studyId = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString(), visiTaskId.ToString());
var study = await _taskStudyRepository.FirstOrDefaultAsync(t => t.Id == studyId);
//重传的时候也要赋值检查Id
studyMonitor.StudyId = study.Id;
studyMonitor.StudyCode = study.StudyCode;
studyMonitor.StudyId = findStudy.Id;
studyMonitor.StudyCode = findStudy.StudyCode;
//特殊处理逻辑
study.Modalities = string.Join("、", incommand.Study.SeriesList.Select(t => t.Modality).Union(study.Modalities.Split("、", StringSplitOptions.RemoveEmptyEntries)).Distinct());
SpecialArchiveStudyDeal(study);
modalitys = study.Modalities;
findStudy.Modalities = string.Join("、", incommand.Study.SeriesList.Select(t => t.Modality).Union(findStudy.Modalities.Split("、", StringSplitOptions.RemoveEmptyEntries)).Distinct());
SpecialArchiveStudyDeal(findStudy);
modalitys = findStudy.Modalities;
// 少了整个序列
@@ -494,7 +489,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var series = _mapper.Map<TaskSeries>(seriesItem);
series.Id = seriesId;
series.StudyId = study.Id;
series.StudyId = findStudy.Id;
series.TrialId = incommand.TrialId;
series.SubjectId = incommand.SubjectId;
@@ -505,7 +500,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
dicomSeries = await _taskSeriesRepository.AddAsync(series);
//新的序列 那么 检查的序列数量+1
study.SeriesCount += 1;
findStudy.SeriesCount += 1;
}
else
{
@@ -517,7 +512,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
{
var insntance = _mapper.Map<TaskInstance>(instanceItem);
insntance.Id = IdentifierHelper.CreateGuid(insntance.StudyInstanceUid, insntance.SeriesInstanceUid, insntance.SopInstanceUid, trialId.ToString(), visiTaskId.ToString());
insntance.StudyId = study.Id;
insntance.StudyId = findStudy.Id;
insntance.SeriesId = dicomSeries.Id;
insntance.TrialId = incommand.TrialId;
@@ -529,7 +524,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
// 不管是新的序列 还是 该序列 掉了Instance 重传的时候 检查的instance 数量都会增加
study.InstanceCount += seriesItem.InstanceList.Count;
findStudy.InstanceCount += seriesItem.InstanceList.Count;
}
@@ -171,6 +171,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
studyMonitor.StudyId = studyId;
studyMonitor.StudyCode = findStudy?.StudyCode??"";
studyMonitor.IsDicomReUpload = findStudy != null;
if (incommand.Study.SeriesList.SelectMany(t => t.InstanceList).Count() == 0)
@@ -183,18 +184,6 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
//上传
if (studyMonitor.IsDicomReUpload == false)
{
//如果因为意外情况,连续点击两次,导致第一次插入了,第二次进来也会插入,在此判断一下
if (findStudy != null)
{
await _studyMonitorRepository.SaveChangesAsync();
//直接返回
return ResponseOutput.Ok();
}
var addStudy = _mapper.Map<DicomStudy>(incommand.Study);
var @lock = _distributedLockProvider.CreateLock($"StudyCode");