Compare commits

..

No commits in common. "2bf562d027ac59274e016d674330820b938d9795" and "2f41c21f7549b65e0a9adae0d434c54fdff46a6f" have entirely different histories.

3 changed files with 82 additions and 82 deletions

View File

@ -238,7 +238,33 @@ namespace IRaCIS.Core.API.Controllers
[HttpPost, Route("Study/PreArchiveStudy")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task<IResponseOutput> PreArchiveStudy(PreArchiveStudyCommand preArchiveStudyCommand,
[FromServices] IStudyService _studyService,
[FromServices] IRepository<StudyMonitor> _studyMonitorRepository)
{
var savedInfo = _studyService.GetSaveToDicomInfo(preArchiveStudyCommand.SubjectVisitId);
var studyMonitor = new StudyMonitor()
{
TrialId = savedInfo.TrialId,
SubjectId = savedInfo.SubjectId,
SubjectVisitId = savedInfo.SubjectVisitId,
IsSuccess = false,
UploadStartTime = DateTime.Now,
IsDicom = preArchiveStudyCommand.IsDicom,
IP = _userInfo.IP
};
var addEntity = await _studyMonitorRepository.AddAsync(studyMonitor, true);
return ResponseOutput.Ok(addEntity.Id);
}
/// <summary>Dicom 归档</summary>
@ -420,33 +446,7 @@ namespace IRaCIS.Core.API.Controllers
public string FileType { get; set; }
}
}
[HttpPost, Route("Study/PreArchiveStudy")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task<IResponseOutput> PreArchiveStudy(PreArchiveStudyCommand preArchiveStudyCommand,
[FromServices] IStudyService _studyService,
[FromServices] IRepository<StudyMonitor> _studyMonitorRepository)
{
var savedInfo = _studyService.GetSaveToDicomInfo(preArchiveStudyCommand.SubjectVisitId);
var studyMonitor = new StudyMonitor()
{
TrialId = savedInfo.TrialId,
SubjectId = savedInfo.SubjectId,
SubjectVisitId = savedInfo.SubjectVisitId,
IsSuccess = false,
UploadStartTime = DateTime.Now,
IsDicom = preArchiveStudyCommand.IsDicom,
IP = _userInfo.IP
};
var addEntity = await _studyMonitorRepository.AddAsync(studyMonitor, true);
return ResponseOutput.Ok(addEntity.Id);
}
/// <summary>
/// 上传非Dicom 文件 支持压缩包 多文件上传
/// </summary>

View File

@ -103,12 +103,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
}
[HttpGet]
public async Task<IResponseOutput> DicomUploadInProgress(Guid trialId, string studyInstanceUid, Guid? visitTaskId)
public async Task<IResponseOutput> DicomUploadInProgress(Guid trialId, string studyInstanceUid,Guid? visitTaskId)
{
if (visitTaskId != null)
if(visitTaskId != null)
{
var cacheValue = _fusionCache.GetOrDefault<Guid>(CacheKeys.TrialTaskStudyUidUploading(trialId, visitTaskId.Value, studyInstanceUid));
if (cacheValue != Guid.Empty && cacheValue != _userInfo.Id)
if (cacheValue != Guid.Empty && cacheValue !=_userInfo.Id)
{
//---当前已有人正在上传和归档该检查!
return ResponseOutput.NotOk(StaticData.International("UploadDownLoad_ArchiveInProgress"));
@ -134,7 +134,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task<IResponseOutput> AddOrUpdateArchiveStudy(NewArchiveStudyCommand incommand)
{
//总数为0的检查不允许提交
if (incommand.Study.SeriesList.SelectMany(t => t.InstanceList).Count() == 0)
{
return ResponseOutput.NotOk("Study_InstanceCountZero");
}
var @uploadLock = _distributedLockProvider.CreateLock($"UploadDicom");
@ -159,6 +163,7 @@ 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;
@ -166,36 +171,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
studyMonitor.IsSuccess = incommand.FailedFileCount == 0;
studyMonitor.RecordPath = incommand.RecordPath;
var studyId = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString());
var findStudy = await _dicomstudyRepository.FirstOrDefaultAsync(t => t.Id == studyId);
studyMonitor.StudyId = studyId;
studyMonitor.StudyCode = findStudy?.StudyCode??"";
if (incommand.Study.SeriesList.SelectMany(t => t.InstanceList).Count() == 0)
{
await _studyMonitorRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
//上传
if (studyMonitor.IsDicomReUpload == false)
{
//如果因为意外情况,连续点击两次,导致第一次插入了,第二次进来也会插入,在此判断一下
if (findStudy != null)
{
await _studyMonitorRepository.SaveChangesAsync();
//直接返回
return ResponseOutput.Ok();
}
var addStudy = _mapper.Map<DicomStudy>(incommand.Study);
var study = _mapper.Map<DicomStudy>(incommand.Study);
var @lock = _distributedLockProvider.CreateLock($"StudyCode");
@ -209,34 +188,42 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
int currentNextCodeInt = cacheMaxCodeInt > dbStudyCodeIntMax ? cacheMaxCodeInt + 1 : dbStudyCodeIntMax + 1;
addStudy.Code = currentNextCodeInt;
study.Code = currentNextCodeInt;
addStudy.StudyCode = AppSettings.GetCodeStr(currentNextCodeInt, nameof(DicomStudy));
study.StudyCode = AppSettings.GetCodeStr(currentNextCodeInt, nameof(DicomStudy));
await _fusionCache.SetAsync<int>(CacheKeys.TrialStudyMaxCode(trialId), addStudy.Code, TimeSpan.FromMinutes(30));
await _fusionCache.SetAsync<int>(CacheKeys.TrialStudyMaxCode(trialId), study.Code, TimeSpan.FromMinutes(30));
}
addStudy.Id = studyId;
addStudy.TrialId = incommand.TrialId;
addStudy.SubjectId = incommand.SubjectId;
addStudy.SubjectVisitId = incommand.SubjectVisitId;
addStudy.IsFromPACS = false;
study.Id = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString());
study.TrialId = incommand.TrialId;
study.SubjectId = incommand.SubjectId;
study.SubjectVisitId = incommand.SubjectVisitId;
study.IsFromPACS = false;
//如果因为意外情况,连续点击两次,导致第一次插入了,第二次进来也会插入,在此判断一下
var findStudy = await _dicomstudyRepository.FirstOrDefaultAsync(t => t.Id == study.Id);
if (findStudy != null)
{
//直接返回
return ResponseOutput.Ok();
}
//特殊处理逻辑
addStudy.Modalities = string.Join("、", incommand.Study.SeriesList.Select(t => t.Modality).Distinct());
SpecialArchiveStudyDeal(addStudy);
modalitys = addStudy.Modalities;
study.Modalities = string.Join("、", incommand.Study.SeriesList.Select(t => t.Modality).Distinct());
SpecialArchiveStudyDeal(study);
modalitys = study.Modalities;
await _dicomstudyRepository.AddAsync(addStudy);
await _dicomstudyRepository.AddAsync(study);
studyMonitor.StudyCode = addStudy.StudyCode;
studyMonitor.StudyId = study.Id;
studyMonitor.StudyCode = study.StudyCode;
foreach (var seriesItem in incommand.Study.SeriesList)
@ -244,7 +231,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var series = _mapper.Map<DicomSeries>(seriesItem);
series.Id = IdentifierHelper.CreateGuid(seriesItem.StudyInstanceUid, seriesItem.SeriesInstanceUid, incommand.TrialId.ToString());
series.StudyId = addStudy.Id;
series.StudyId = study.Id;
series.TrialId = incommand.TrialId;
series.SubjectId = incommand.SubjectId;
@ -259,10 +246,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
{
var isntance = _mapper.Map<DicomInstance>(instanceItem);
Guid instanceId = IdentifierHelper.CreateGuid(addStudy.StudyInstanceUid, series.SeriesInstanceUid, isntance.SopInstanceUid, addStudy.TrialId.ToString());
Guid instanceId = IdentifierHelper.CreateGuid(study.StudyInstanceUid, series.SeriesInstanceUid, isntance.SopInstanceUid, study.TrialId.ToString());
isntance.Id = instanceId;
isntance.StudyId = addStudy.Id;
isntance.StudyId = study.Id;
isntance.SeriesId = series.Id;
isntance.TrialId = incommand.TrialId;
@ -273,15 +260,26 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
}
}
}
else
{
var studyId = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString()); ;
var study = await _dicomstudyRepository.FirstOrDefaultAsync(t => t.Id == studyId);
//重传的时候也要赋值检查Id
studyMonitor.StudyId = study.Id;
studyMonitor.StudyCode = study.StudyCode;
//特殊处理逻辑
findStudy.IsFromPACS = false;
findStudy.Modalities = string.Join("、", incommand.Study.SeriesList.Select(t => t.Modality).Union(findStudy.Modalities.Split("、", StringSplitOptions.RemoveEmptyEntries)).Distinct());
SpecialArchiveStudyDeal(findStudy);
modalitys = findStudy.Modalities;
study.IsFromPACS = false;
study.Modalities = string.Join("、", incommand.Study.SeriesList.Select(t => t.Modality).Union(study.Modalities.Split("、", StringSplitOptions.RemoveEmptyEntries)).Distinct());
SpecialArchiveStudyDeal(study);
modalitys = study.Modalities;
// 少了整个序列
@ -299,7 +297,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var series = _mapper.Map<DicomSeries>(seriesItem);
series.Id = seriesId;
series.StudyId = findStudy.Id;
series.StudyId = study.Id;
series.TrialId = incommand.TrialId;
series.SubjectId = incommand.SubjectId;
@ -309,7 +307,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
dicomSeries = await _dicomSeriesRepository.AddAsync(series);
//新的序列 那么 检查的序列数量+1
findStudy.SeriesCount += 1;
study.SeriesCount += 1;
}
else
{
@ -321,7 +319,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
{
var insntance = _mapper.Map<DicomInstance>(instanceItem);
insntance.Id = IdentifierHelper.CreateGuid(insntance.StudyInstanceUid, insntance.SeriesInstanceUid, insntance.SopInstanceUid, trialId.ToString());
insntance.StudyId = findStudy.Id;
insntance.StudyId = study.Id;
insntance.SeriesId = dicomSeries.Id;
insntance.TrialId = incommand.TrialId;
@ -333,7 +331,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
// 不管是新的序列 还是 该序列 掉了Instance 重传的时候 检查的instance 数量都会增加
findStudy.InstanceCount += seriesItem.InstanceList.Count;
study.InstanceCount += seriesItem.InstanceList.Count;
}

View File

@ -251,8 +251,10 @@ namespace IRaCIS.Core.Application.Services
HtmlPath = k.HtmlPath,
Path = k.Path,
InstanceNumber = k.InstanceNumber,
}).ToList();
}
);
//设置为阅片与否 不更改数据库检查 的instance数量 和 SeriesCount 所以这里要实时统计