diff --git a/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs b/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs
index a9a32d2eb..580154c9c 100644
--- a/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs
+++ b/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs
@@ -13,6 +13,8 @@ namespace IRaCIS.Core.Application.Helper
public class StudyDIRInfo
{
+ public bool IsTaskStudy { get; set; }
+
public Guid SubjectVisitId { get; set; }
// Study
public Guid DicomStudyId { get; set; }
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 872d7361e..72a97326d 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -1116,14 +1116,6 @@
-
-
-
- 下载已经删除的影像
-
-
-
-
读取该项目的数据,进行维护
@@ -1525,6 +1517,14 @@
+
+
+ GPT 移动子树代码--适合一次提交事务
+
+
+
+
+
插入闭包表关系
@@ -2219,6 +2219,12 @@
+
+
+ 获取受试者级别 访视标注列表
+
+
+
受试者级别所有的影像
@@ -13047,7 +13053,7 @@
- 新增修改想想项目表格问题
+ 新增修改项目表格问题
diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs
index 8c5da6795..dc8986c18 100644
--- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs
+++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs
@@ -269,8 +269,7 @@ namespace IRaCIS.Core.Application.Contracts
public AddOrUpdateStudyDto Study { get; set; }
- [NotDefault]
- public Guid VisitTaskId { get; set; }
+ public Guid? VisitTaskId { get; set; }
public bool? IsImageSegmentLabel { get; set; }
}
@@ -454,8 +453,9 @@ namespace IRaCIS.Core.Application.Contracts
public class IRTaskUploadedDicomStudyQuery
{
- [NotDefault]
- public Guid VisitTaskId { get; set; }
+ public Guid? VisitTaskId { get; set; }
+
+ public Guid? SubjectVisitId { get; set; }
}
public class IRUploadTaskDicomStudyDto : DicomStudyBasicInfo
@@ -953,6 +953,8 @@ namespace IRaCIS.Core.Application.Contracts
public string VisitName { get; set; }
+ public Guid SourceSubjectVisitId { get; set; }
+
public List DicomStudyList { get; set; } = new List();
diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs
index e96136e4d..9453074da 100644
--- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs
+++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs
@@ -159,7 +159,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
if (inQuery.IsImageSegmentLabel == true)
{
- var querySV = _subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId)
+ var querySV = _subjectVisitRepository.WhereIf(inQuery.SubjectVisitId != null, t => t.Id == inQuery.SubjectVisitId)
.WhereIf(inQuery.SubjectId != null, t => t.SubjectId == inQuery.SubjectId)
.Select(u => new SubjectVisitMarkUploadDto()
{
@@ -174,6 +174,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
.Select(t => new StudyBasicInfo()
{
Id = t.Id,
+ SubjectVisitId = t.SubjectVisitId,
+
StudyInstanceUid = t.StudyInstanceUid,
ModalityForEdit = t.ModalityForEdit,
BodyPartExamined = t.BodyPartExamined,
@@ -194,6 +196,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
UploadStudyList = u.TaskStudyList.Select(t => new StudyBasicInfo()
{
Id = t.Id,
+ SubjectVisitId = t.SubjectVisitId,
StudyInstanceUid = t.StudyInstanceUid,
ModalityForEdit = t.ModalityForEdit,
BodyPartExamined = t.BodyPartExamined,
@@ -252,7 +255,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
OrginalStudyList = u.SourceSubjectVisit.StudyList
.Where(t => u.TrialReadingCriterion.IsImageFilter ? ("|" + u.TrialReadingCriterion.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
- .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true)
+ .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true)
.Select(t => new StudyBasicInfo()
{
Id = t.Id,
@@ -548,9 +551,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var @uploadLock = _distributedLockProvider.CreateLock($"UploadTaskDicom");
+ var visiTaskId = incommand.VisitTaskId ?? Guid.Empty;
+
using (await @uploadLock.AcquireAsync())
{
- if (_fusionCache.GetOrDefault(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)) != Guid.Empty)
+ if (_fusionCache.GetOrDefault(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid)) != Guid.Empty)
{
//---当前已有人正在上传和归档该检查!
return ResponseOutput.NotOk(I18n.T("UploadDownLoad_ArchiveInProgress"));
@@ -558,7 +563,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
else
{
//在事务未完成前 防止前端重复提交
- await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid), _userInfo.UserRoleId, TimeSpan.FromMinutes(1));
+ await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid), _userInfo.UserRoleId, TimeSpan.FromMinutes(1));
}
}
@@ -570,7 +575,6 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
svId = _dicomStudyRepository.Where(t => t.TrialId == incommand.TrialId && t.StudyInstanceUid == incommand.Study.StudyInstanceUid).Select(t => t.SubjectVisitId).FirstOrDefault();
}
- var visiTaskId = incommand.VisitTaskId;
var modalitys = string.Empty;
@@ -805,8 +809,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
}
finally
{
- await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid));
- await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidUploading(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid));
+ await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid));
+ await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidUploading(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid));
}
@@ -868,7 +872,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
///
///
[HttpPost]
- public async Task> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery)
+ public async Task>> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery)
{
var subjectCode = inQuery.SubjectCode;
var subjectId = inQuery.SubjectId;
@@ -895,10 +899,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId)
.Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync();
+ var config = await _subjectRepository.Where(t => t.Id == subjectId).Select(t => new { t.Trial.ImageFormatList, t.Trial.StudyNameList, t.Trial.IsShowStudyName }).FirstOrDefaultAsync();
+
+
//靶段标注上传,查看访视级别,上传绑定访视级别
if (inQuery.IsImageSegmentLabel == true)
{
- var list = _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId && t.SubjectVisitId == inQuery.SubjectVisitId)
+ var list = _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId)
+ .WhereIf(inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId)
//.WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|"))
.Select(u => new TaskNoneDicomStudyDTO()
{
@@ -950,7 +958,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
item.UploadedFileList = noneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).ToList();
}
- return list;
+ return ResponseOutput.Ok(list, config);
}
else
{
@@ -981,7 +989,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
StudyCode = ns.StudyCode,
//靶段标注 阅片IR 上传时IsImageSegmentLabel == false ,正常后处理上传IsImageSegmentLabel 该字段为空
- FileList = (inQuery.IsImageSegmentLabel == false ? ns.NoneDicomFileList : ns.ImageLabelNoneDicomFileList)
+ FileList = (inQuery.IsImageSegmentLabel == false ? ns.ImageLabelNoneDicomFileList : ns.NoneDicomFileList)
.Select(t => new NoneDicomFileInfo()
{
FileType = t.FileType,
@@ -1018,7 +1026,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
item.UploadedFileList = taskNoneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).ToList();
}
- return list;
+ return ResponseOutput.Ok(list, config);
}
@@ -1248,6 +1256,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var dicomStudyList = list.Where(item => item.DicomStudyList.Count > 0)
.Select(item => new SubjectVisitMarkStudyDto
{
+ SourceSubjectVisitId = item.SourceSubjectVisitId,
VisitTaskId = item.VisitTaskId,
SubjectId = item.SubjectId,
SubjectCode = item.SubjectCode,
@@ -1260,6 +1269,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var noneStudyList = list.Where(item => item.NoneDicomStudyList.Count > 0)
.Select(item => new SubjectVisitMarkStudyDto
{
+ SourceSubjectVisitId = item.SourceSubjectVisitId,
VisitTaskId = item.VisitTaskId,
SubjectId = item.SubjectId,
SubjectCode = item.SubjectCode,
@@ -1336,8 +1346,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
foreach (var item in list)
{
- item.DicomStudyList.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true).ToList()
- .AddRange(preDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList());
+ var dicomList = item.DicomStudyList.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true).ToList();
+
+ dicomList.AddRange(preDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList());
+
+ item.DicomStudyList = dicomList;
item.NoneDicomStudyList = _mapper.Map>(preNoneDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList());
}
@@ -1433,7 +1446,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var dirInfolist = _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))).SelectMany(t => t.StudyList)
.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false)
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
- .Where(t => inQuery.IsImageSegmentLabel == true ? t.ModalityForEdit == "XA" : true)
+ .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true)
.SelectMany(t => t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading))
.Select(t => new StudyDIRInfo()
{
@@ -1476,6 +1489,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var taskDirInfolist = _taskInstanceRepository.Where(t => t.SubjectVisitId != null)
.Where(t => subjectVisitIdList.Contains((Guid)t.SubjectVisitId)).Select(t => new StudyDIRInfo()
{
+ IsTaskStudy = true,
SubjectVisitId = (Guid)t.SubjectVisitId,
DicomStudyId = t.TaskStudy.Id,
@@ -1519,6 +1533,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
{
var visitId = item.First().SubjectVisitId;
+ var isTaskStudy = item.First().IsTaskStudy;
+
var ossFolder = $"{pathInfo.TrialId}/Image/{pathInfo.SubjectId}/{visitId}/{item.Key.StudyInstanceUid}";
var isSucess = await SafeBussinessHelper.RunAsync(async () => await DicomDIRHelper.GenerateStudyDIRAndUploadAsync(item.ToList(), dirDic, ossFolder, _oSSService));
@@ -1526,7 +1542,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
if (isSucess)
{
- await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" });
+ if (isTaskStudy)
+ {
+ await _taskStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new TaskStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" });
+ }
+ else
+ {
+ await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" });
+ }
}
}
@@ -1540,12 +1563,17 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
from leftVisitTask in cc.DefaultIfEmpty()
select new ImageDownloadDto()
{
+ TrialId = sv.TrialId,
+ SubjectId = sv.SubjectId,
+ TrialSiteCode = sv.TrialSite.TrialSiteCode,
+ VisitId = sv.Id,
+
SubjectCode = inQuery.SubjectCode,
VisitName = sv.VisitName,
TaskBlindName = leftVisitTask.TaskBlindName,
StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false)
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
- .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true)
+ .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true)
.Select(u => new DownloadDicomStudyDto()
{
PatientId = u.PatientId,
@@ -1596,7 +1624,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
}).ToList()
,
- NoneDicomStudyList = inQuery.IsImageSegmentLabel == null ? sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false)
+ NoneDicomStudyList = inQuery.IsImageSegmentLabel != false ? sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false)
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true)
.Where(t => t.IsReading)
.Select(nd => new DownloadNoneDicomStudyDto()
@@ -1689,11 +1717,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
[HttpPost]
public async Task GetTaskUploadedDicomStudyList(IRTaskUploadedDicomStudyQuery inQuery)
{
- var info = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId)
+ var info = await _visitTaskRepository
+ .WhereIf(inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId)//正常后处理
.Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync();
- var query = _taskStudyRepository.Where(t => t.VisitTaskId == inQuery.VisitTaskId)
- .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
+ var query = _taskStudyRepository
+ .WhereIf(inQuery.VisitTaskId != null, t => t.VisitTaskId == inQuery.VisitTaskId)//正常后处理
+ .WhereIf(inQuery.VisitTaskId == null && inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId)//靶段标注处理的影像
+ .WhereIf(info.IsImageFilter && inQuery.VisitTaskId != null, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))
.Select(t => new
{
StudyId = t.Id,
@@ -2195,14 +2226,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
[HttpPost]
public async Task>> GetTrialSubjectVisitMarkList(SubjectVisitMarkQuery inQuery)
{
- var list = await _subjectRepository.Where(t => t.TrialId == inQuery.TrialId)
+ var list = await _subjectRepository.Where(t => t.TrialId == inQuery.TrialId && t.SubjectDoctorList.Any())
.WhereIf(inQuery.SubjectCode.IsNotNullOrEmpty(), t => t.Code.Contains(inQuery.SubjectCode))
.WhereIf(inQuery.IsUrgent != null, t => t.IsUrgent == inQuery.IsUrgent)
.Select(t => new SubjectVisitMarkDTO()
{
TrialId = t.TrialId,
SubjectId = t.Id,
- SubjectCode=t.Code,
+ SubjectCode = t.Code,
IsUrgent = t.IsUrgent,
VisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(),
MarkVisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(t => t.TaskStudyList.Any()),
@@ -2211,7 +2242,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
MarkDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.TaskStudyList).Count(),
NoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Count(),
- MarkNoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Where(t=>t.ImageLabelNoneDicomFileList.Any()).Count(),
+ MarkNoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Where(t => t.ImageLabelNoneDicomFileList.Any()).Count(),
}).ToPagedListAsync(inQuery);
return ResponseOutput.Ok(list);
diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs
index 8f7d4b85e..bf23ed095 100644
--- a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs
+++ b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs
@@ -4,6 +4,7 @@
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using IRaCIS.Core.Application.Filter;
+using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
using Medallion.Threading;
@@ -34,7 +35,8 @@ namespace IRaCIS.Core.Application.Contracts
[FromQuery] Guid? nonedicomStudyId,
[FromQuery] bool isFilterZip,
[FromQuery] Guid? visitTaskId,
- [FromQuery] bool isReading)
+ [FromQuery] bool isReading,
+ [FromQuery] bool? isImageSegmentLabel)
{
var qcAuditState = await _subjectVisitRepository.Where(s => s.Id == subjectVisitId).Select(t => t.AuditState).FirstOrDefaultAsync();
@@ -45,26 +47,53 @@ namespace IRaCIS.Core.Application.Contracts
var isViewDelete = !isQCFinished;
IQueryable noneDicomStudyQueryable = default;
- if (visitTaskId == null)
+ if (visitTaskId == null || visitTaskId == Guid.Empty)
{
- //质控过程中,需要忽略过滤质控设置删除的检查,以及设置删除的文件,质控通过后才
- noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete)
- .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId)
- .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false)
+ if (visitTaskId == null)
+ {
+
+ //质控过程中,需要忽略过滤质控设置删除的检查,以及设置删除的文件,质控通过后才
+ noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete)
+ .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId)
+ .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false)
+ .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading });
+ }
+ else
+ {
+ //靶段标注上传后查看影像
+
+ noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete)
+ .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false)
+ .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId)
+ .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading });
+
+ }
- .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading });
}
else
{
- var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(t => new { t.BlindSubjectCode, t.TrialReadingCriterionId, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync();
+ var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(t => new { t.BlindSubjectCode, t.TrialReadingCriterionId, t.TrialReadingCriterion.CriterionType, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync();
+
+ if ((taskinfo.CriterionType == CriterionType.IVUS || taskinfo.CriterionType == CriterionType.OCT) && isImageSegmentLabel == false)
+ {
+ //后处理原始影像预览
+ noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete)
+ .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false)
+ .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId)
+ .Where(t => taskinfo.IsImageFilter ? ("|" + taskinfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true)
+ .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, visiTaskId = visitTaskId, isReading = isReading });
+ }
+ else
+ {
+ noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.TaskNoneDicomFileList.Any(t => t.VisitTaskId == visitTaskId), ignoreQueryFilters: isViewDelete)
+ .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false)
+ .Where(t => taskinfo.IsImageFilter ? ("|" + taskinfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true)
+ .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId)
+ .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, visiTaskId = visitTaskId, isReading = isReading });
+ }
- noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.TaskNoneDicomFileList.Any(t => t.VisitTaskId == visitTaskId), ignoreQueryFilters: isViewDelete)
- .WhereIf(isReading, t => t.IsReading && t.IsDeleted == false)
- .Where(t => taskinfo.IsImageFilter ? ("|" + taskinfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true)
- .WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId)
- .ProjectTo(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, visiTaskId = visitTaskId, isReading = isReading });
}
diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs
index 08b0f4c16..4b271380f 100644
--- a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs
@@ -166,6 +166,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap()
+ .ForMember(d => d.SourceSubjectVisitId, u => u.MapFrom(u => u.Id))
.ForMember(d => d.SubjectCode, u => u.MapFrom(u => u.Subject.Code))
.ForMember(d => d.DicomStudyList, u => u.MapFrom(s => s.StudyList))
.ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.NoneDicomStudyList.Where(t => t.IsReading)));
diff --git a/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs
index 7162e8c3e..1a673eb78 100644
--- a/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs
+++ b/IRaCIS.Core.Application/Service/QC/DTO/NoneDicomStudyViewModel.cs
@@ -31,6 +31,11 @@ namespace IRaCIS.Core.Application.Contracts
{
}
+ public class ImageLabelNoneDicomStudyView : NoneDicomStudyView
+ {
+
+ }
+
///NoneDicomStudyQuery 列表查询参数模型
public class NoneDicomStudyQuery
{
diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
index a756d131b..4a44ee0e1 100644
--- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
@@ -755,6 +755,13 @@ namespace IRaCIS.Core.Application.Service
.OrderBy(t => t.CreateTime).ThenBy(t => t.FileName)))
.ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode));
+ CreateMap()
+ .ForMember(d => d.NoneDicomStudyFileList, u => u.MapFrom(s =>
+ s.ImageLabelNoneDicomFileList.Where(t => isFilterZip ? !t.FileType.Contains(StaticData.FileType.Zip) : true)
+ .Where(t => isReading ? t.IsReading && t.IsDeleted == false : true)
+ .OrderBy(t => t.CreateTime).ThenBy(t => t.FileName)))
+ .ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode));
+
CreateMap()
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs
index fb53fe6ab..e353005a0 100644
--- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs
+++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs
@@ -224,27 +224,42 @@ namespace IRaCIS.Core.Application.Services
var isImageFilter = false;
var criterionModalitys = "";
- if (visitTaskId != null)
+ var criterionType = CriterionType.NoCriterion;
+
+ var isVisitTask = false;
+
+ bool? isImageSegmentLabel = null;
+ if (visitTaskId != null && visitTaskId != Guid.Empty)
{
+ isVisitTask = true;
var info = await _visitTaskRepository.Where(t => t.Id == visitTaskId)
- .Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync();
+ .Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys, t.TrialReadingCriterion.CriterionType }).FirstNotNullAsync();
isImageFilter = info.IsImageFilter;
criterionModalitys = info.CriterionModalitys;
+
+ criterionType = info.CriterionType;
+
+ if (criterionType == CriterionType.OCT || criterionType == CriterionType.IVUS)
+ {
+ isImageSegmentLabel = true;
+ }
}
var studyList = await _dicomStudyRepository.Where(t => t.TrialId == trialId && t.SubjectVisitId == sujectVisitId).IgnoreQueryFilters()
- .Where(t => isImageFilter ? ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
- .WhereIf(isReading == 1 || isQCFinished, s => s.IsDeleted == false)
- .Select(k => new VisitStudyDTO()
- {
- InstanceCount = k.InstanceCount,
- Modalities = k.Modalities,
- //SeriesCount = k.SeriesCount,
- StudyCode = k.StudyCode,
- StudyId = k.Id
- }).ToListAsync();
+ .Where(t => isImageFilter ? ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
+ .WhereIf(isReading == 1 || isQCFinished, s => s.IsDeleted == false)
+ //预览靶段标注上传的影像 影像后处理 上传了新的影像 还要原始dsa
+ .WhereIf(isImageSegmentLabel == true && isVisitTask && (criterionType == CriterionType.OCT || criterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT")
+ .Select(k => new VisitStudyDTO()
+ {
+ InstanceCount = k.InstanceCount,
+ Modalities = k.Modalities,
+ //SeriesCount = k.SeriesCount,
+ StudyCode = k.StudyCode,
+ StudyId = k.Id
+ }).ToListAsync();
var studyIds = studyList.Select(t => t.StudyId).ToList();
@@ -287,12 +302,29 @@ namespace IRaCIS.Core.Application.Services
t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
}
+ //预览靶段标注上传的影像
+ if (isImageSegmentLabel == true && isVisitTask)
+ {
+ var taskStudyList = await _taskStudyRepository.Where(t => t.SubjectVisitId == sujectVisitId)
+ .WhereIf(isImageFilter, t => ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+ foreach (var study in taskStudyList)
+ {
+ study.SeriesList = study.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList();
+
+ study.InstanceCount = study.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
+ }
+
+ studyList.AddRange(taskStudyList);
+ }
return studyList.Where(x => x.SeriesList.Count() > 0).ToList();
- //return ResponseOutput.Ok(studyList.Where(t => t.SeriesList.Count > 0).ToList());
+
+
}
@@ -484,7 +516,7 @@ namespace IRaCIS.Core.Application.Services
.WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
//影像后处理 上传了新的影像 还要原始dsa
- .WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA")
+ .WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT")
.WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType != CriterionType.OCT || taskInfo.CriterionType != CriterionType.IVUS), t => false)
.Select(k => new VisitStudyDTO()
{