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
9148651556
|
|
@ -273,6 +273,7 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
|
|
||||||
public List<OSSFileDTO> UploadedFileList { get; set; } = new List<OSSFileDTO>();
|
public List<OSSFileDTO> UploadedFileList { get; set; } = new List<OSSFileDTO>();
|
||||||
|
|
||||||
|
public bool? IsImageSegmentLabel { get; set; }
|
||||||
|
|
||||||
public class OSSFileDTO
|
public class OSSFileDTO
|
||||||
{
|
{
|
||||||
|
|
@ -518,6 +519,13 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
{
|
{
|
||||||
await _noneDicomStudyFileRepository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, OriginNoneDicomStudyId = noneDicomStudyId.Value, VisitTaskId = incommand.VisitTaskId, FileType = item.FileType, FileSize = item.FileFize });
|
await _noneDicomStudyFileRepository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, OriginNoneDicomStudyId = noneDicomStudyId.Value, VisitTaskId = incommand.VisitTaskId, FileType = item.FileType, FileSize = item.FileFize });
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (incommand.IsImageSegmentLabel == true)
|
||||||
|
{
|
||||||
|
await _noneDicomStudyFileRepository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, ImageLabelNoneDicomStudyId = noneDicomStudyId.Value, FileType = item.FileType, FileSize = item.FileFize });
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -527,6 +535,9 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
var uploadFinishedTime = DateTime.Now;
|
var uploadFinishedTime = DateTime.Now;
|
||||||
|
|
||||||
var noneDicomStudy = await _noneDicomStudyRepository.FirstOrDefaultAsync(t => t.Id == noneDicomStudyId, true);
|
var noneDicomStudy = await _noneDicomStudyRepository.FirstOrDefaultAsync(t => t.Id == noneDicomStudyId, true);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO
|
namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO
|
||||||
{
|
{
|
||||||
|
|
@ -27,6 +28,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO
|
||||||
|
|
||||||
public List<StudyBasicInfo> UploadStudyList { get; set; }
|
public List<StudyBasicInfo> UploadStudyList { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public List<StudyBasicInfo> OriginalTaskStudyList { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -116,6 +120,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO
|
||||||
public int ReadingSeriesCount { get; set; }
|
public int ReadingSeriesCount { get; set; }
|
||||||
|
|
||||||
public int ReadingInstanceCount { get; set; }
|
public int ReadingInstanceCount { get; set; }
|
||||||
|
|
||||||
|
public Guid? SubjectVisitId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NoneDicomStudyBasicInfo
|
public class NoneDicomStudyBasicInfo
|
||||||
|
|
@ -140,5 +146,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO
|
||||||
public int ReadingFileCount { get; set; }
|
public int ReadingFileCount { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ImageMarkNoneDicomStudyBasicInfo: NoneDicomStudyBasicInfo
|
||||||
|
{
|
||||||
|
public Guid SubjectVisitId { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -188,6 +188,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public Guid SubjectVisitId { get; set; }
|
public Guid SubjectVisitId { get; set; }
|
||||||
|
|
||||||
public int FileCount { get; set; }
|
public int FileCount { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PreArchiveDicomStudyCommand
|
public class PreArchiveDicomStudyCommand
|
||||||
|
|
@ -237,6 +238,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public Guid? VisitTaskId { get; set; }
|
public Guid? VisitTaskId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public bool? IsImageSegmentLabel { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TaskStudyArchiveConfirmResult
|
public class TaskStudyArchiveConfirmResult
|
||||||
|
|
@ -267,6 +271,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
[NotDefault]
|
[NotDefault]
|
||||||
public Guid VisitTaskId { get; set; }
|
public Guid VisitTaskId { get; set; }
|
||||||
|
|
||||||
|
public bool? IsImageSegmentLabel { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NewArchiveStudyCommand
|
public class NewArchiveStudyCommand
|
||||||
|
|
@ -492,6 +498,10 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public string? SubjectCode { get; set; }
|
public string? SubjectCode { get; set; }
|
||||||
|
|
||||||
public Guid? VisitTaskId { get; set; }
|
public Guid? VisitTaskId { get; set; }
|
||||||
|
|
||||||
|
public bool? IsImageSegmentLabel { get; set; }
|
||||||
|
|
||||||
|
public Guid? SubjectVisitId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class IRTaskUploadedDicomStudyQuery
|
public class IRTaskUploadedDicomStudyQuery
|
||||||
|
|
@ -571,6 +581,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public string TaskBlindName { get; set; }
|
public string TaskBlindName { get; set; }
|
||||||
|
|
||||||
public string TaskName { get; set; }
|
public string TaskName { get; set; }
|
||||||
|
|
||||||
|
public string VisitName { get; set; }
|
||||||
public Guid? SourceSubjectVisitId { get; set; }
|
public Guid? SourceSubjectVisitId { get; set; }
|
||||||
|
|
||||||
public ReadingTaskState ReadingTaskState { get; set; }
|
public ReadingTaskState ReadingTaskState { get; set; }
|
||||||
|
|
@ -592,6 +604,10 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public Guid VisitId { get; set; }
|
public Guid VisitId { get; set; }
|
||||||
|
|
||||||
public List<DownloadDicomStudyDto> StudyList { get; set; }
|
public List<DownloadDicomStudyDto> StudyList { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public List<DownloadDicomStudyDto> TaskStudyList { get; set; }
|
||||||
|
|
||||||
public List<DownloadNoneDicomStudyDto> NoneDicomStudyList { get; set; }
|
public List<DownloadNoneDicomStudyDto> NoneDicomStudyList { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -661,6 +677,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public string? SubjectCode { get; set; }
|
public string? SubjectCode { get; set; }
|
||||||
|
|
||||||
public Guid? VisitTaskId { get; set; }
|
public Guid? VisitTaskId { get; set; }
|
||||||
|
|
||||||
|
public bool? IsImageSegmentLabel { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -681,6 +699,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public List<Guid> NoneDicomStudyIdList { get; set; }
|
public List<Guid> NoneDicomStudyIdList { get; set; }
|
||||||
|
|
||||||
|
public bool? IsImageSegmentLabel { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TrialKeyImageExportDTO
|
public class TrialKeyImageExportDTO
|
||||||
|
|
@ -930,4 +950,81 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public Guid TaskId { get; set; }
|
public Guid TaskId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class SubjectVisitMarkQuery
|
||||||
|
{
|
||||||
|
public Guid TrialId { get; set; }
|
||||||
|
|
||||||
|
public Guid? SubjectId { get; set; }
|
||||||
|
|
||||||
|
public Guid? TrialReadingCriterionId { get; set; }
|
||||||
|
|
||||||
|
public string? SubjectCode { get; set; }
|
||||||
|
|
||||||
|
public bool? IsUrgent { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SubjectVisitMarkDTO
|
||||||
|
{
|
||||||
|
public Guid TrialId { get; set; }
|
||||||
|
|
||||||
|
public Guid SubjectId { get; set; }
|
||||||
|
|
||||||
|
public bool IsUrgent { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public bool SubjectCode { get; set; }
|
||||||
|
|
||||||
|
public int? VisitCount { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public int? MarkVisitCount { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public int? DicomStudyCount { get; set; }
|
||||||
|
|
||||||
|
public int? MarkDicomStudyCount { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SubjectVisitMarkStudyDto
|
||||||
|
{
|
||||||
|
public bool IsDicom => DicomStudyList.Count() > 0;
|
||||||
|
|
||||||
|
public Guid VisitTaskId { get; set; }
|
||||||
|
|
||||||
|
public Guid SubjectId { get; set; }
|
||||||
|
|
||||||
|
public string SubjectCode { get; set; }
|
||||||
|
|
||||||
|
public string VisitName { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public List<DicomStudyBasicInfo> DicomStudyList { get; set; } = new List<DicomStudyBasicInfo>();
|
||||||
|
|
||||||
|
public List<NoneDicomStudyBasicInfo> NoneDicomStudyList { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class SubjectVisitMarkUploadDto
|
||||||
|
{
|
||||||
|
public Guid SubjectVisitId { get; set; }
|
||||||
|
public Guid TrialSiteId { get; set; }
|
||||||
|
|
||||||
|
public Guid SubejctId { get; set; }
|
||||||
|
|
||||||
|
public string SubjectCode { get; set; }
|
||||||
|
|
||||||
|
public string VisitName { get; set; }
|
||||||
|
|
||||||
|
public Guid? SourceSubjectVisitId => SubjectVisitId;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public List<StudyBasicInfo> OrginalStudyList { get; set; }
|
||||||
|
|
||||||
|
public List<StudyBasicInfo> UploadStudyList { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ using IRaCIS.Core.Infra.EFCore.Common;
|
||||||
using IRaCIS.Core.Infrastructure;
|
using IRaCIS.Core.Infrastructure;
|
||||||
using MassTransit;
|
using MassTransit;
|
||||||
using MassTransit.Initializers;
|
using MassTransit.Initializers;
|
||||||
|
using MathNet.Numerics;
|
||||||
using Medallion.Threading;
|
using Medallion.Threading;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using NetTopologySuite.Mathematics;
|
using NetTopologySuite.Mathematics;
|
||||||
|
|
@ -21,6 +22,7 @@ using NPOI.SS.Formula.Functions;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.IO.Compression;
|
using System.IO.Compression;
|
||||||
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using ZiggyCreatures.Caching.Fusion;
|
using ZiggyCreatures.Caching.Fusion;
|
||||||
|
|
@ -118,7 +120,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IResponseOutput<List<SubjectImageUploadDTO>>> GetSubjectImageUploadList(IRUploadStudyQuery inQuery)
|
public async Task<IResponseOutput> GetSubjectImageUploadList(IRUploadStudyQuery inQuery)
|
||||||
{
|
{
|
||||||
|
|
||||||
//要根据标准阅片顺序,确定是否查询单个任务的,还是查询所有的
|
//要根据标准阅片顺序,确定是否查询单个任务的,还是查询所有的
|
||||||
|
|
@ -154,35 +156,21 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
subjectCode = inQuery.SubjectCode;
|
subjectCode = inQuery.SubjectCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
await SubejctRandomReadingTaskNameDeal((Guid)subjectId, inQuery.TrialReadingCriterionId);
|
|
||||||
|
|
||||||
|
if (inQuery.IsImageSegmentLabel == true)
|
||||||
|
{
|
||||||
var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SourceSubjectVisitId != null
|
var querySV = _subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId)
|
||||||
&& t.DoctorUserId == _userInfo.UserRoleId && t.TaskState == TaskState.Effect)
|
.WhereIf(inQuery.SubjectId != null, t => t.SubjectId == inQuery.SubjectId)
|
||||||
//满足 有序,或者随机只看到当前任务的dicom 非dicom检查
|
.Select(u => new SubjectVisitMarkUploadDto()
|
||||||
.WhereIf(criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId)
|
|
||||||
.Select(u => new SubjectImageUploadDTO()
|
|
||||||
{
|
{
|
||||||
VisitTaskId = u.Id,
|
|
||||||
|
|
||||||
SubejctId = u.SubjectId,
|
SubejctId = u.SubjectId,
|
||||||
|
TrialSiteId = u.TrialSiteId,
|
||||||
|
SubjectVisitId = u.Id,
|
||||||
|
SubjectCode = u.Subject.Code,
|
||||||
|
VisitName = u.VisitName,
|
||||||
|
|
||||||
TrialSiteId = u.Subject.TrialSiteId,
|
OrginalStudyList = u.StudyList
|
||||||
|
|
||||||
IsImageFilter = u.TrialReadingCriterion.IsImageFilter,
|
|
||||||
|
|
||||||
CriterionModalitys = u.TrialReadingCriterion.CriterionModalitys,
|
|
||||||
|
|
||||||
SubjectCode = u.IsAnalysisCreate == true ? u.BlindSubjectCode : u.Subject.Code,
|
|
||||||
TaskBlindName = u.TaskBlindName,
|
|
||||||
TaskName = u.TaskName,
|
|
||||||
ReadingTaskState = u.ReadingTaskState,
|
|
||||||
|
|
||||||
SourceSubjectVisitId = u.SourceSubjectVisitId,
|
|
||||||
|
|
||||||
OrginalStudyList = u.SourceSubjectVisit.StudyList
|
|
||||||
.Where(t => u.TrialReadingCriterion.IsImageFilter ? ("|" + u.TrialReadingCriterion.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
|
||||||
.Select(t => new StudyBasicInfo()
|
.Select(t => new StudyBasicInfo()
|
||||||
{
|
{
|
||||||
Id = t.Id,
|
Id = t.Id,
|
||||||
|
|
@ -227,14 +215,128 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
}).ToList()
|
}).ToList()
|
||||||
})
|
})
|
||||||
;
|
;
|
||||||
//var test = await query.ToListAsync();
|
|
||||||
|
var SVlist = await querySV.ToListAsync();
|
||||||
|
|
||||||
|
return ResponseOutput.Ok(SVlist, new { TrialModality = criterionInfo.Modalitys });
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await SubejctRandomReadingTaskNameDeal((Guid)subjectId, inQuery.TrialReadingCriterionId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SourceSubjectVisitId != null
|
||||||
|
&& t.DoctorUserId == _userInfo.UserRoleId && t.TaskState == TaskState.Effect)
|
||||||
|
//满足 有序,或者随机只看到当前任务的dicom 非dicom检查
|
||||||
|
.WhereIf(criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId)
|
||||||
|
.Select(u => new SubjectImageUploadDTO()
|
||||||
|
{
|
||||||
|
VisitTaskId = u.Id,
|
||||||
|
|
||||||
|
SubejctId = u.SubjectId,
|
||||||
|
|
||||||
|
TrialSiteId = u.Subject.TrialSiteId,
|
||||||
|
|
||||||
|
IsImageFilter = u.TrialReadingCriterion.IsImageFilter,
|
||||||
|
|
||||||
|
CriterionModalitys = u.TrialReadingCriterion.CriterionModalitys,
|
||||||
|
|
||||||
|
SubjectCode = u.IsAnalysisCreate == true ? u.BlindSubjectCode : u.Subject.Code,
|
||||||
|
TaskBlindName = u.TaskBlindName,
|
||||||
|
TaskName = u.TaskName,
|
||||||
|
ReadingTaskState = u.ReadingTaskState,
|
||||||
|
|
||||||
|
SourceSubjectVisitId = u.SourceSubjectVisitId,
|
||||||
|
|
||||||
|
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)
|
||||||
|
.Select(t => new StudyBasicInfo()
|
||||||
|
{
|
||||||
|
Id = t.Id,
|
||||||
|
StudyInstanceUid = t.StudyInstanceUid,
|
||||||
|
ModalityForEdit = t.ModalityForEdit,
|
||||||
|
BodyPartExamined = t.BodyPartExamined,
|
||||||
|
BodyPartForEdit = t.BodyPartForEdit,
|
||||||
|
BodyPartForEditOther = t.BodyPartForEditOther,
|
||||||
|
|
||||||
|
StudyCode = t.StudyCode,
|
||||||
|
StudyTime = t.StudyTime,
|
||||||
|
Description = t.Description,
|
||||||
|
InstanceCount = t.InstanceCount,
|
||||||
|
Modalities = t.Modalities,
|
||||||
|
SeriesCount = t.SeriesCount,
|
||||||
|
|
||||||
|
ReadingInstanceCount = t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading).Count(),
|
||||||
|
ReadingSeriesCount = t.SeriesList.Where(t => t.IsReading).Count(),
|
||||||
|
}).ToList(),
|
||||||
|
|
||||||
|
OriginalTaskStudyList = inQuery.IsImageSegmentLabel == false ? u.SourceSubjectVisit.TaskStudyList.Select(t => new StudyBasicInfo()
|
||||||
|
{
|
||||||
|
Id = t.Id,
|
||||||
|
StudyInstanceUid = t.StudyInstanceUid,
|
||||||
|
ModalityForEdit = t.ModalityForEdit,
|
||||||
|
BodyPartExamined = t.BodyPartExamined,
|
||||||
|
BodyPartForEdit = t.BodyPartForEdit,
|
||||||
|
BodyPartForEditOther = t.BodyPartForEditOther,
|
||||||
|
|
||||||
|
StudyCode = t.StudyCode,
|
||||||
|
StudyTime = t.StudyTime,
|
||||||
|
Description = t.Description,
|
||||||
|
InstanceCount = t.InstanceCount,
|
||||||
|
Modalities = t.Modalities,
|
||||||
|
SeriesCount = t.SeriesCount,
|
||||||
|
|
||||||
|
ReadingInstanceCount = t.InstanceList.Count(),
|
||||||
|
ReadingSeriesCount = t.SeriesList.Count(),
|
||||||
|
}).ToList() : new List<StudyBasicInfo>(),
|
||||||
|
|
||||||
|
UploadStudyList = u.TaskStudyList.Select(t => new StudyBasicInfo()
|
||||||
|
{
|
||||||
|
Id = t.Id,
|
||||||
|
StudyInstanceUid = t.StudyInstanceUid,
|
||||||
|
ModalityForEdit = t.ModalityForEdit,
|
||||||
|
BodyPartExamined = t.BodyPartExamined,
|
||||||
|
BodyPartForEdit = t.BodyPartForEdit,
|
||||||
|
BodyPartForEditOther = t.BodyPartForEditOther,
|
||||||
|
|
||||||
|
StudyCode = t.StudyCode,
|
||||||
|
StudyTime = t.StudyTime,
|
||||||
|
Description = t.Description,
|
||||||
|
InstanceCount = t.InstanceCount,
|
||||||
|
Modalities = t.Modalities,
|
||||||
|
SeriesCount = t.SeriesCount,
|
||||||
|
|
||||||
|
SopInstanceUidList = t.InstanceList.Select(t => t.SopInstanceUid).ToList(),
|
||||||
|
|
||||||
|
ReadingInstanceCount = t.InstanceCount,
|
||||||
|
ReadingSeriesCount = t.SeriesCount,
|
||||||
|
|
||||||
|
}).ToList()
|
||||||
|
})
|
||||||
|
;
|
||||||
|
|
||||||
var list = await query.Where(t => t.SubjectCode == subjectCode).ToListAsync();
|
var list = await query.Where(t => t.SubjectCode == subjectCode).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
//靶段标注,阅片IR上传需要将原始DSA 和初次后处理的影像合并 作为原始检查影像
|
||||||
|
if (inQuery.IsImageSegmentLabel == false)
|
||||||
|
{
|
||||||
|
foreach (var item in list)
|
||||||
|
{
|
||||||
|
item.OrginalStudyList.AddRange(item.OriginalTaskStudyList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Ok(list, new { TrialModality = criterionInfo.Modalitys });
|
return ResponseOutput.Ok(list, new { TrialModality = criterionInfo.Modalitys });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void SpecialArchiveStudyDeal(TaskStudy study)
|
private void SpecialArchiveStudyDeal(TaskStudy study)
|
||||||
{
|
{
|
||||||
#region 特殊逻辑
|
#region 特殊逻辑
|
||||||
|
|
@ -303,7 +405,44 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<List<TaskStudyArchiveConfirmResult>> VerifyIRStudyAllowUpload(TaskStudyAchivePreConfirmCommand inCommand, [FromServices] IRepository<DicomStudy> _dicomStudyRepository)
|
public async Task<List<TaskStudyArchiveConfirmResult>> VerifyIRStudyAllowUpload(TaskStudyAchivePreConfirmCommand inCommand, [FromServices] IRepository<DicomStudy> _dicomStudyRepository)
|
||||||
{
|
{
|
||||||
|
var result = new List<TaskStudyArchiveConfirmResult>();
|
||||||
|
if (inCommand.IsImageSegmentLabel == true)
|
||||||
|
{
|
||||||
|
var notAllowedUidList = _dicomStudyRepository.Where(t => t.TrialId == inCommand.TrialId && inCommand.StudyInstanceUidList.Contains(t.StudyInstanceUid)).Select(t => new
|
||||||
|
{
|
||||||
|
t.StudyInstanceUid,
|
||||||
|
t.SubjectId,
|
||||||
|
SubjectVisitId = (Guid?)t.SubjectVisitId,
|
||||||
|
SubejectCode = t.Subject.Code,
|
||||||
|
VisitTaskId = (Guid?)null
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
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, IsAllowUpload = true, IsAllowReUpload = true });
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = false, IsAllowUpload = false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result.Add(new TaskStudyArchiveConfirmResult() { StudyInstanceUid = studyUid, IsAllowReUpload = false, IsAllowUpload = false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
var currentUploadSubjectVisitId = inCommand.VisitTaskId == null ? null : _visitTaskRepository.Where(t => t.Id == inCommand.VisitTaskId).Select(t => t.SourceSubjectVisitId).FirstOrDefault();
|
var currentUploadSubjectVisitId = inCommand.VisitTaskId == null ? null : _visitTaskRepository.Where(t => t.Id == inCommand.VisitTaskId).Select(t => t.SourceSubjectVisitId).FirstOrDefault();
|
||||||
|
|
||||||
//重阅任务排除
|
//重阅任务排除
|
||||||
|
|
@ -327,7 +466,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
var notAllowedUidList = notAllowedUidList1.Union(notAllowedUidList2);
|
var notAllowedUidList = notAllowedUidList1.Union(notAllowedUidList2);
|
||||||
|
|
||||||
var result = new List<TaskStudyArchiveConfirmResult>();
|
|
||||||
|
|
||||||
foreach (var studyUid in inCommand.StudyInstanceUidList)
|
foreach (var studyUid in inCommand.StudyInstanceUidList)
|
||||||
{
|
{
|
||||||
|
|
@ -365,6 +504,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -420,6 +562,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Guid? svId = null;
|
||||||
|
|
||||||
|
if (incommand.IsImageSegmentLabel == true)
|
||||||
|
{
|
||||||
|
svId = _dicomStudyRepository.Where(t => t.TrialId == incommand.TrialId && t.StudyInstanceUid == incommand.Study.StudyInstanceUid).Select(t => t.SubjectVisitId).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
var visiTaskId = incommand.VisitTaskId;
|
var visiTaskId = incommand.VisitTaskId;
|
||||||
|
|
||||||
var modalitys = string.Empty;
|
var modalitys = string.Empty;
|
||||||
|
|
@ -477,6 +627,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
study.TrialId = incommand.TrialId;
|
study.TrialId = incommand.TrialId;
|
||||||
study.SubjectId = incommand.SubjectId;
|
study.SubjectId = incommand.SubjectId;
|
||||||
study.VisitTaskId = visiTaskId;
|
study.VisitTaskId = visiTaskId;
|
||||||
|
study.SubjectVisitId = svId;
|
||||||
//study.SubjectVisitId = incommand.SubjectVisitId;
|
//study.SubjectVisitId = incommand.SubjectVisitId;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -502,6 +653,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
series.SubjectId = incommand.SubjectId;
|
series.SubjectId = incommand.SubjectId;
|
||||||
//series.SubjectVisitId = incommand.SubjectVisitId;
|
//series.SubjectVisitId = incommand.SubjectVisitId;
|
||||||
series.VisitTaskId = visiTaskId;
|
series.VisitTaskId = visiTaskId;
|
||||||
|
series.SubjectVisitId = svId;
|
||||||
|
|
||||||
//前端传递的数量不准,上传的时候,把失败的也加进来了,以实际数组的数字为准
|
//前端传递的数量不准,上传的时候,把失败的也加进来了,以实际数组的数字为准
|
||||||
series.InstanceCount = seriesItem.InstanceList.Count;
|
series.InstanceCount = seriesItem.InstanceList.Count;
|
||||||
|
|
@ -522,6 +674,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
isntance.SubjectId = incommand.SubjectId;
|
isntance.SubjectId = incommand.SubjectId;
|
||||||
//isntance.SubjectVisitId = incommand.SubjectVisitId;
|
//isntance.SubjectVisitId = incommand.SubjectVisitId;
|
||||||
isntance.VisitTaskId = visiTaskId;
|
isntance.VisitTaskId = visiTaskId;
|
||||||
|
isntance.SubjectVisitId = svId;
|
||||||
|
|
||||||
await _taskInstanceRepository.AddAsync(isntance);
|
await _taskInstanceRepository.AddAsync(isntance);
|
||||||
}
|
}
|
||||||
|
|
@ -742,6 +895,65 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId)
|
var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId)
|
||||||
.Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync();
|
.Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync();
|
||||||
|
|
||||||
|
//靶段标注上传,查看访视级别,上传绑定访视级别
|
||||||
|
if (inQuery.IsImageSegmentLabel == true)
|
||||||
|
{
|
||||||
|
var list = _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId && t.SubjectVisitId == inQuery.SubjectVisitId)
|
||||||
|
//.WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|"))
|
||||||
|
.Select(u => new TaskNoneDicomStudyDTO()
|
||||||
|
{
|
||||||
|
SubjectId = u.SubjectId,
|
||||||
|
SubjectCode = u.Subject.Code,
|
||||||
|
VisitName = u.SubjectVisit.VisitName,
|
||||||
|
SourceSubjectVisitId = u.SubjectVisitId,
|
||||||
|
|
||||||
|
Id = u.Id,
|
||||||
|
Description = u.Description,
|
||||||
|
ImageDate = u.ImageDate,
|
||||||
|
BodyPart = u.BodyPart,
|
||||||
|
BodyPartForEditOther = u.BodyPartForEditOther,
|
||||||
|
FileCount = u.FileCount,
|
||||||
|
Modality = u.Modality,
|
||||||
|
StudyCode = u.StudyCode,
|
||||||
|
|
||||||
|
FileList = u.NoneDicomFileList.Select(t => new NoneDicomFileInfo()
|
||||||
|
{
|
||||||
|
FileType = t.FileType,
|
||||||
|
FileName = t.FileName,
|
||||||
|
FileSize = t.FileSize,
|
||||||
|
Path = t.Path
|
||||||
|
}).ToList(),
|
||||||
|
|
||||||
|
ReadingFileCount = u.FileCount,
|
||||||
|
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
var noneDicomStudyIdList = list.Select(t => t.Id).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
var noneDicomStudyList = _noneDicomStudyFileReposiotry.Where(t => t.ImageLabelNoneDicomStudyId != null)
|
||||||
|
.Where(t => noneDicomStudyIdList.Contains((Guid)t.ImageLabelNoneDicomStudyId!))
|
||||||
|
.Select(u => new NoneDicomFileInfo
|
||||||
|
{
|
||||||
|
OriginNoneDicomStudyId = u.ImageLabelNoneDicomStudyId,
|
||||||
|
|
||||||
|
FileType = u.FileType,
|
||||||
|
FileName = u.FileName,
|
||||||
|
FileSize = u.FileSize,
|
||||||
|
Path = u.Path
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
foreach (var item in list)
|
||||||
|
{
|
||||||
|
item.UploadedFileCount = noneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).Count();
|
||||||
|
item.UploadedFileList = noneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
var query = from u in _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId
|
var query = from u in _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId
|
||||||
&& t.SourceSubjectVisitId != null && t.DoctorUserId == doctorUserId && t.TaskState == TaskState.Effect)
|
&& t.SourceSubjectVisitId != null && t.DoctorUserId == doctorUserId && t.TaskState == TaskState.Effect)
|
||||||
//满足 有序,或者随机只看到当前任务的dicom 非dicom检查
|
//满足 有序,或者随机只看到当前任务的dicom 非dicom检查
|
||||||
|
|
@ -763,12 +975,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
Description = ns.Description,
|
Description = ns.Description,
|
||||||
ImageDate = ns.ImageDate,
|
ImageDate = ns.ImageDate,
|
||||||
BodyPart = ns.BodyPart,
|
BodyPart = ns.BodyPart,
|
||||||
BodyPartForEditOther=ns.BodyPartForEditOther,
|
BodyPartForEditOther = ns.BodyPartForEditOther,
|
||||||
FileCount = ns.FileCount,
|
FileCount = ns.FileCount,
|
||||||
Modality = ns.Modality,
|
Modality = ns.Modality,
|
||||||
StudyCode = ns.StudyCode,
|
StudyCode = ns.StudyCode,
|
||||||
|
|
||||||
FileList = ns.NoneDicomFileList.Select(t => new NoneDicomFileInfo()
|
//靶段标注 阅片IR 上传时IsImageSegmentLabel == false ,正常后处理上传IsImageSegmentLabel 该字段为空
|
||||||
|
FileList = (inQuery.IsImageSegmentLabel == false ? ns.NoneDicomFileList : ns.ImageLabelNoneDicomFileList)
|
||||||
|
.Select(t => new NoneDicomFileInfo()
|
||||||
{
|
{
|
||||||
FileType = t.FileType,
|
FileType = t.FileType,
|
||||||
FileName = t.FileName,
|
FileName = t.FileName,
|
||||||
|
|
@ -805,6 +1019,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -984,7 +1201,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
/// <param name="inQuery"></param>
|
/// <param name="inQuery"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<List<SubjectCRCImageUploadedStudyDto>> GetSubjectImageDownloadSelectList(IRReadingDownloadQuery inQuery)
|
public async Task<IResponseOutput> GetSubjectImageDownloadSelectList(IRReadingDownloadQuery inQuery)
|
||||||
{
|
{
|
||||||
|
|
||||||
var doctorUserId = _userInfo.UserRoleId;
|
var doctorUserId = _userInfo.UserRoleId;
|
||||||
|
|
@ -1016,6 +1233,51 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
subjectCode = inQuery.SubjectCode;
|
subjectCode = inQuery.SubjectCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (inQuery.IsImageSegmentLabel == true)
|
||||||
|
{
|
||||||
|
var list = await _subjectVisitRepository
|
||||||
|
.WhereIf(inQuery.SubjectId != null, t => t.SubjectId == inQuery.SubjectId)
|
||||||
|
.ProjectTo<SubjectVisitMarkStudyDto>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
#region 将任务级别转为检查级别
|
||||||
|
|
||||||
|
var result = new List<SubjectVisitMarkStudyDto>();
|
||||||
|
|
||||||
|
var dicomStudyList = list.Where(item => item.DicomStudyList.Count > 0)
|
||||||
|
.Select(item => new SubjectVisitMarkStudyDto
|
||||||
|
{
|
||||||
|
VisitTaskId = item.VisitTaskId,
|
||||||
|
SubjectId = item.SubjectId,
|
||||||
|
SubjectCode = item.SubjectCode,
|
||||||
|
VisitName = item.VisitName,
|
||||||
|
|
||||||
|
//取dicom
|
||||||
|
DicomStudyList = item.DicomStudyList,
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
var noneStudyList = list.Where(item => item.NoneDicomStudyList.Count > 0)
|
||||||
|
.Select(item => new SubjectVisitMarkStudyDto
|
||||||
|
{
|
||||||
|
VisitTaskId = item.VisitTaskId,
|
||||||
|
SubjectId = item.SubjectId,
|
||||||
|
SubjectCode = item.SubjectCode,
|
||||||
|
VisitName = item.VisitName,
|
||||||
|
|
||||||
|
//非dicom
|
||||||
|
NoneDicomStudyList = item.NoneDicomStudyList,
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
result.AddRange(dicomStudyList);
|
||||||
|
result.AddRange(noneStudyList);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
return ResponseOutput.Ok(result);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
//下载这里查看也需要维护编号,维护的时候不会处理一致性分析任务
|
//下载这里查看也需要维护编号,维护的时候不会处理一致性分析任务
|
||||||
if (inQuery.SubjectId != null && inQuery.TrialReadingCriterionId != null)
|
if (inQuery.SubjectId != null && inQuery.TrialReadingCriterionId != null)
|
||||||
{
|
{
|
||||||
|
|
@ -1053,11 +1315,34 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
.WhereIf(criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId)
|
.WhereIf(criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId)
|
||||||
.WhereIf(taskState == TaskState.Effect || taskState == TaskState.Freeze, t => t.TaskState == TaskState.Effect)//subject 随机可能当前阅片人有退回任务,此时传递了任务Id,但是要看整个subject得,要只留生效的
|
.WhereIf(taskState == TaskState.Effect || taskState == TaskState.Freeze, t => t.TaskState == TaskState.Effect)//subject 随机可能当前阅片人有退回任务,此时传递了任务Id,但是要看整个subject得,要只留生效的
|
||||||
.WhereIf(taskState != null && taskState != TaskState.Effect && taskState != TaskState.Freeze, t => t.Id == inQuery.VisitTaskId) //非生效只查当前任务
|
.WhereIf(taskState != null && taskState != TaskState.Effect && taskState != TaskState.Freeze, t => t.Id == inQuery.VisitTaskId) //非生效只查当前任务
|
||||||
.ProjectTo<SubjectCRCImageUploadedDto>(_mapper.ConfigurationProvider);
|
.ProjectTo<SubjectCRCImageUploadedDto>(_mapper.ConfigurationProvider/*, new { IsImageSegmentLabel = inQuery.IsImageSegmentLabel }*/);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//这里过滤是否是一致性分析的
|
//这里过滤是否是一致性分析的
|
||||||
var list = await query.Where(t => t.SubjectCode == subjectCode).ToListAsync();
|
var list = await query.Where(t => t.SubjectCode == subjectCode).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
if (inQuery.IsImageSegmentLabel == false)
|
||||||
|
{
|
||||||
|
var subjectVisitIdList = list.Select(t => t.SourceSubjectVisitId).Distinct().ToList();
|
||||||
|
|
||||||
|
var preDicomStudyList = _subjectVisitRepository.Where(t => subjectVisitIdList.Contains(t.Id)).SelectMany(t => t.TaskStudyList)
|
||||||
|
.ProjectTo<DicomStudyBasicInfo>(_mapper.ConfigurationProvider).ToList();
|
||||||
|
|
||||||
|
var preNoneDicomStudyList = _subjectVisitRepository.Where(t => subjectVisitIdList.Contains(t.Id))
|
||||||
|
.SelectMany(t => t.NoneDicomStudyList)
|
||||||
|
.ProjectTo<ImageMarkNoneDicomStudyBasicInfo>(_mapper.ConfigurationProvider).ToList();
|
||||||
|
|
||||||
|
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());
|
||||||
|
|
||||||
|
item.NoneDicomStudyList = _mapper.Map<List<NoneDicomStudyBasicInfo>>(preNoneDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var item in list)
|
foreach (var item in list)
|
||||||
{
|
{
|
||||||
if (item.IsImageFilter)
|
if (item.IsImageFilter)
|
||||||
|
|
@ -1108,7 +1393,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
return result;
|
return ResponseOutput.Ok(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1129,13 +1417,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
var imageType = (isQueryDicom && isQueryNoneDicom) ? ImageType.DicomAndNoneDicom : (isQueryDicom ? ImageType.Dicom : ImageType.NoneDicom);
|
var imageType = (isQueryDicom && isQueryNoneDicom) ? ImageType.DicomAndNoneDicom : (isQueryDicom ? ImageType.Dicom : ImageType.NoneDicom);
|
||||||
|
|
||||||
var taskIdList = inQuery.SubjectVisitTaskList.Select(t => t.TaskId).ToList();
|
var taskIdList = inQuery.SubjectVisitTaskList.Select(t => t.TaskId).Distinct().ToList();
|
||||||
|
|
||||||
var subjectVisitIdList = inQuery.SubjectVisitTaskList.Select(t => t.SubjectVisitId).ToList();
|
var subjectVisitIdList = inQuery.SubjectVisitTaskList.Select(t => t.SubjectVisitId).Distinct().ToList();
|
||||||
|
|
||||||
var trialSiteCode = _visitTaskRepository.Where(t => t.Id == taskIdList.FirstOrDefault()).Select(t => t.IsAnalysisCreate ? t.BlindTrialSiteCode : t.Subject.TrialSite.TrialSiteCode).FirstOrDefault() ?? string.Empty;
|
var trialSiteCode = _visitTaskRepository.Where(t => t.Id == taskIdList.FirstOrDefault()).Select(t => t.IsAnalysisCreate ? t.BlindTrialSiteCode : t.Subject.TrialSite.TrialSiteCode).FirstOrDefault() ?? string.Empty;
|
||||||
|
|
||||||
var dirDic = new Dictionary<string, string>();
|
var dirDic = new Dictionary<string, string>();
|
||||||
|
|
||||||
#region 在下载前先处理DIR文件
|
#region 在下载前先处理DIR文件
|
||||||
|
|
||||||
//有传输语法值的导出 才生成DIR
|
//有传输语法值的导出 才生成DIR
|
||||||
|
|
@ -1144,6 +1433,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)
|
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 => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false)
|
||||||
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
||||||
|
.Where(t => inQuery.IsImageSegmentLabel == true ? t.ModalityForEdit == "XA" : true)
|
||||||
.SelectMany(t => t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading))
|
.SelectMany(t => t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading))
|
||||||
.Select(t => new StudyDIRInfo()
|
.Select(t => new StudyDIRInfo()
|
||||||
{
|
{
|
||||||
|
|
@ -1181,6 +1471,48 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
|
if (inQuery.IsImageSegmentLabel == false)
|
||||||
|
{
|
||||||
|
var taskDirInfolist = _taskInstanceRepository.Where(t => t.SubjectVisitId != null)
|
||||||
|
.Where(t => subjectVisitIdList.Contains((Guid)t.SubjectVisitId)).Select(t => new StudyDIRInfo()
|
||||||
|
{
|
||||||
|
SubjectVisitId = (Guid)t.SubjectVisitId,
|
||||||
|
|
||||||
|
DicomStudyId = t.TaskStudy.Id,
|
||||||
|
|
||||||
|
PatientId = t.TaskStudy.PatientId,
|
||||||
|
PatientName = t.TaskStudy.PatientName,
|
||||||
|
PatientBirthDate = t.TaskStudy.PatientBirthDate,
|
||||||
|
PatientSex = t.TaskStudy.PatientSex,
|
||||||
|
|
||||||
|
StudyInstanceUid = t.StudyInstanceUid,
|
||||||
|
StudyId = t.TaskStudy.StudyId,
|
||||||
|
DicomStudyDate = t.TaskStudy.DicomStudyDate,
|
||||||
|
DicomStudyTime = t.TaskStudy.DicomStudyTime,
|
||||||
|
AccessionNumber = t.TaskStudy.AccessionNumber,
|
||||||
|
|
||||||
|
StudyDescription = t.TaskStudy.Description,
|
||||||
|
|
||||||
|
SeriesInstanceUid = t.TaskSeries.SeriesInstanceUid,
|
||||||
|
Modality = t.TaskSeries.Modality,
|
||||||
|
DicomSeriesDate = t.TaskSeries.DicomSeriesDate,
|
||||||
|
DicomSeriesTime = t.TaskSeries.DicomSeriesTime,
|
||||||
|
SeriesNumber = t.TaskSeries.SeriesNumber,
|
||||||
|
SeriesDescription = t.TaskSeries.Description,
|
||||||
|
|
||||||
|
InstanceId = t.Id,
|
||||||
|
SopInstanceUid = t.SopInstanceUid,
|
||||||
|
SOPClassUID = t.SOPClassUID,
|
||||||
|
InstanceNumber = t.InstanceNumber,
|
||||||
|
MediaStorageSOPClassUID = t.MediaStorageSOPClassUID,
|
||||||
|
MediaStorageSOPInstanceUID = t.MediaStorageSOPInstanceUID,
|
||||||
|
TransferSytaxUID = t.TransferSytaxUID,
|
||||||
|
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
dirInfolist.AddRange(taskDirInfolist);
|
||||||
|
}
|
||||||
|
|
||||||
var pathInfo = await _subjectRepository.Where(t => t.Id == inQuery.SubjectId).Select(t => new { t.TrialId, SubjectId = t.Id }).FirstNotNullAsync();
|
var pathInfo = await _subjectRepository.Where(t => t.Id == inQuery.SubjectId).Select(t => new { t.TrialId, SubjectId = t.Id }).FirstNotNullAsync();
|
||||||
|
|
||||||
foreach (var item in dirInfolist.GroupBy(t => new { t.StudyInstanceUid, t.DicomStudyId }))
|
foreach (var item in dirInfolist.GroupBy(t => new { t.StudyInstanceUid, t.DicomStudyId }))
|
||||||
|
|
@ -1204,16 +1536,16 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id)))
|
var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id)))
|
||||||
//一致性分析,导致查询出来两条数据
|
//一致性分析,导致查询出来两条数据
|
||||||
join visitTask in _visitTaskRepository.Where(t => taskIdList.Contains(t.Id))
|
join visitTask in _visitTaskRepository.Where(t => taskIdList.Contains(t.Id)) on sv.Id equals visitTask.SourceSubjectVisitId into cc
|
||||||
|
from leftVisitTask in cc.DefaultIfEmpty()
|
||||||
on sv.Id equals visitTask.SourceSubjectVisitId
|
|
||||||
select new ImageDownloadDto()
|
select new ImageDownloadDto()
|
||||||
{
|
{
|
||||||
SubjectCode = inQuery.SubjectCode,
|
SubjectCode = inQuery.SubjectCode,
|
||||||
VisitName = sv.VisitName,
|
VisitName = sv.VisitName,
|
||||||
TaskBlindName = visitTask.TaskBlindName,
|
TaskBlindName = leftVisitTask.TaskBlindName,
|
||||||
StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false)
|
StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false)
|
||||||
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
||||||
|
.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true)
|
||||||
.Select(u => new DownloadDicomStudyDto()
|
.Select(u => new DownloadDicomStudyDto()
|
||||||
{
|
{
|
||||||
PatientId = u.PatientId,
|
PatientId = u.PatientId,
|
||||||
|
|
@ -1237,7 +1569,34 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
}).ToList()
|
}).ToList()
|
||||||
}).ToList(),
|
}).ToList(),
|
||||||
|
|
||||||
NoneDicomStudyList = sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false)
|
TaskStudyList =
|
||||||
|
sv.TaskStudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false)
|
||||||
|
//.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
||||||
|
.Select(u => new DownloadDicomStudyDto()
|
||||||
|
{
|
||||||
|
PatientId = u.PatientId,
|
||||||
|
StudyTime = u.StudyTime,
|
||||||
|
StudyCode = u.StudyCode,
|
||||||
|
StudyInstanceUid = u.StudyInstanceUid,
|
||||||
|
StudyDIRPath = u.StudyDIRPath,
|
||||||
|
|
||||||
|
SeriesList = u.SeriesList.Select(z => new DownloadDicomSeriesDto()
|
||||||
|
{
|
||||||
|
Modality = z.Modality,
|
||||||
|
|
||||||
|
InstanceList = z.InstanceList.Select(k => new DownloadDicomInstanceDto()
|
||||||
|
{
|
||||||
|
IsEncapsulated = k.IsEncapsulated,
|
||||||
|
InstanceId = k.Id,
|
||||||
|
FileName = string.Empty,
|
||||||
|
Path = k.Path,
|
||||||
|
FileSize = k.FileSize
|
||||||
|
}).ToList()
|
||||||
|
}).ToList()
|
||||||
|
}).ToList()
|
||||||
|
,
|
||||||
|
|
||||||
|
NoneDicomStudyList = inQuery.IsImageSegmentLabel == null ? sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false)
|
||||||
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true)
|
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true)
|
||||||
.Where(t => t.IsReading)
|
.Where(t => t.IsReading)
|
||||||
.Select(nd => new DownloadNoneDicomStudyDto()
|
.Select(nd => new DownloadNoneDicomStudyDto()
|
||||||
|
|
@ -1253,6 +1612,23 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
FileType = file.FileType,
|
FileType = file.FileType,
|
||||||
FileSize = file.FileSize
|
FileSize = file.FileSize
|
||||||
}).ToList()
|
}).ToList()
|
||||||
|
}).ToList() :
|
||||||
|
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()
|
||||||
|
{
|
||||||
|
Modality = nd.Modality,
|
||||||
|
StudyCode = nd.StudyCode,
|
||||||
|
ImageDate = nd.ImageDate,
|
||||||
|
|
||||||
|
FileList = nd.ImageLabelNoneDicomFileList.Where(t => t.IsReading).Select(file => new DownloadNoneDicomFileDto()
|
||||||
|
{
|
||||||
|
FileName = file.FileName,
|
||||||
|
Path = file.Path,
|
||||||
|
FileType = file.FileType,
|
||||||
|
FileSize = file.FileSize
|
||||||
|
}).ToList()
|
||||||
}).ToList()
|
}).ToList()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -1262,6 +1638,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
foreach (var result in list)
|
foreach (var result in list)
|
||||||
{
|
{
|
||||||
|
//靶段标注处理
|
||||||
|
if (inQuery.IsImageSegmentLabel == false)
|
||||||
|
{
|
||||||
|
result.StudyList.AddRange(result.TaskStudyList);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var item in result.StudyList.SelectMany(t => t.SeriesList).SelectMany(t => t.InstanceList))
|
foreach (var item in result.StudyList.SelectMany(t => t.SeriesList).SelectMany(t => t.InstanceList))
|
||||||
{
|
{
|
||||||
var key = item.InstanceId.ToString();
|
var key = item.InstanceId.ToString();
|
||||||
|
|
@ -1804,6 +2186,36 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region 第三人预处理影响上传下载
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取受试者级别 访视标注列表
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost]
|
||||||
|
public async Task<IResponseOutput<List<SubjectVisitMarkDTO>>> GetTrialSubjectVisitMarkList(SubjectVisitMarkQuery inQuery)
|
||||||
|
{
|
||||||
|
var list = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId)
|
||||||
|
.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,
|
||||||
|
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()),
|
||||||
|
|
||||||
|
DicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.StudyList).Count(),
|
||||||
|
MarkDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.TaskStudyList).Count(),
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
return ResponseOutput.Ok(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region 之前后端下载废弃
|
#region 之前后端下载废弃
|
||||||
|
|
|
||||||
|
|
@ -136,6 +136,11 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.ReadingSeriesCount, u => u.MapFrom(s => s.SeriesList.Where(t => t.IsReading).Count()))
|
.ForMember(d => d.ReadingSeriesCount, u => u.MapFrom(s => s.SeriesList.Where(t => t.IsReading).Count()))
|
||||||
.ForMember(d => d.ReadingInstanceCount, u => u.MapFrom(s => s.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading).Count()));
|
.ForMember(d => d.ReadingInstanceCount, u => u.MapFrom(s => s.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading).Count()));
|
||||||
|
|
||||||
|
CreateMap<TaskStudy, DicomStudyBasicInfo>()
|
||||||
|
//.ForMember(d => d.SubjectVisitId, u => u.MapFrom(s => s.SubjectVisitId))
|
||||||
|
.ForMember(d => d.ReadingSeriesCount, u => u.MapFrom(s => s.SeriesCount))
|
||||||
|
.ForMember(d => d.ReadingInstanceCount, u => u.MapFrom(s => s.InstanceCount));
|
||||||
|
|
||||||
CreateMap<NoneDicomStudy, NoneDicomStudyBasicInfo>()
|
CreateMap<NoneDicomStudy, NoneDicomStudyBasicInfo>()
|
||||||
.ForMember(d => d.ReadingFileCount, u => u.MapFrom(s => s.NoneDicomFileList.Where(t => t.IsReading).Count()));
|
.ForMember(d => d.ReadingFileCount, u => u.MapFrom(s => s.NoneDicomFileList.Where(t => t.IsReading).Count()));
|
||||||
|
|
||||||
|
|
@ -159,6 +164,23 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
CreateMap<NoneDicomEdit, NoneDicomStudy>();
|
CreateMap<NoneDicomEdit, NoneDicomStudy>();
|
||||||
|
|
||||||
|
|
||||||
|
CreateMap<SubjectVisit, SubjectVisitMarkStudyDto>()
|
||||||
|
.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)));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CreateMap<NoneDicomStudy, ImageMarkNoneDicomStudyBasicInfo>()
|
||||||
|
.ForMember(d => d.SubjectVisitId, u => u.MapFrom(s => s.SubjectVisitId))
|
||||||
|
.ForMember(d => d.FileCount, u => u.MapFrom(s => s.ImageLabelNoneDicomFileList.Count()))
|
||||||
|
.ForMember(d => d.ReadingFileCount, u => u.MapFrom(s => s.ImageLabelNoneDicomFileList.Count()));
|
||||||
|
|
||||||
|
CreateMap<ImageMarkNoneDicomStudyBasicInfo, NoneDicomStudyBasicInfo>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,11 @@ using IRaCIS.Core.Application.Interfaces;
|
||||||
using IRaCIS.Core.Application.Service.Reading.Dto;
|
using IRaCIS.Core.Application.Service.Reading.Dto;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
using IRaCIS.Core.Infrastructure;
|
using IRaCIS.Core.Infrastructure;
|
||||||
|
using IRaCIS.Core.Infrastructure.Extention;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Org.BouncyCastle.Asn1.Tsp;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Services
|
namespace IRaCIS.Core.Application.Services
|
||||||
{
|
{
|
||||||
|
|
@ -288,7 +290,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return studyList.Where(x=>x.SeriesList.Count()>0).ToList();
|
return studyList.Where(x => x.SeriesList.Count() > 0).ToList();
|
||||||
|
|
||||||
//return ResponseOutput.Ok(studyList.Where(t => t.SeriesList.Count > 0).ToList());
|
//return ResponseOutput.Ok(studyList.Where(t => t.SeriesList.Count > 0).ToList());
|
||||||
|
|
||||||
|
|
@ -468,35 +470,10 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
var studyList = new List<VisitStudyDTO>();
|
var studyList = new List<VisitStudyDTO>();
|
||||||
|
|
||||||
var taskInfo = await _visitTaskRepository.Where(x => x.Id == indto.VisitTaskId).Select(t => new { t.TrialReadingCriterionId, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys, t.ReadingTaskState, TaskStudyCount = t.TaskStudyList.Count }).FirstNotNullAsync();
|
var taskInfo = await _visitTaskRepository.Where(x => x.Id == indto.VisitTaskId).Select(t => new { t.TrialReadingCriterionId, t.TrialReadingCriterion.CriterionType, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys, t.ReadingTaskState, TaskStudyCount = t.TaskStudyList.Count }).FirstNotNullAsync();
|
||||||
|
|
||||||
//影像后处理 上传了新的影像
|
|
||||||
if (taskInfo.TaskStudyCount > 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
var taskStudyList = await _taskStudyRepository.Where(t => t.TrialId == indto.TrialId && t.VisitTaskId == indto.VisitTaskId)
|
|
||||||
.WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.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();
|
|
||||||
|
|
||||||
//foreach (var series in study.SeriesList)
|
|
||||||
//{
|
|
||||||
// series.WindowCenter = series.InstanceInfoList.FirstOrDefault()!.WindowCenter;
|
|
||||||
// series.WindowWidth = series.InstanceInfoList.FirstOrDefault()!.WindowWidth;
|
|
||||||
//}
|
|
||||||
//study.SeriesCount = study.SeriesList.Count;
|
|
||||||
|
|
||||||
study.InstanceCount = study.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
studyList.AddRange(taskStudyList);
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#region dicom 检查查询
|
#region dicom 检查查询
|
||||||
|
|
||||||
//如果是手动生成的标准,需要过滤检查和序列数据
|
//如果是手动生成的标准,需要过滤检查和序列数据
|
||||||
|
|
@ -506,6 +483,9 @@ namespace IRaCIS.Core.Application.Services
|
||||||
var dicomStudyList = await _dicomStudyRepository.Where(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId)
|
var dicomStudyList = await _dicomStudyRepository.Where(t => t.TrialId == indto.TrialId && t.SubjectVisitId == indto.SujectVisitId)
|
||||||
.WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))
|
.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))
|
.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 => false)
|
||||||
.Select(k => new VisitStudyDTO()
|
.Select(k => new VisitStudyDTO()
|
||||||
{
|
{
|
||||||
InstanceCount = k.InstanceCount,
|
InstanceCount = k.InstanceCount,
|
||||||
|
|
@ -515,13 +495,17 @@ namespace IRaCIS.Core.Application.Services
|
||||||
StudyCode = k.StudyCode,
|
StudyCode = k.StudyCode,
|
||||||
StudyId = k.Id,
|
StudyId = k.Id,
|
||||||
|
|
||||||
BodyPartForEdit=k.BodyPartForEdit,
|
BodyPartForEdit = k.BodyPartForEdit,
|
||||||
BodyPartForEditOther=k.BodyPartForEditOther
|
BodyPartForEditOther = k.BodyPartForEditOther
|
||||||
|
|
||||||
|
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
|
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
|
if (studyIds.Count > 0)
|
||||||
|
{
|
||||||
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId) && t.IsReading)
|
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId) && t.IsReading)
|
||||||
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath, t.IsReading, t.FileSize }).ToListAsync();
|
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath, t.IsReading, t.FileSize }).ToListAsync();
|
||||||
|
|
||||||
|
|
@ -561,6 +545,25 @@ namespace IRaCIS.Core.Application.Services
|
||||||
}
|
}
|
||||||
|
|
||||||
studyList.AddRange(dicomStudyList);
|
studyList.AddRange(dicomStudyList);
|
||||||
|
}
|
||||||
|
|
||||||
|
//影像后处理 上传了新的影像
|
||||||
|
if (taskInfo.TaskStudyCount > 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
var taskStudyList = await _taskStudyRepository.Where(t => t.TrialId == indto.TrialId && t.VisitTaskId == indto.VisitTaskId)
|
||||||
|
.WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.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);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
@ -577,7 +580,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
StudyId = x.StudyId,
|
StudyId = x.StudyId,
|
||||||
InstanceId = x.InstanceId,
|
InstanceId = x.InstanceId,
|
||||||
NumberOfFrames = x.NumberOfFrames,
|
NumberOfFrames = x.NumberOfFrames,
|
||||||
CreateTime=x.CreateTime,
|
CreateTime = x.CreateTime,
|
||||||
|
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
|
|
@ -597,7 +600,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
var questionMarkList = await _readingTaskQuestionMark.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).Select(x => new StudyInstanceInfo()
|
var questionMarkList = await _readingTaskQuestionMark.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).Select(x => new StudyInstanceInfo()
|
||||||
{
|
{
|
||||||
ShowOrder = x.ReadingQuestionTrial==null?0: x.ReadingQuestionTrial.ShowOrder,
|
ShowOrder = x.ReadingQuestionTrial == null ? 0 : x.ReadingQuestionTrial.ShowOrder,
|
||||||
RowIndex = 0m,
|
RowIndex = 0m,
|
||||||
SeriesId = x.SeriesId,
|
SeriesId = x.SeriesId,
|
||||||
StudyId = x.StudyId,
|
StudyId = x.StudyId,
|
||||||
|
|
@ -667,7 +670,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
item.InstanceInfoList = item.InstanceInfoList.OrderBy(x => x.ShowOrder).ThenBy(x=>x.RowIndex).ThenBy(x=>x.RowDate).ToList();
|
item.InstanceInfoList = item.InstanceInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).ThenBy(x => x.RowDate).ToList();
|
||||||
|
|
||||||
|
|
||||||
item.InstanceCount = item.InstanceInfoList.Count;
|
item.InstanceCount = item.InstanceInfoList.Count;
|
||||||
|
|
@ -702,7 +705,6 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#region 非Dicom 检查查询
|
#region 非Dicom 检查查询
|
||||||
|
|
@ -722,8 +724,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
StudyCode = x.StudyCode,
|
StudyCode = x.StudyCode,
|
||||||
IsDicom = false,
|
IsDicom = false,
|
||||||
|
|
||||||
BodyPartForEdit=x.BodyPart,
|
BodyPartForEdit = x.BodyPart,
|
||||||
BodyPartForEditOther=x.BodyPartForEditOther
|
BodyPartForEditOther = x.BodyPartForEditOther
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
CreateMap<SCPSeries, DicomSeries>();
|
CreateMap<SCPSeries, DicomSeries>();
|
||||||
CreateMap<SCPInstance, DicomInstance>();
|
CreateMap<SCPInstance, DicomInstance>();
|
||||||
|
|
||||||
|
CreateMap<DicomStudy, VisitStudyDTO>()
|
||||||
|
.ForMember(d => d.StudyId, u => u.MapFrom(s => s.Id))
|
||||||
|
.ForMember(d => d.SeriesList, u => u.MapFrom(s => s.SeriesList));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,11 @@ public class NoneDicomStudy : BaseFullDeleteAuditEntity
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List<NoneDicomStudyFile> TaskNoneDicomFileList { get; set; }
|
public List<NoneDicomStudyFile> TaskNoneDicomFileList { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public List<NoneDicomStudyFile> ImageLabelNoneDicomFileList { get; set; }
|
||||||
|
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public SubjectVisit SubjectVisit { get; set; }
|
public SubjectVisit SubjectVisit { get; set; }
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,16 @@ public class NoneDicomStudyFile : BaseAddDeleteAuditEntity
|
||||||
[ForeignKey("OriginNoneDicomStudyId")]
|
[ForeignKey("OriginNoneDicomStudyId")]
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public NoneDicomStudy OriginNoneDicomStudy { get; set; }
|
public NoneDicomStudy OriginNoneDicomStudy { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[ForeignKey("ImageLabelNoneDicomStudyId")]
|
||||||
|
[JsonIgnore]
|
||||||
|
public NoneDicomStudy ImageMarkNoneDicomStudy { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
//[ForeignKey("ImageMarkSubjectVisitId")]
|
||||||
|
//[JsonIgnore]
|
||||||
|
//public SubjectVisit ImageMarkSubjectVisit { get; set; }
|
||||||
#endregion
|
#endregion
|
||||||
public Guid NoneDicomStudyId { get; set; }
|
public Guid NoneDicomStudyId { get; set; }
|
||||||
|
|
||||||
|
|
@ -33,5 +43,13 @@ public class NoneDicomStudyFile : BaseAddDeleteAuditEntity
|
||||||
[Comment("为了不影响原始检查,跟任务绑定的 NoneDicomStudyId 为guid空 这个字段记录跟原始检查绑")]
|
[Comment("为了不影响原始检查,跟任务绑定的 NoneDicomStudyId 为guid空 这个字段记录跟原始检查绑")]
|
||||||
public Guid? OriginNoneDicomStudyId { get; set; }
|
public Guid? OriginNoneDicomStudyId { get; set; }
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region 影像预处理访视Id NoneDicomStudyId 为guid空
|
||||||
|
|
||||||
|
//public Guid? ImageMarkSubjectVisitId { get; set; }
|
||||||
|
|
||||||
|
public Guid? ImageLabelNoneDicomStudyId { get; set; }
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,11 @@ public class TaskInstance : BaseFullAuditEntity, IEntitySeqId
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
[ForeignKey("StudyId")]
|
[ForeignKey("StudyId")]
|
||||||
public TaskStudy TaskStudy { get; set; }
|
public TaskStudy TaskStudy { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
[ForeignKey("SubjectVisitId")]
|
||||||
|
public SubjectVisit SubjectVisit { get; set; }
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public Guid SeqId { get; set; }
|
public Guid SeqId { get; set; }
|
||||||
|
|
@ -37,6 +42,8 @@ public class TaskInstance : BaseFullAuditEntity, IEntitySeqId
|
||||||
|
|
||||||
public Guid TrialId { get; set; }
|
public Guid TrialId { get; set; }
|
||||||
public Guid SubjectId { get; set; }
|
public Guid SubjectId { get; set; }
|
||||||
|
|
||||||
|
public Guid? SubjectVisitId { get; set; }
|
||||||
public Guid VisitTaskId { get; set; }
|
public Guid VisitTaskId { get; set; }
|
||||||
public bool Anonymize { get; set; }
|
public bool Anonymize { get; set; }
|
||||||
public string Path { get; set; } = string.Empty;
|
public string Path { get; set; } = string.Empty;
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,16 @@ public class TaskSeries : BaseFullDeleteAuditEntity, IEntitySeqId
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List<TaskInstance> InstanceList { get; set; }
|
public List<TaskInstance> InstanceList { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
[ForeignKey("SubjectVisitId")]
|
||||||
|
public SubjectVisit SubjectVisit { get; set; }
|
||||||
#endregion
|
#endregion
|
||||||
public Guid TrialId { get; set; }
|
public Guid TrialId { get; set; }
|
||||||
public Guid SubjectId { get; set; }
|
public Guid SubjectId { get; set; }
|
||||||
|
|
||||||
|
public Guid? SubjectVisitId { get; set; }
|
||||||
public Guid VisitTaskId { get; set; }
|
public Guid VisitTaskId { get; set; }
|
||||||
public Guid SeqId { get; set; }
|
public Guid SeqId { get; set; }
|
||||||
public Guid StudyId { get; set; }
|
public Guid StudyId { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,18 @@ public class TaskStudy : BaseFullDeleteAuditEntity, IEntitySeqId
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
[ForeignKey("SubjectId")]
|
[ForeignKey("SubjectId")]
|
||||||
public Subject Subject { get; set; }
|
public Subject Subject { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
[ForeignKey("SubjectVisitId")]
|
||||||
|
public SubjectVisit SubjectVisit { get; set; }
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public Guid SeqId { get; set; }
|
public Guid SeqId { get; set; }
|
||||||
public Guid TrialId { get; set; }
|
public Guid TrialId { get; set; }
|
||||||
public Guid SubjectId { get; set; }
|
public Guid SubjectId { get; set; }
|
||||||
|
|
||||||
|
public Guid? SubjectVisitId { get; set; }
|
||||||
|
|
||||||
public Guid VisitTaskId { get; set; }
|
public Guid VisitTaskId { get; set; }
|
||||||
public int Code { get; set; } = 0;
|
public int Code { get; set; } = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,10 @@ namespace IRaCIS.Core.Domain.Models;
|
||||||
public class SubjectVisit : BaseFullDeleteAuditEntity
|
public class SubjectVisit : BaseFullDeleteAuditEntity
|
||||||
{
|
{
|
||||||
#region 导航属性
|
#region 导航属性
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public List<TaskStudy> TaskStudyList { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List<TrialQCQuestionAnswer> TrialQCQuestionAnswerList { get; set; }
|
public List<TrialQCQuestionAnswer> TrialQCQuestionAnswerList { get; set; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,10 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
|
||||||
//同样一个实体 有两个相同的类型的导航属性,需要手动配置
|
//同样一个实体 有两个相同的类型的导航属性,需要手动配置
|
||||||
builder.HasMany(t => t.NoneDicomFileList).WithOne(s => s.NoneDicomStudy).HasForeignKey(t => t.NoneDicomStudyId);
|
builder.HasMany(t => t.NoneDicomFileList).WithOne(s => s.NoneDicomStudy).HasForeignKey(t => t.NoneDicomStudyId);
|
||||||
builder.HasMany(t => t.TaskNoneDicomFileList).WithOne(s => s.OriginNoneDicomStudy).HasForeignKey(t => t.OriginNoneDicomStudyId);
|
builder.HasMany(t => t.TaskNoneDicomFileList).WithOne(s => s.OriginNoneDicomStudy).HasForeignKey(t => t.OriginNoneDicomStudyId);
|
||||||
|
|
||||||
|
builder.HasMany(t => t.ImageLabelNoneDicomFileList).WithOne(s => s.ImageMarkNoneDicomStudy).HasForeignKey(t => t.ImageLabelNoneDicomStudyId);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,160 @@
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class octadd : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<Guid>(
|
||||||
|
name: "SubjectVisitId",
|
||||||
|
table: "TaskStudy",
|
||||||
|
type: "uniqueidentifier",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<Guid>(
|
||||||
|
name: "SubjectVisitId",
|
||||||
|
table: "TaskSeries",
|
||||||
|
type: "uniqueidentifier",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<Guid>(
|
||||||
|
name: "SubjectVisitId",
|
||||||
|
table: "TaskInstance",
|
||||||
|
type: "uniqueidentifier",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<Guid>(
|
||||||
|
name: "ImageLabelNoneDicomStudyId",
|
||||||
|
table: "NoneDicomStudyFile",
|
||||||
|
type: "uniqueidentifier",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
//migrationBuilder.CreateIndex(
|
||||||
|
// name: "IX_TrialCriterionKeyFile_TrialCriterionId",
|
||||||
|
// table: "TrialCriterionKeyFile",
|
||||||
|
// column: "TrialCriterionId");
|
||||||
|
|
||||||
|
//migrationBuilder.CreateIndex(
|
||||||
|
// name: "IX_TaskStudy_SubjectVisitId",
|
||||||
|
// table: "TaskStudy",
|
||||||
|
// column: "SubjectVisitId");
|
||||||
|
|
||||||
|
//migrationBuilder.CreateIndex(
|
||||||
|
// name: "IX_TaskSeries_SubjectVisitId",
|
||||||
|
// table: "TaskSeries",
|
||||||
|
// column: "SubjectVisitId");
|
||||||
|
|
||||||
|
//migrationBuilder.CreateIndex(
|
||||||
|
// name: "IX_TaskInstance_SubjectVisitId",
|
||||||
|
// table: "TaskInstance",
|
||||||
|
// column: "SubjectVisitId");
|
||||||
|
|
||||||
|
//migrationBuilder.CreateIndex(
|
||||||
|
// name: "IX_NoneDicomStudyFile_ImageLabelNoneDicomStudyId",
|
||||||
|
// table: "NoneDicomStudyFile",
|
||||||
|
// column: "ImageLabelNoneDicomStudyId");
|
||||||
|
|
||||||
|
//migrationBuilder.AddForeignKey(
|
||||||
|
// name: "FK_NoneDicomStudyFile_NoneDicomStudy_ImageLabelNoneDicomStudyId",
|
||||||
|
// table: "NoneDicomStudyFile",
|
||||||
|
// column: "ImageLabelNoneDicomStudyId",
|
||||||
|
// principalTable: "NoneDicomStudy",
|
||||||
|
// principalColumn: "Id");
|
||||||
|
|
||||||
|
//migrationBuilder.AddForeignKey(
|
||||||
|
// name: "FK_TaskInstance_SubjectVisit_SubjectVisitId",
|
||||||
|
// table: "TaskInstance",
|
||||||
|
// column: "SubjectVisitId",
|
||||||
|
// principalTable: "SubjectVisit",
|
||||||
|
// principalColumn: "Id");
|
||||||
|
|
||||||
|
//migrationBuilder.AddForeignKey(
|
||||||
|
// name: "FK_TaskSeries_SubjectVisit_SubjectVisitId",
|
||||||
|
// table: "TaskSeries",
|
||||||
|
// column: "SubjectVisitId",
|
||||||
|
// principalTable: "SubjectVisit",
|
||||||
|
// principalColumn: "Id");
|
||||||
|
|
||||||
|
//migrationBuilder.AddForeignKey(
|
||||||
|
// name: "FK_TaskStudy_SubjectVisit_SubjectVisitId",
|
||||||
|
// table: "TaskStudy",
|
||||||
|
// column: "SubjectVisitId",
|
||||||
|
// principalTable: "SubjectVisit",
|
||||||
|
// principalColumn: "Id");
|
||||||
|
|
||||||
|
//migrationBuilder.AddForeignKey(
|
||||||
|
// name: "FK_TrialCriterionKeyFile_ReadingQuestionCriterionTrial_TrialCriterionId",
|
||||||
|
// table: "TrialCriterionKeyFile",
|
||||||
|
// column: "TrialCriterionId",
|
||||||
|
// principalTable: "ReadingQuestionCriterionTrial",
|
||||||
|
// principalColumn: "Id",
|
||||||
|
// onDelete: ReferentialAction.Cascade);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
//migrationBuilder.DropForeignKey(
|
||||||
|
// name: "FK_NoneDicomStudyFile_NoneDicomStudy_ImageLabelNoneDicomStudyId",
|
||||||
|
// table: "NoneDicomStudyFile");
|
||||||
|
|
||||||
|
//migrationBuilder.DropForeignKey(
|
||||||
|
// name: "FK_TaskInstance_SubjectVisit_SubjectVisitId",
|
||||||
|
// table: "TaskInstance");
|
||||||
|
|
||||||
|
//migrationBuilder.DropForeignKey(
|
||||||
|
// name: "FK_TaskSeries_SubjectVisit_SubjectVisitId",
|
||||||
|
// table: "TaskSeries");
|
||||||
|
|
||||||
|
//migrationBuilder.DropForeignKey(
|
||||||
|
// name: "FK_TaskStudy_SubjectVisit_SubjectVisitId",
|
||||||
|
// table: "TaskStudy");
|
||||||
|
|
||||||
|
//migrationBuilder.DropForeignKey(
|
||||||
|
// name: "FK_TrialCriterionKeyFile_ReadingQuestionCriterionTrial_TrialCriterionId",
|
||||||
|
// table: "TrialCriterionKeyFile");
|
||||||
|
|
||||||
|
//migrationBuilder.DropIndex(
|
||||||
|
// name: "IX_TrialCriterionKeyFile_TrialCriterionId",
|
||||||
|
// table: "TrialCriterionKeyFile");
|
||||||
|
|
||||||
|
//migrationBuilder.DropIndex(
|
||||||
|
// name: "IX_TaskStudy_SubjectVisitId",
|
||||||
|
// table: "TaskStudy");
|
||||||
|
|
||||||
|
//migrationBuilder.DropIndex(
|
||||||
|
// name: "IX_TaskSeries_SubjectVisitId",
|
||||||
|
// table: "TaskSeries");
|
||||||
|
|
||||||
|
//migrationBuilder.DropIndex(
|
||||||
|
// name: "IX_TaskInstance_SubjectVisitId",
|
||||||
|
// table: "TaskInstance");
|
||||||
|
|
||||||
|
//migrationBuilder.DropIndex(
|
||||||
|
// name: "IX_NoneDicomStudyFile_ImageLabelNoneDicomStudyId",
|
||||||
|
// table: "NoneDicomStudyFile");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "SubjectVisitId",
|
||||||
|
table: "TaskStudy");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "SubjectVisitId",
|
||||||
|
table: "TaskSeries");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "SubjectVisitId",
|
||||||
|
table: "TaskInstance");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "ImageLabelNoneDicomStudyId",
|
||||||
|
table: "NoneDicomStudyFile");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3846,6 +3846,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
.HasMaxLength(400)
|
.HasMaxLength(400)
|
||||||
.HasColumnType("nvarchar(400)");
|
.HasColumnType("nvarchar(400)");
|
||||||
|
|
||||||
|
b.Property<Guid?>("ImageLabelNoneDicomStudyId")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
b.Property<bool>("IsDeleted")
|
b.Property<bool>("IsDeleted")
|
||||||
.HasColumnType("bit");
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
|
@ -3871,6 +3874,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
|
||||||
b.HasIndex("CreateUserId");
|
b.HasIndex("CreateUserId");
|
||||||
|
|
||||||
|
b.HasIndex("ImageLabelNoneDicomStudyId");
|
||||||
|
|
||||||
b.HasIndex("NoneDicomStudyId");
|
b.HasIndex("NoneDicomStudyId");
|
||||||
|
|
||||||
b.HasIndex("OriginNoneDicomStudyId");
|
b.HasIndex("OriginNoneDicomStudyId");
|
||||||
|
|
@ -11160,6 +11165,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
b.Property<Guid>("SubjectId")
|
b.Property<Guid>("SubjectId")
|
||||||
.HasColumnType("uniqueidentifier");
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<Guid?>("SubjectVisitId")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
b.Property<string>("TransferSytaxUID")
|
b.Property<string>("TransferSytaxUID")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasMaxLength(400)
|
.HasMaxLength(400)
|
||||||
|
|
@ -11200,6 +11208,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
|
||||||
b.HasIndex("StudyId");
|
b.HasIndex("StudyId");
|
||||||
|
|
||||||
|
b.HasIndex("SubjectVisitId");
|
||||||
|
|
||||||
b.ToTable("TaskInstance", t =>
|
b.ToTable("TaskInstance", t =>
|
||||||
{
|
{
|
||||||
t.HasComment("项目阅片 - 任务后处理Instance");
|
t.HasComment("项目阅片 - 任务后处理Instance");
|
||||||
|
|
@ -11532,6 +11542,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
b.Property<Guid>("SubjectId")
|
b.Property<Guid>("SubjectId")
|
||||||
.HasColumnType("uniqueidentifier");
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<Guid?>("SubjectVisitId")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
b.Property<Guid>("TrialId")
|
b.Property<Guid>("TrialId")
|
||||||
.HasColumnType("uniqueidentifier");
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
|
@ -11555,6 +11568,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
|
||||||
b.HasIndex("StudyId");
|
b.HasIndex("StudyId");
|
||||||
|
|
||||||
|
b.HasIndex("SubjectVisitId");
|
||||||
|
|
||||||
b.ToTable("TaskSeries", t =>
|
b.ToTable("TaskSeries", t =>
|
||||||
{
|
{
|
||||||
t.HasComment("项目阅片 - 任务后上传序列");
|
t.HasComment("项目阅片 - 任务后上传序列");
|
||||||
|
|
@ -11735,6 +11750,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
b.Property<Guid>("SubjectId")
|
b.Property<Guid>("SubjectId")
|
||||||
.HasColumnType("uniqueidentifier");
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<Guid?>("SubjectVisitId")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
b.Property<Guid>("TrialId")
|
b.Property<Guid>("TrialId")
|
||||||
.HasColumnType("uniqueidentifier");
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
|
@ -11758,6 +11776,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
|
||||||
b.HasIndex("SubjectId");
|
b.HasIndex("SubjectId");
|
||||||
|
|
||||||
|
b.HasIndex("SubjectVisitId");
|
||||||
|
|
||||||
b.HasIndex("VisitTaskId");
|
b.HasIndex("VisitTaskId");
|
||||||
|
|
||||||
b.ToTable("TaskStudy", t =>
|
b.ToTable("TaskStudy", t =>
|
||||||
|
|
@ -17012,6 +17032,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "ImageMarkNoneDicomStudy")
|
||||||
|
.WithMany("ImageLabelNoneDicomFileList")
|
||||||
|
.HasForeignKey("ImageLabelNoneDicomStudyId");
|
||||||
|
|
||||||
b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "NoneDicomStudy")
|
b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "NoneDicomStudy")
|
||||||
.WithMany("NoneDicomFileList")
|
.WithMany("NoneDicomFileList")
|
||||||
.HasForeignKey("NoneDicomStudyId")
|
.HasForeignKey("NoneDicomStudyId")
|
||||||
|
|
@ -17028,6 +17052,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
|
||||||
b.Navigation("CreateUserRole");
|
b.Navigation("CreateUserRole");
|
||||||
|
|
||||||
|
b.Navigation("ImageMarkNoneDicomStudy");
|
||||||
|
|
||||||
b.Navigation("NoneDicomStudy");
|
b.Navigation("NoneDicomStudy");
|
||||||
|
|
||||||
b.Navigation("OriginNoneDicomStudy");
|
b.Navigation("OriginNoneDicomStudy");
|
||||||
|
|
@ -19149,8 +19175,14 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("SubjectVisitId");
|
||||||
|
|
||||||
b.Navigation("CreateUserRole");
|
b.Navigation("CreateUserRole");
|
||||||
|
|
||||||
|
b.Navigation("SubjectVisit");
|
||||||
|
|
||||||
b.Navigation("TaskSeries");
|
b.Navigation("TaskSeries");
|
||||||
|
|
||||||
b.Navigation("TaskStudy");
|
b.Navigation("TaskStudy");
|
||||||
|
|
@ -19229,8 +19261,14 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("SubjectVisitId");
|
||||||
|
|
||||||
b.Navigation("CreateUserRole");
|
b.Navigation("CreateUserRole");
|
||||||
|
|
||||||
|
b.Navigation("SubjectVisit");
|
||||||
|
|
||||||
b.Navigation("TaskStudy");
|
b.Navigation("TaskStudy");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -19248,6 +19286,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("IRaCIS.Core.Domain.Models.SubjectVisit", "SubjectVisit")
|
||||||
|
.WithMany("TaskStudyList")
|
||||||
|
.HasForeignKey("SubjectVisitId");
|
||||||
|
|
||||||
b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask")
|
b.HasOne("IRaCIS.Core.Domain.Models.VisitTask", "VisitTask")
|
||||||
.WithMany("TaskStudyList")
|
.WithMany("TaskStudyList")
|
||||||
.HasForeignKey("VisitTaskId")
|
.HasForeignKey("VisitTaskId")
|
||||||
|
|
@ -19258,6 +19300,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
|
||||||
b.Navigation("Subject");
|
b.Navigation("Subject");
|
||||||
|
|
||||||
|
b.Navigation("SubjectVisit");
|
||||||
|
|
||||||
b.Navigation("VisitTask");
|
b.Navigation("VisitTask");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -20844,6 +20888,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
|
||||||
modelBuilder.Entity("IRaCIS.Core.Domain.Models.NoneDicomStudy", b =>
|
modelBuilder.Entity("IRaCIS.Core.Domain.Models.NoneDicomStudy", b =>
|
||||||
{
|
{
|
||||||
|
b.Navigation("ImageLabelNoneDicomFileList");
|
||||||
|
|
||||||
b.Navigation("NoneDicomFileList");
|
b.Navigation("NoneDicomFileList");
|
||||||
|
|
||||||
b.Navigation("TaskNoneDicomFileList");
|
b.Navigation("TaskNoneDicomFileList");
|
||||||
|
|
@ -21002,6 +21048,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
|
||||||
b.Navigation("SubjectVisitImageBackRecordList");
|
b.Navigation("SubjectVisitImageBackRecordList");
|
||||||
|
|
||||||
|
b.Navigation("TaskStudyList");
|
||||||
|
|
||||||
b.Navigation("TrialQCQuestionAnswerList");
|
b.Navigation("TrialQCQuestionAnswerList");
|
||||||
|
|
||||||
b.Navigation("VisitTaskList");
|
b.Navigation("VisitTaskList");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue