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

IRC_NewDev
he 2024-09-06 11:31:22 +08:00
commit a7db67adb6
2 changed files with 105 additions and 17 deletions

View File

@ -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
{
[NotDefault]

View File

@ -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" })]
@ -276,6 +314,28 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
#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 modalitys = string.Empty;
@ -295,6 +355,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
//上传
if (studyMonitor.IsDicomReUpload == false)
{
//目前不考虑重传的问题,后面的直接覆盖前面的,全部删除
var study = _mapper.Map<TaskStudy>(incommand.Study);
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
{
StudyId=t.Id,
StudyId = t.Id,
t.Modalities,
t.InstanceCount,
t.SeriesCount,
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.InstanceCount,
@ -772,25 +836,25 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
u.SeriesNumber,
u.SliceThickness,
u.StudyInstanceUid,
IsExistMutiFrames= u.InstanceList.Any(t=>t.NumberOfFrames>1),
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,
IsExistMutiFrames = u.InstanceList.Any(t => t.NumberOfFrames > 1),
}).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();
return ResponseOutput.Ok(list);
}