Merge branch 'Uat_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Uat_IRC_Net8
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
11450a973a
|
|
@ -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; }
|
||||
|
|
|
|||
|
|
@ -1116,14 +1116,6 @@
|
|||
<param name="trialId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<!-- Badly formed XML comment ignored for member "M:IRaCIS.Core.Application.Service.TrialImageDownloadService.TrialImageAddExtralField(System.Guid,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomInstance},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomSeries})" -->
|
||||
<member name="M:IRaCIS.Core.Application.Service.TrialImageDownloadService.DownloadDeleteTrialImage(System.Guid)">
|
||||
<summary>
|
||||
下载已经删除的影像
|
||||
</summary>
|
||||
<param name="trialId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.TrialImageDownloadService.WriteTrialNeedDealData(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomInstance},System.Guid)">
|
||||
<summary>
|
||||
读取该项目的数据,进行维护
|
||||
|
|
@ -1525,6 +1517,14 @@
|
|||
<param name="inCommand"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.MoveSubtreeAsync(System.Guid,System.Nullable{System.Guid})">
|
||||
<summary>
|
||||
GPT 移动子树代码--适合一次提交事务
|
||||
</summary>
|
||||
<param name="subtreeRootId"></param>
|
||||
<param name="newParentId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.AddClosureRelationsAsync(System.Guid,System.Nullable{System.Guid})">
|
||||
<summary>
|
||||
插入闭包表关系
|
||||
|
|
@ -2219,6 +2219,12 @@
|
|||
<param name="inCommand"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.DownloadAndUploadService.GetTrialSubjectVisitMarkList(IRaCIS.Core.Application.Contracts.SubjectVisitMarkQuery)">
|
||||
<summary>
|
||||
获取受试者级别 访视标注列表
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.DownloadAndUploadService.GetSubejectOrVisitZipInfo(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject},IRaCIS.Core.Application.Contracts.SubejctZipInfoQuery)">
|
||||
<summary>
|
||||
受试者级别所有的影像
|
||||
|
|
@ -13047,7 +13053,7 @@
|
|||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.ReadingQuestionService.AddOrUpdateReadingTableQuestionTrial(IRaCIS.Core.Application.Service.Reading.Dto.ReadingTableQuestionTrialAddOrEdit)">
|
||||
<summary>
|
||||
新增修改想想项目表格问题
|
||||
新增修改项目表格问题
|
||||
</summary>
|
||||
<param name="indto"></param>
|
||||
<returns></returns>
|
||||
|
|
|
|||
|
|
@ -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<DicomStudyBasicInfo> DicomStudyList { get; set; } = new List<DicomStudyBasicInfo>();
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Guid>(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)) != Guid.Empty)
|
||||
if (_fusionCache.GetOrDefault<Guid>(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
|
|||
/// <param name="inQuery"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<List<TaskNoneDicomStudyDTO>> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery)
|
||||
public async Task<IResponseOutput<List<TaskNoneDicomStudyDTO>>> 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<List<NoneDicomStudyBasicInfo>>(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<IResponseOutput> 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<IResponseOutput<PageOutput<SubjectVisitMarkDTO>>> 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);
|
||||
|
|
|
|||
|
|
@ -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<NoneDicomStudyView> 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<NoneDicomStudyView>(_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<ImageLabelNoneDicomStudyView>(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading });
|
||||
|
||||
}
|
||||
|
||||
|
||||
.ProjectTo<NoneDicomStudyView>(_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<ImageLabelNoneDicomStudyView>(_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<TaskDicomStudyView>(_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<TaskDicomStudyView>(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, visiTaskId = visitTaskId, isReading = isReading });
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -166,6 +166,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
|
||||
CreateMap<SubjectVisit, SubjectVisitMarkStudyDto>()
|
||||
.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)));
|
||||
|
|
|
|||
|
|
@ -31,6 +31,11 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
{
|
||||
}
|
||||
|
||||
public class ImageLabelNoneDicomStudyView : NoneDicomStudyView
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
///<summary>NoneDicomStudyQuery 列表查询参数模型</summary>
|
||||
public class NoneDicomStudyQuery
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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<NoneDicomStudy, ImageLabelNoneDicomStudyView>()
|
||||
.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<SubjectVisitImageBackRecord, ImageBackViewModel>()
|
||||
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
|
||||
|
|
|
|||
|
|
@ -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<VisitStudyDTO>(_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()
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue