Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
a7db67adb6
|
@ -229,6 +229,30 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class TaskStudyAchivePreConfirmCommand
|
||||||
|
{
|
||||||
|
public List<string> StudyInstanceUidList { get; set; }
|
||||||
|
|
||||||
|
[NotDefault]
|
||||||
|
public Guid SubjectId { get; set; }
|
||||||
|
[NotDefault]
|
||||||
|
public string SubjectCode { get; set; }
|
||||||
|
|
||||||
|
[NotDefault]
|
||||||
|
public Guid TrialId { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TaskStudyArchiveConfirmResult
|
||||||
|
{
|
||||||
|
public string StudyInstanceUid { get; set; }
|
||||||
|
|
||||||
|
public bool IsAllowUpload { get; set; }
|
||||||
|
|
||||||
|
public bool IsAllowReUpload { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public class TaskArchiveStudyCommand
|
public class TaskArchiveStudyCommand
|
||||||
{
|
{
|
||||||
[NotDefault]
|
[NotDefault]
|
||||||
|
|
|
@ -241,11 +241,49 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 在调用预归档前验证 这些检查是否可以全新上传还是已存在补充 目前前端允许 IsAllowUpload==true 全新、IsAllowReUpload==true 补充的study ,全部丢到后端,后端判断存在,就删除之前的检查,全新插入
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="inCommand"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<TaskStudyArchiveConfirmResult>> VerifyIRStudyAllowUpload(TaskStudyAchivePreConfirmCommand inCommand)
|
||||||
|
{
|
||||||
|
|
||||||
//public async Task<List<VerifyStudyUploadResult>> VerifyIRStudyAllowUpload(VerifyUploadOrReupload inCommand)
|
|
||||||
//{
|
|
||||||
|
|
||||||
//}
|
var notAllowedUidList = _taskStudyRepository.Where(t => t.TrialId == inCommand.TrialId && inCommand.StudyInstanceUidList.Contains(t.StudyInstanceUid)).Select(t => new
|
||||||
|
{
|
||||||
|
t.StudyInstanceUid,
|
||||||
|
t.SubjectId,
|
||||||
|
SubejectCode = t.VisitTask.IsAnalysisCreate ? t.VisitTask.BlindSubjectCode : t.Subject.Code
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
var result = new List<TaskStudyArchiveConfirmResult>();
|
||||||
|
|
||||||
|
foreach (var studyUid in inCommand.StudyInstanceUidList)
|
||||||
|
{
|
||||||
|
var findStudy = notAllowedUidList.Where(t => t.StudyInstanceUid == studyUid).FirstOrDefault();
|
||||||
|
if (findStudy != null)
|
||||||
|
{
|
||||||
|
//同一个subject 同一份影响
|
||||||
|
if (findStudy.SubejectCode == inCommand.SubjectCode && findStudy.SubjectId == inCommand.SubjectId)
|
||||||
|
{
|
||||||
|
result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = true });
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = false, IsAllowUpload = false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//说明没上传 不用管
|
||||||
|
result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowUpload = true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||||
|
@ -276,6 +314,28 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
//总数为0的检查不允许提交
|
||||||
|
if (incommand.Study.SeriesList.SelectMany(t => t.InstanceList).Count() == 0)
|
||||||
|
{
|
||||||
|
return ResponseOutput.NotOk("Study_InstanceCountZero");
|
||||||
|
}
|
||||||
|
|
||||||
|
var @uploadLock = _distributedLockProvider.CreateLock($"UploadTaskDicom");
|
||||||
|
|
||||||
|
using (await @uploadLock.AcquireAsync())
|
||||||
|
{
|
||||||
|
if (_fusionCache.GetOrDefault<Guid>(CacheKeys.TrialStudyUidDBLock(incommand.TrialId, incommand.Study.StudyInstanceUid)) != Guid.Empty)
|
||||||
|
{
|
||||||
|
//---当前已有人正在上传和归档该检查!
|
||||||
|
return ResponseOutput.NotOk(StaticData.International("UploadDownLoad_ArchiveInProgress"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//在事务未完成前 防止前端重复提交
|
||||||
|
await _fusionCache.SetAsync(CacheKeys.TrialStudyUidDBLock(incommand.TrialId, incommand.Study.StudyInstanceUid), _userInfo.Id, TimeSpan.FromMinutes(3));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var visiTaskId = incommand.VisitTaskId;
|
var visiTaskId = incommand.VisitTaskId;
|
||||||
|
|
||||||
var modalitys = string.Empty;
|
var modalitys = string.Empty;
|
||||||
|
@ -295,6 +355,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
//上传
|
//上传
|
||||||
if (studyMonitor.IsDicomReUpload == false)
|
if (studyMonitor.IsDicomReUpload == false)
|
||||||
{
|
{
|
||||||
|
//目前不考虑重传的问题,后面的直接覆盖前面的,全部删除
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var study = _mapper.Map<TaskStudy>(incommand.Study);
|
var study = _mapper.Map<TaskStudy>(incommand.Study);
|
||||||
|
|
||||||
var @lock = _distributedLockProvider.CreateLock($"StudyCode");
|
var @lock = _distributedLockProvider.CreateLock($"StudyCode");
|
||||||
|
@ -756,12 +820,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
{
|
{
|
||||||
var query = _taskStudyRepository.Where(t => t.VisitTaskId == inQuery.VisitTaskId).Select(t => new
|
var query = _taskStudyRepository.Where(t => t.VisitTaskId == inQuery.VisitTaskId).Select(t => new
|
||||||
{
|
{
|
||||||
StudyId=t.Id,
|
StudyId = t.Id,
|
||||||
t.Modalities,
|
t.Modalities,
|
||||||
t.InstanceCount,
|
t.InstanceCount,
|
||||||
t.SeriesCount,
|
t.SeriesCount,
|
||||||
t.StudyCode,
|
t.StudyCode,
|
||||||
SeriesList= t.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(u=>new
|
SeriesList = t.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(u => new
|
||||||
{
|
{
|
||||||
u.SeriesTime,
|
u.SeriesTime,
|
||||||
u.InstanceCount,
|
u.InstanceCount,
|
||||||
|
@ -772,25 +836,25 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
u.SeriesNumber,
|
u.SeriesNumber,
|
||||||
u.SliceThickness,
|
u.SliceThickness,
|
||||||
u.StudyInstanceUid,
|
u.StudyInstanceUid,
|
||||||
|
|
||||||
IsExistMutiFrames= u.InstanceList.Any(t=>t.NumberOfFrames>1),
|
|
||||||
|
|
||||||
InstanceInfoList =u.InstanceList.OrderBy(t => t.InstanceNumber).Select(k =>
|
IsExistMutiFrames = u.InstanceList.Any(t => t.NumberOfFrames > 1),
|
||||||
new InstanceBasicInfo()
|
|
||||||
{
|
|
||||||
Id = k.Id,
|
|
||||||
NumberOfFrames = k.NumberOfFrames,
|
|
||||||
HtmlPath = k.HtmlPath,
|
|
||||||
Path = k.Path,
|
|
||||||
InstanceNumber = k.InstanceNumber,
|
|
||||||
|
|
||||||
}).ToList()
|
InstanceInfoList = u.InstanceList.OrderBy(t => t.InstanceNumber).Select(k =>
|
||||||
|
new InstanceBasicInfo()
|
||||||
|
{
|
||||||
|
Id = k.Id,
|
||||||
|
NumberOfFrames = k.NumberOfFrames,
|
||||||
|
HtmlPath = k.HtmlPath,
|
||||||
|
Path = k.Path,
|
||||||
|
InstanceNumber = k.InstanceNumber,
|
||||||
|
|
||||||
|
}).ToList()
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
var list = await query.ToListAsync();
|
var list = await query.ToListAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok(list);
|
return ResponseOutput.Ok(list);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue