接受合并
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
d786b3bb61
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
@ -521,7 +522,17 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await _noneDicomStudyFileRepository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, NoneDicomStudyId = noneDicomStudyId.Value, FileType = item.FileType, FileSize = item.FileFize });
|
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
|
||||||
|
{
|
||||||
|
await _noneDicomStudyFileRepository.AddAsync(new NoneDicomStudyFile() { FileName = item.FileName, Path = item.FilePath, NoneDicomStudyId = noneDicomStudyId.Value, FileType = item.FileType, FileSize = item.FileFize });
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@ namespace IRaCIS.Core.Application.Helper
|
||||||
|
|
||||||
public class StudyDIRInfo
|
public class StudyDIRInfo
|
||||||
{
|
{
|
||||||
|
public bool IsTaskStudy { get; set; }
|
||||||
|
|
||||||
public Guid SubjectVisitId { get; set; }
|
public Guid SubjectVisitId { get; set; }
|
||||||
// Study
|
// Study
|
||||||
public Guid DicomStudyId { get; set; }
|
public Guid DicomStudyId { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -60,4 +60,16 @@ namespace IRaCIS.Core.Application.Helper
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
|
||||||
|
public class DateTimeTranaslateAttribute : Attribute
|
||||||
|
{
|
||||||
|
public string Formart { get; set; }
|
||||||
|
|
||||||
|
public DateTimeTranaslateAttribute(string formart)
|
||||||
|
{
|
||||||
|
Formart = formart;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -985,6 +985,398 @@
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
<exception cref="T:System.Exception"></exception>
|
<exception cref="T:System.Exception"></exception>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.ResearchProgramNo">
|
||||||
|
<summary>
|
||||||
|
方案编号 STUDYID
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.Domain">
|
||||||
|
<summary>
|
||||||
|
域 DOMAIN TU TR RS
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.ValueType">
|
||||||
|
<summary>
|
||||||
|
取值类型 TUSPID TRSPID RSSPID
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.SubjectCode">
|
||||||
|
<summary>
|
||||||
|
受试者编号 USUBJID 实际展示TrialSiteSubjectCode
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.Vendor">
|
||||||
|
<summary>
|
||||||
|
供应商 TUNAM (Extensive Imaging)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.UserName">
|
||||||
|
<summary>
|
||||||
|
阅片人 TUEVAL TREVAL RSEVAL
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.ArmEnum">
|
||||||
|
<summary>
|
||||||
|
阅片人标识 TUEVALID TREVALID RSEVALID
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.VisitNum">
|
||||||
|
<summary>
|
||||||
|
访视编号 VISITNUM
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.VisitName">
|
||||||
|
<summary>
|
||||||
|
访视名称 VISIT
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.LatestScanDate">
|
||||||
|
<summary>
|
||||||
|
拍片日期 TUDTC TRDTC RSDTC
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.VisitTaskId">
|
||||||
|
<summary>
|
||||||
|
eCRF标识 TUREFID TRREFID RSREFID
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.CriterionName">
|
||||||
|
<summary>
|
||||||
|
RSCAT 阅片标准
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_TR_RSBaseModel.IsJudgeSelect">
|
||||||
|
<summary>
|
||||||
|
RSACPTFL 裁定标记 TUACPTFL
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_Export.No">
|
||||||
|
<summary>
|
||||||
|
序号 TUSEQ (同一个访视,所有阅片人选择病灶给个顺序号)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_Export.ARM_TumorNo">
|
||||||
|
<summary>
|
||||||
|
链接ID TULNKID (阅片人角色_病灶编号)不同访视可以重复
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_Export.TumorIdentificationSimple">
|
||||||
|
<summary>
|
||||||
|
肿瘤识别简称 TUTESTCD
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_Export.TumorIdentificationFullName">
|
||||||
|
<summary>
|
||||||
|
肿瘤识别全称 TUTEST
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_Export.TumorIdentificationResult">
|
||||||
|
<summary>
|
||||||
|
肿瘤鉴定结果 TUORRES
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_Export.TumorIdentificationResultType">
|
||||||
|
<summary>
|
||||||
|
肿瘤识别结果类型 TUSTRESC
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_Export.BodyPart">
|
||||||
|
<summary>
|
||||||
|
部位 TULOC (对应病灶表的部位,需要国际化)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_Export.IdentificationMethod">
|
||||||
|
<summary>
|
||||||
|
鉴定方法 TUMETHOD (Modality?)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TU_Export.BodyPartDes">
|
||||||
|
<summary>
|
||||||
|
部位描述 LOCTEXT
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.TRSEQ">
|
||||||
|
<summary>
|
||||||
|
每个subject 按照顺序编号 TRSEQ
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.TRGRPID">
|
||||||
|
<summary>
|
||||||
|
TRGRPID 组ID 对应TU表肿瘤鉴定结果 TumorIdentificationResult
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.ARM_TumorNo">
|
||||||
|
<summary>
|
||||||
|
TRLNKID 链接ID 对应TU表的链接ID TumorNo(阅片人角色_病灶编号)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.ARM_VisitName">
|
||||||
|
<summary>
|
||||||
|
TRLNKGRP 链接组 ARM-任务名(访视名) 对应RS的链接组
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.TumorAssessmentSimpleName">
|
||||||
|
<summary>
|
||||||
|
肿瘤评估简称 TRTESTCD
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.TumorAssessmentFullName">
|
||||||
|
<summary>
|
||||||
|
肿瘤评估全称 TRTEST
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.OriginalMeasurements">
|
||||||
|
<summary>
|
||||||
|
原始测量 TRORRES
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.OriginalUnit">
|
||||||
|
<summary>
|
||||||
|
原始单位 TRORRESU
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.StandardResult_Character">
|
||||||
|
<summary>
|
||||||
|
标准结果(字符) TRSTRESC
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.StandardResult_Numeric">
|
||||||
|
<summary>
|
||||||
|
标准结果(数值) TRORRESU
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.StandardUnit">
|
||||||
|
<summary>
|
||||||
|
标准单位 TRSTRESU
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.CompletionStatus">
|
||||||
|
<summary>
|
||||||
|
完成状态 TRSTAT
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.IdentificationMethod">
|
||||||
|
<summary>
|
||||||
|
完成状态 TRMETHOD
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.TR_Export.NotMeasuredReason">
|
||||||
|
<summary>
|
||||||
|
无法测量原因 TRREASND
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.RS_Export.RSSEQ">
|
||||||
|
<summary>
|
||||||
|
RSSEQ 按照subject 的数据顺序编号
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.RS_Export.ARM_VisitName">
|
||||||
|
<summary>
|
||||||
|
RSLNKGRP 链接组 ARM_任务名(访视名)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.RS_Export.EfficacyEvaluationSimpleName">
|
||||||
|
<summary>
|
||||||
|
RSTESTCD 疗效评估简称
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.RS_Export.EfficacyEvaluationName">
|
||||||
|
<summary>
|
||||||
|
RSTEST 疗效评估全称
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.RS_Export.RespondEfficacyAssessment">
|
||||||
|
<summary>
|
||||||
|
RSORRES 响应评估原始结果
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.RS_Export.StandardEfficacyAssessment">
|
||||||
|
<summary>
|
||||||
|
RSSTRESC 标准疗效评估
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.RS_Export.CompletionStatus">
|
||||||
|
<summary>
|
||||||
|
RSSTAT 完成状态
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.RS_Export.NotAssessmentReason">
|
||||||
|
<summary>
|
||||||
|
RSREASND 无法评估原因
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.RS_Export.AssessmentReason">
|
||||||
|
<summary>
|
||||||
|
REASASM 评估原因
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.RS_Export.ReAssessmentReason">
|
||||||
|
<summary>
|
||||||
|
REASOVR 重新评估原因
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.RS_Export.UpdateAssessmentReason">
|
||||||
|
<summary>
|
||||||
|
REASUPD 更新评估原因
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.CO_Export.RDOMAIN">
|
||||||
|
<summary>
|
||||||
|
关联域 RS:(访视点备注) 空:裁判选择原因
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.CO_Export.COSEQ">
|
||||||
|
<summary>
|
||||||
|
COSEQ 序号
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.CO_Export.IdentificationVariable">
|
||||||
|
<summary>
|
||||||
|
IDVAR 标识变量 RSSEQ 空:裁判选择原因
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.CO_Export.Identification">
|
||||||
|
<summary>
|
||||||
|
标识 IDVARVAL RSSEQ具体的值 空:裁判选择原因
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.CO_Export.RemarksQuote">
|
||||||
|
<summary>
|
||||||
|
COREF 备注引用
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.CO_Export.Remarks">
|
||||||
|
<summary>
|
||||||
|
备注 COVAL
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.CO_Export.CODTC">
|
||||||
|
<summary>
|
||||||
|
裁决日期 CODTC
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="T:IRaCIS.Core.Application.Service.Common.IVUS_OCTBaseDto">
|
||||||
|
<summary>
|
||||||
|
公共影像导表基类(IVUS / OCT 通用)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IVUS_OCTBaseDto.ResearchProgramNo">
|
||||||
|
<summary>研究标识符</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IVUS_OCTBaseDto.TrialSiteCode">
|
||||||
|
<summary>中心编号</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IVUS_OCTBaseDto.SubjectCode">
|
||||||
|
<summary>受试者标识符</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IVUS_OCTBaseDto.USUBJID">
|
||||||
|
<summary>受试者唯一标识</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IVUS_OCTBaseDto.VisitName">
|
||||||
|
<summary>访视名称</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IVUS_OCTBaseDto.ArmEnum">
|
||||||
|
<summary>阅片人角色</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IVUS_OCTBaseDto.LatestScanDate">
|
||||||
|
<summary>拍片日期</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IVUS_OCTBaseDto.SignTime">
|
||||||
|
<summary>阅片完成时间</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IVUS_OCTBaseDto.VisitNum">
|
||||||
|
<summary>
|
||||||
|
访视编号 VISITNUM
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IVUS_OCTBaseDto.VisitNote">
|
||||||
|
<summary>访视点备注</summary>
|
||||||
|
</member>
|
||||||
|
<member name="T:IRaCIS.Core.Application.Service.Common.IvusExportDto">
|
||||||
|
<summary>
|
||||||
|
IVUS 导表模型
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IvusExportDto.TARGETV">
|
||||||
|
<summary>靶段</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IvusExportDto.PLAQUE">
|
||||||
|
<summary>斑块编号</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IvusExportDto.EEM">
|
||||||
|
<summary>外弹力膜面积</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IvusExportDto.LUMEN">
|
||||||
|
<summary>管腔面积</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IvusExportDto.PA">
|
||||||
|
<summary>外弹力膜与管腔面积差值</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IvusExportDto.PFC">
|
||||||
|
<summary>回撤中的图像帧数</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IvusExportDto.FC">
|
||||||
|
<summary>分析图像帧数</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IvusExportDto.TOTALEEM">
|
||||||
|
<summary>总外弹力膜面积 (如无可不填)</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IvusExportDto.TOTALPA">
|
||||||
|
<summary>总 PA (如无可不填)</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.IvusExportDto.PAV">
|
||||||
|
<summary>PAV (如无可不填)</summary>
|
||||||
|
</member>
|
||||||
|
<member name="T:IRaCIS.Core.Application.Service.Common.OctExportDto">
|
||||||
|
<summary>
|
||||||
|
OCT 导表模型
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.TARGETV">
|
||||||
|
<summary>靶段</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.PLAQUE">
|
||||||
|
<summary>斑块编号</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.TestID">
|
||||||
|
<summary>测量标识</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.TESTCD">
|
||||||
|
<summary>测量参数名称</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.ORRES">
|
||||||
|
<summary>测量参数值</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.ORRESU">
|
||||||
|
<summary>测量值单位</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.PLATYPE">
|
||||||
|
<summary>斑块类型</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.MINFCT">
|
||||||
|
<summary>最小纤维帽厚度</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.AVGMFCT">
|
||||||
|
<summary>平均纤维帽厚度</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.LAMEAN">
|
||||||
|
<summary>脂质角度平均值</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.LAMAX">
|
||||||
|
<summary>脂质角度最大值</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.MACRI">
|
||||||
|
<summary>巨噬细胞浸润</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.MIARC">
|
||||||
|
<summary>巨噬细胞浸润角度</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.MC">
|
||||||
|
<summary>微通道</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Common.OctExportDto.CCS">
|
||||||
|
<summary>胆固醇结晶</summary>
|
||||||
|
</member>
|
||||||
<member name="T:IRaCIS.Core.Application.Service.ExploreRecommendService">
|
<member name="T:IRaCIS.Core.Application.Service.ExploreRecommendService">
|
||||||
<summary>
|
<summary>
|
||||||
ExploreRecommendService
|
ExploreRecommendService
|
||||||
|
|
@ -1116,14 +1508,6 @@
|
||||||
<param name="trialId"></param>
|
<param name="trialId"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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)">
|
<member name="M:IRaCIS.Core.Application.Service.TrialImageDownloadService.WriteTrialNeedDealData(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomInstance},System.Guid)">
|
||||||
<summary>
|
<summary>
|
||||||
读取该项目的数据,进行维护
|
读取该项目的数据,进行维护
|
||||||
|
|
@ -1525,6 +1909,14 @@
|
||||||
<param name="inCommand"></param>
|
<param name="inCommand"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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})">
|
<member name="M:IRaCIS.Core.Application.Service.AuditDocumentService.AddClosureRelationsAsync(System.Guid,System.Nullable{System.Guid})">
|
||||||
<summary>
|
<summary>
|
||||||
插入闭包表关系
|
插入闭包表关系
|
||||||
|
|
@ -2219,6 +2611,12 @@
|
||||||
<param name="inCommand"></param>
|
<param name="inCommand"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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)">
|
<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>
|
<summary>
|
||||||
受试者级别所有的影像
|
受试者级别所有的影像
|
||||||
|
|
@ -13047,7 +13445,7 @@
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.ReadingQuestionService.AddOrUpdateReadingTableQuestionTrial(IRaCIS.Core.Application.Service.Reading.Dto.ReadingTableQuestionTrialAddOrEdit)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingQuestionService.AddOrUpdateReadingTableQuestionTrial(IRaCIS.Core.Application.Service.Reading.Dto.ReadingTableQuestionTrialAddOrEdit)">
|
||||||
<summary>
|
<summary>
|
||||||
新增修改想想项目表格问题
|
新增修改项目表格问题
|
||||||
</summary>
|
</summary>
|
||||||
<param name="indto"></param>
|
<param name="indto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
|
|
|
||||||
|
|
@ -490,6 +490,8 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||||
|
|
||||||
public int? RandomOrder { get; set; }
|
public int? RandomOrder { get; set; }
|
||||||
public bool? IsRandomOrderList { get; set; }
|
public bool? IsRandomOrderList { get; set; }
|
||||||
|
|
||||||
|
public CriterionType? CriterionType { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1027,8 +1027,8 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
//满足前序访视不存在 需要签署但是未签署 sql 相当复杂 同时想查询所有未读的统计数字 就无法统计 byzhouhang
|
//满足前序访视不存在 需要签署但是未签署 sql 相当复杂 同时想查询所有未读的统计数字 就无法统计 byzhouhang
|
||||||
//但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候,要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活
|
//但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候,要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活
|
||||||
//.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum))
|
//.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum))
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => (t.Subject.Code.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate));
|
.WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => (t.Subject.Code.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate))
|
||||||
|
;
|
||||||
|
|
||||||
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode });
|
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode });
|
||||||
|
|
||||||
|
|
@ -1171,7 +1171,9 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
|
||||||
var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.UserRoleId && x.TaskState == TaskState.Effect)
|
var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.UserRoleId && x.TaskState == TaskState.Effect)
|
||||||
.WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId)
|
.WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId)
|
||||||
.WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate));
|
.WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate))
|
||||||
|
.WhereIf(critrion.CriterionType == CriterionType.OCT, t => t.ReadingCategory == ReadingCategory.Visit ? t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(t => t.ImageLabelNoneDicomFileList).Any() : true)
|
||||||
|
.WhereIf(critrion.CriterionType == CriterionType.IVUS, t => t.ReadingCategory == ReadingCategory.Visit ? t.SourceSubjectVisit.TaskStudyList.Any() : true);
|
||||||
|
|
||||||
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode });
|
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode });
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2344,6 +2344,11 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
if (criterion.CriterionType == CriterionType.OCT)
|
if (criterion.CriterionType == CriterionType.OCT)
|
||||||
{
|
{
|
||||||
list.Add(new ExportDocumentDes() { Code = StaticData.Export.OCT_ReadingLession_Export, ExportCatogory = ExportResult.OCT_ReadingLession_Export });
|
list.Add(new ExportDocumentDes() { Code = StaticData.Export.OCT_ReadingLession_Export, ExportCatogory = ExportResult.OCT_ReadingLession_Export });
|
||||||
|
list.Add(new ExportDocumentDes() { Code = StaticData.Export.OCT_CDISC_Export, ExportCatogory = ExportResult.OCT_CDISC_Export });
|
||||||
|
}
|
||||||
|
if (criterion.CriterionType == CriterionType.IVUS)
|
||||||
|
{
|
||||||
|
list.Add(new ExportDocumentDes() { Code = StaticData.Export.IVUS_CDISC_Export, ExportCatogory = ExportResult.IVUS_CDISC_Export });
|
||||||
}
|
}
|
||||||
//else if (criterion.CriterionType == CriterionType.SelfDefine)
|
//else if (criterion.CriterionType == CriterionType.SelfDefine)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,513 @@
|
||||||
|
using IRaCIS.Core.Application.Contracts;
|
||||||
|
using IRaCIS.Core.Application.Helper;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace IRaCIS.Core.Application.Service.Common;
|
||||||
|
|
||||||
|
public class TumorCommonQustionInfo
|
||||||
|
{
|
||||||
|
//问题标识,肿瘤评估用于区分是什么问题
|
||||||
|
public QuestionType? QuestionType { get; set; }
|
||||||
|
|
||||||
|
public Guid QuestionId { get; set; }
|
||||||
|
public string QuestionName { get; set; }
|
||||||
|
|
||||||
|
public string QuestionValue { get; set; }
|
||||||
|
|
||||||
|
public string TranslateDicName { get; set; }
|
||||||
|
|
||||||
|
public ValueUnit? Unit { get; set; }
|
||||||
|
|
||||||
|
public ValueOfType? ValueType { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TumorLessionInfo
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
|
||||||
|
public Guid? OrganInfoId { get; set; }
|
||||||
|
//病灶编号
|
||||||
|
public string LessionCode { get; set; }
|
||||||
|
|
||||||
|
public LesionType? LessionType { get; set; }
|
||||||
|
|
||||||
|
public Guid? SplitRowId { get; set; }
|
||||||
|
|
||||||
|
public string? DicomModality { get; set; }
|
||||||
|
|
||||||
|
public string? NoneDicomModality { get; set; }
|
||||||
|
|
||||||
|
//病灶答案
|
||||||
|
public List<TumorLessionAnswerInfo> LessionAnswerList { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TumorLessionAnswerInfo
|
||||||
|
{
|
||||||
|
public QuestionMark? QuestionMark { get; set; }
|
||||||
|
|
||||||
|
//病灶Id
|
||||||
|
public Guid RowId { get; set; }
|
||||||
|
|
||||||
|
//如果是4 就取CustomUnit 否则就是字典翻译
|
||||||
|
[Comment("单位")]
|
||||||
|
public ValueUnit? Unit { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public int ShowOrder { get; set; }
|
||||||
|
|
||||||
|
public Guid TableQuesionId { get; set; }
|
||||||
|
|
||||||
|
public string QuestionName { get; set; }
|
||||||
|
|
||||||
|
public string QuestionValue { get; set; }
|
||||||
|
|
||||||
|
public string TranslateDicName { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TumorGlobalQuestionAnserInfo
|
||||||
|
{
|
||||||
|
[Comment("原任务ID")]
|
||||||
|
public Guid TaskId { get; set; }
|
||||||
|
|
||||||
|
public GlobalAnswerType GlobalAnswerType { get; set; }
|
||||||
|
|
||||||
|
[Comment("问题答案")]
|
||||||
|
public string Answer { get; set; } = string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TumorExportBaseModel : TU_TR_RSBaseModel
|
||||||
|
{
|
||||||
|
public List<TumorLessionInfo> LesionList { get; set; } = new List<TumorLessionInfo>();
|
||||||
|
|
||||||
|
public List<TumorCommonQustionInfo> QuestionAnswerList { get; set; }
|
||||||
|
|
||||||
|
public List<TumorGlobalQuestionAnserInfo> GlobalResultList { get; set; }
|
||||||
|
|
||||||
|
#region 后续处理额外添加字段
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public DateTime? JudgeSignTime { get; set; }
|
||||||
|
|
||||||
|
public Guid? SourceSubjectVisitId { get; set; }
|
||||||
|
|
||||||
|
public List<decimal> SubjectCriterionReadingPeriodVisitNumList { get; set; }
|
||||||
|
|
||||||
|
public decimal VisitTaskNum { get; set; }
|
||||||
|
|
||||||
|
public ReadingTaskState ReadingTaskState { get; set; }
|
||||||
|
|
||||||
|
public ReadingCategory ReadingCategory { get; set; }
|
||||||
|
|
||||||
|
//裁判结果选择的访视或者全局任务Id
|
||||||
|
public Arm? JudgeArmEnum { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//在当前访视触发裁判,或者在截止日期小于等于当前访视的阅片期触发裁判
|
||||||
|
[DictionaryTranslateAttribute("YesOrNoAudit")]
|
||||||
|
public bool? IsTrigerJudge { get; set; }
|
||||||
|
|
||||||
|
//(如果是访视点裁判,则仅在所选阅片人对应访视 显示;如果是阅片期裁判,则在所选阅片人 阅片期内的所有访视 显示此原因)
|
||||||
|
public string JudgeNote { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public string VisitNote { get; set; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class TU_TR_RSBaseModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 方案编号 STUDYID
|
||||||
|
/// </summary>
|
||||||
|
public string ResearchProgramNo { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 域 DOMAIN TU TR RS
|
||||||
|
/// </summary>
|
||||||
|
public string Domain { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 取值类型 TUSPID TRSPID RSSPID
|
||||||
|
/// </summary>
|
||||||
|
public string ValueType { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 受试者编号 USUBJID 实际展示TrialSiteSubjectCode
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
public string SubjectCode { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 供应商 TUNAM (Extensive Imaging)
|
||||||
|
/// </summary>
|
||||||
|
public string Vendor { get; set; } = "Extensive Imaging";
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 阅片人 TUEVAL TREVAL RSEVAL
|
||||||
|
/// </summary>
|
||||||
|
public string UserName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 阅片人标识 TUEVALID TREVALID RSEVALID
|
||||||
|
/// </summary>
|
||||||
|
public Arm ArmEnum { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 访视编号 VISITNUM
|
||||||
|
/// </summary>
|
||||||
|
public decimal? VisitNum { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 访视名称 VISIT
|
||||||
|
/// </summary>
|
||||||
|
public string? VisitName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 拍片日期 TUDTC TRDTC RSDTC
|
||||||
|
/// </summary>
|
||||||
|
public DateTime? LatestScanDate { get; set; }
|
||||||
|
|
||||||
|
public DateTime? EarliestScanDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// eCRF标识 TUREFID TRREFID RSREFID
|
||||||
|
/// </summary>
|
||||||
|
public Guid VisitTaskId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
#region 移动位置
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// RSCAT 阅片标准
|
||||||
|
/// </summary>
|
||||||
|
public string CriterionName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// RSACPTFL 裁定标记 TUACPTFL
|
||||||
|
/// </summary>
|
||||||
|
//裁判选择标记
|
||||||
|
//根据裁判的任务结果 设置访视任务的这个字段 该字段表示 裁判认同该任务的结果
|
||||||
|
public bool? IsJudgeSelect { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public DateTime? SignTime { get; set; }
|
||||||
|
|
||||||
|
public string TaskName { get; set; }
|
||||||
|
|
||||||
|
#region 额外翻译字段
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public string IsJudgeSelectStr => IsJudgeSelect == true ? "Y" : "";
|
||||||
|
|
||||||
|
public bool IsTargetPD { get; set; } = false;
|
||||||
|
|
||||||
|
public bool IsOverallResponsePD { get; set; } = false;
|
||||||
|
|
||||||
|
//TR表 靶病灶PD了,访视层级的都是最早拍片日期 RS表 整体肿瘤评估PD了,那么疗效评估的拍片日期都给最早的
|
||||||
|
public bool IsPD => Domain == "TR" ? IsTargetPD : IsOverallResponsePD;
|
||||||
|
|
||||||
|
public string ArmEnumStr { get; set; }
|
||||||
|
public string LatestScanDateStr
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var date = IsPD ? EarliestScanDate : LatestScanDate;
|
||||||
|
return date?.ToString("yyyy-MM-dd") ?? "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public string TrialSiteSubjectCode => ResearchProgramNo + SubjectCode;
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class TU_Export : TU_TR_RSBaseModel
|
||||||
|
{
|
||||||
|
|
||||||
|
///// <summary>
|
||||||
|
///// 取值类型 TUSPID
|
||||||
|
///// </summary>
|
||||||
|
//public string TUValueType { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 序号 TUSEQ (同一个访视,所有阅片人选择病灶给个顺序号)
|
||||||
|
/// </summary>
|
||||||
|
public int No { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 链接ID TULNKID (阅片人角色_病灶编号)不同访视可以重复
|
||||||
|
/// </summary>
|
||||||
|
public string ARM_TumorNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 肿瘤识别简称 TUTESTCD
|
||||||
|
/// </summary>
|
||||||
|
public string TumorIdentificationSimple { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 肿瘤识别全称 TUTEST
|
||||||
|
/// </summary>
|
||||||
|
public string TumorIdentificationFullName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 肿瘤鉴定结果 TUORRES
|
||||||
|
/// </summary>
|
||||||
|
public string TumorIdentificationResult { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 肿瘤识别结果类型 TUSTRESC
|
||||||
|
/// </summary>
|
||||||
|
public string TumorIdentificationResultType { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部位 TULOC (对应病灶表的部位,需要国际化)
|
||||||
|
/// </summary>
|
||||||
|
public string BodyPart { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 鉴定方法 TUMETHOD (Modality?)
|
||||||
|
/// </summary>
|
||||||
|
public string IdentificationMethod { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///// <summary>
|
||||||
|
///// 裁定标记 TUACPTFL
|
||||||
|
///// </summary>
|
||||||
|
//public bool? IsJudgeSelect { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部位描述 LOCTEXT
|
||||||
|
/// </summary>
|
||||||
|
public string BodyPartDes { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class TR_Export : TU_TR_RSBaseModel
|
||||||
|
{
|
||||||
|
|
||||||
|
///// <summary>
|
||||||
|
///// 取值类型 TRSPID
|
||||||
|
///// </summary>
|
||||||
|
//public string TRValueType { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 每个subject 按照顺序编号 TRSEQ
|
||||||
|
/// </summary>
|
||||||
|
public int TRSEQ { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///TRGRPID 组ID 对应TU表肿瘤鉴定结果 TumorIdentificationResult
|
||||||
|
/// </summary>
|
||||||
|
public string TRGRPID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// TRLNKID 链接ID 对应TU表的链接ID TumorNo(阅片人角色_病灶编号)
|
||||||
|
/// </summary>
|
||||||
|
public string ARM_TumorNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///TRLNKGRP 链接组 ARM-任务名(访视名) 对应RS的链接组
|
||||||
|
/// </summary>
|
||||||
|
public string ARM_VisitName { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 肿瘤评估简称 TRTESTCD
|
||||||
|
/// </summary>
|
||||||
|
public string TumorAssessmentSimpleName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 肿瘤评估全称 TRTEST
|
||||||
|
/// </summary>
|
||||||
|
public string TumorAssessmentFullName { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 原始测量 TRORRES
|
||||||
|
/// </summary>
|
||||||
|
public string OriginalMeasurements { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 原始单位 TRORRESU
|
||||||
|
/// </summary>
|
||||||
|
public string OriginalUnit { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 标准结果(字符) TRSTRESC
|
||||||
|
/// </summary>
|
||||||
|
public string StandardResult_Character => OriginalMeasurements;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 标准结果(数值) TRORRESU
|
||||||
|
/// </summary>
|
||||||
|
public string StandardResult_Numeric => double.TryParse(OriginalMeasurements, out _) ||
|
||||||
|
(OriginalMeasurements?.EndsWith("%") == true &&
|
||||||
|
double.TryParse(OriginalMeasurements.TrimEnd('%'), out _))
|
||||||
|
? OriginalMeasurements
|
||||||
|
: "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 标准单位 TRSTRESU
|
||||||
|
/// </summary>
|
||||||
|
public string StandardUnit => OriginalUnit;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 完成状态 TRSTAT
|
||||||
|
/// </summary>
|
||||||
|
public string CompletionStatus { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 完成状态 TRMETHOD
|
||||||
|
/// </summary>
|
||||||
|
public string IdentificationMethod { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 无法测量原因 TRREASND
|
||||||
|
/// </summary>
|
||||||
|
public string NotMeasuredReason { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class RS_Export : TU_TR_RSBaseModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// RSSEQ 按照subject 的数据顺序编号
|
||||||
|
/// </summary>
|
||||||
|
public int RSSEQ { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// RSLNKGRP 链接组 ARM_任务名(访视名)
|
||||||
|
/// </summary>
|
||||||
|
public string ARM_VisitName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// RSTESTCD 疗效评估简称
|
||||||
|
/// </summary>
|
||||||
|
public string EfficacyEvaluationSimpleName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// RSTEST 疗效评估全称
|
||||||
|
/// </summary>
|
||||||
|
public string EfficacyEvaluationName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// RSORRES 响应评估原始结果
|
||||||
|
/// </summary>
|
||||||
|
public string RespondEfficacyAssessment { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// RSSTRESC 标准疗效评估
|
||||||
|
/// </summary>
|
||||||
|
public string StandardEfficacyAssessment => RespondEfficacyAssessment;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// RSSTAT 完成状态
|
||||||
|
/// </summary>
|
||||||
|
public string CompletionStatus { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// RSREASND 无法评估原因
|
||||||
|
/// </summary>
|
||||||
|
public string NotAssessmentReason { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///// <summary>
|
||||||
|
///// 裁定标记 RSACPTFL
|
||||||
|
///// </summary>
|
||||||
|
//public bool? IsJudgeSelect { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// REASASM 评估原因
|
||||||
|
/// </summary>
|
||||||
|
public string AssessmentReason { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// REASOVR 重新评估原因
|
||||||
|
/// </summary>
|
||||||
|
public string ReAssessmentReason { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// REASUPD 更新评估原因
|
||||||
|
/// </summary>
|
||||||
|
public string UpdateAssessmentReason { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public bool? IsOveralResponse { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class CO_Export : TU_TR_RSBaseModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 关联域 RS:(访视点备注) 空:裁判选择原因
|
||||||
|
/// </summary>
|
||||||
|
public string RDOMAIN { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// COSEQ 序号
|
||||||
|
/// </summary>
|
||||||
|
public int COSEQ { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// IDVAR 标识变量 RSSEQ 空:裁判选择原因
|
||||||
|
/// </summary>
|
||||||
|
public string IdentificationVariable { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 标识 IDVARVAL RSSEQ具体的值 空:裁判选择原因
|
||||||
|
/// </summary>
|
||||||
|
public string Identification { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// COREF 备注引用
|
||||||
|
/// </summary>
|
||||||
|
public string RemarksQuote { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 备注 COVAL
|
||||||
|
/// </summary>
|
||||||
|
public string Remarks { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 裁决日期 CODTC
|
||||||
|
/// </summary>
|
||||||
|
public string CODTC { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -2,6 +2,7 @@
|
||||||
using IRaCIS.Application.Contracts;
|
using IRaCIS.Application.Contracts;
|
||||||
using IRaCIS.Core.Application.Contracts;
|
using IRaCIS.Core.Application.Contracts;
|
||||||
using IRaCIS.Core.Application.Helper;
|
using IRaCIS.Core.Application.Helper;
|
||||||
|
using IRaCIS.Core.Application.Service.Common;
|
||||||
using IRaCIS.Core.Application.ViewModel;
|
using IRaCIS.Core.Application.ViewModel;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service
|
namespace IRaCIS.Core.Application.Service
|
||||||
|
|
@ -104,6 +105,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.Subject.TrialSite.TrialSiteCode));
|
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.Subject.TrialSite.TrialSiteCode));
|
||||||
|
|
||||||
|
|
||||||
|
CreateMap<TumorExportBaseModel , TU_Export>();
|
||||||
|
CreateMap<TumorExportBaseModel, TR_Export>();
|
||||||
|
CreateMap<TumorExportBaseModel, RS_Export>();
|
||||||
|
CreateMap<TumorExportBaseModel, CO_Export>();
|
||||||
|
|
||||||
|
CreateMap<IVUS_OCTBaseDto, IvusExportDto>();
|
||||||
|
CreateMap<IVUS_OCTBaseDto, OctExportDto>();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -265,8 +269,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public AddOrUpdateStudyDto Study { get; set; }
|
public AddOrUpdateStudyDto Study { get; set; }
|
||||||
|
|
||||||
[NotDefault]
|
public Guid? VisitTaskId { get; set; }
|
||||||
public Guid VisitTaskId { get; set; }
|
|
||||||
|
public bool? IsImageSegmentLabel { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NewArchiveStudyCommand
|
public class NewArchiveStudyCommand
|
||||||
|
|
@ -440,12 +445,17 @@ 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
|
||||||
{
|
{
|
||||||
[NotDefault]
|
public Guid? VisitTaskId { get; set; }
|
||||||
public Guid VisitTaskId { get; set; }
|
|
||||||
|
public Guid? SubjectVisitId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class IRUploadTaskDicomStudyDto : DicomStudyBasicInfo
|
public class IRUploadTaskDicomStudyDto : DicomStudyBasicInfo
|
||||||
|
|
@ -519,6 +529,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; }
|
||||||
|
|
@ -540,6 +552,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; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -609,6 +625,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; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -629,6 +647,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
|
||||||
|
|
@ -878,4 +898,88 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public Guid TaskId { get; set; }
|
public Guid TaskId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class SubjectVisitMarkQuery:PageInput
|
||||||
|
{
|
||||||
|
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 string SubjectCode { get; set; }
|
||||||
|
|
||||||
|
public int? VisitCount { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public int? MarkVisitCount { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public int? DicomStudyCount { get; set; }
|
||||||
|
|
||||||
|
public int? MarkDicomStudyCount { get; set; }
|
||||||
|
|
||||||
|
public int? NoneDicomStudyCount { get; set; }
|
||||||
|
|
||||||
|
public int? MarkNoneDicomStudyCount { 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 Guid SourceSubjectVisitId { 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;
|
||||||
|
|
||||||
|
//防止前端null 故意返回
|
||||||
|
public Guid VisitTaskId { get; set; }
|
||||||
|
|
||||||
|
public List<StudyBasicInfo> OrginalStudyList { get; set; }
|
||||||
|
|
||||||
|
public List<StudyBasicInfo> UploadStudyList { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -4,6 +4,7 @@
|
||||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
using IRaCIS.Core.Application.Filter;
|
using IRaCIS.Core.Application.Filter;
|
||||||
|
using IRaCIS.Core.Application.Service.Reading.Dto;
|
||||||
using IRaCIS.Core.Domain.Models;
|
using IRaCIS.Core.Domain.Models;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
using Medallion.Threading;
|
using Medallion.Threading;
|
||||||
|
|
@ -34,7 +35,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[FromQuery] Guid? nonedicomStudyId,
|
[FromQuery] Guid? nonedicomStudyId,
|
||||||
[FromQuery] bool isFilterZip,
|
[FromQuery] bool isFilterZip,
|
||||||
[FromQuery] Guid? visitTaskId,
|
[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();
|
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;
|
var isViewDelete = !isQCFinished;
|
||||||
|
|
||||||
IQueryable<NoneDicomStudyView> noneDicomStudyQueryable = default;
|
IQueryable<NoneDicomStudyView> noneDicomStudyQueryable = default;
|
||||||
if (visitTaskId == null)
|
if (visitTaskId == null || visitTaskId == Guid.Empty)
|
||||||
{
|
{
|
||||||
//质控过程中,需要忽略过滤质控设置删除的检查,以及设置删除的文件,质控通过后才
|
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)
|
//质控过程中,需要忽略过滤质控设置删除的检查,以及设置删除的文件,质控通过后才
|
||||||
|
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
|
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 });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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()));
|
||||||
|
|
||||||
|
|
@ -145,7 +150,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.CriterionModalitys, u => u.MapFrom(s => s.TrialReadingCriterion.CriterionModalitys))
|
.ForMember(d => d.CriterionModalitys, u => u.MapFrom(s => s.TrialReadingCriterion.CriterionModalitys))
|
||||||
.ForMember(d => d.SubjectCode, u => u.MapFrom(u => u.IsAnalysisCreate == true ? u.BlindSubjectCode : u.Subject.Code))
|
.ForMember(d => d.SubjectCode, u => u.MapFrom(u => u.IsAnalysisCreate == true ? u.BlindSubjectCode : u.Subject.Code))
|
||||||
.ForMember(d => d.DicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.StudyList))
|
.ForMember(d => d.DicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.StudyList))
|
||||||
.ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.NoneDicomStudyList.Where(t => t.IsReading)));
|
.ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.NoneDicomStudyList.Where(t => t.IsReading)));
|
||||||
|
|
||||||
CreateMap<TrialImageDownload, TrialImageDownloadView>()
|
CreateMap<TrialImageDownload, TrialImageDownloadView>()
|
||||||
.ForMember(d => d.UserFullName, u => u.MapFrom(s => s.CreateUserRole.FullName))
|
.ForMember(d => d.UserFullName, u => u.MapFrom(s => s.CreateUserRole.FullName))
|
||||||
|
|
@ -159,6 +164,24 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
CreateMap<NoneDicomEdit, NoneDicomStudy>();
|
CreateMap<NoneDicomEdit, NoneDicomStudy>();
|
||||||
|
|
||||||
|
|
||||||
|
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)));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,11 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ImageLabelNoneDicomStudyView : NoneDicomStudyView
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
///<summary>NoneDicomStudyQuery 列表查询参数模型</summary>
|
///<summary>NoneDicomStudyQuery 列表查询参数模型</summary>
|
||||||
public class NoneDicomStudyQuery
|
public class NoneDicomStudyQuery
|
||||||
{
|
{
|
||||||
|
|
@ -55,6 +60,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public string Modality { get; set; } = string.Empty;
|
public string Modality { get; set; } = string.Empty;
|
||||||
public DateTime ImageDate { get; set; }
|
public DateTime ImageDate { get; set; }
|
||||||
public string ModifyReason { get; set; }
|
public string ModifyReason { get; set; }
|
||||||
|
|
||||||
|
public string BodyPartForEditOther { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
///<summary> NoneDicomStudyAddOrEdit 列表查询参数模型</summary>
|
///<summary> NoneDicomStudyAddOrEdit 列表查询参数模型</summary>
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ namespace IRaCIS.Core.Application.Contracts.DTO
|
||||||
public string BodyPart { get; set; } = String.Empty;
|
public string BodyPart { get; set; } = String.Empty;
|
||||||
|
|
||||||
public string ModifyReason { get; set; }
|
public string ModifyReason { get; set; }
|
||||||
|
|
||||||
|
public string BodyPartForEditOther { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -755,6 +755,13 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.OrderBy(t => t.CreateTime).ThenBy(t => t.FileName)))
|
.OrderBy(t => t.CreateTime).ThenBy(t => t.FileName)))
|
||||||
.ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode));
|
.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>()
|
CreateMap<SubjectVisitImageBackRecord, ImageBackViewModel>()
|
||||||
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
|
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
@ -19,7 +21,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository,
|
||||||
//IRepository<ReadingCustomTag> _readingCustomTagRepository,
|
//IRepository<ReadingCustomTag> _readingCustomTagRepository,
|
||||||
IRepository<ReadingTaskQuestionMark> _readingTaskQuestionMark,
|
IRepository<ReadingTaskQuestionMark> _readingTaskQuestionMark,
|
||||||
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository,
|
||||||
IRepository<Subject> _subjectRepository,
|
IRepository<Subject> _subjectRepository,
|
||||||
|
|
@ -222,27 +224,42 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
var isImageFilter = false;
|
var isImageFilter = false;
|
||||||
var criterionModalitys = "";
|
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)
|
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;
|
isImageFilter = info.IsImageFilter;
|
||||||
criterionModalitys = info.CriterionModalitys;
|
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()
|
var studyList = await _dicomStudyRepository.Where(t => t.TrialId == trialId && t.SubjectVisitId == sujectVisitId).IgnoreQueryFilters()
|
||||||
.Where(t => isImageFilter ? ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
.Where(t => isImageFilter ? ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
||||||
.WhereIf(isReading == 1 || isQCFinished, s => s.IsDeleted == false)
|
.WhereIf(isReading == 1 || isQCFinished, s => s.IsDeleted == false)
|
||||||
.Select(k => new VisitStudyDTO()
|
//预览靶段标注上传的影像 影像后处理 上传了新的影像 还要原始dsa
|
||||||
{
|
.WhereIf(isImageSegmentLabel == true && isVisitTask && (criterionType == CriterionType.OCT || criterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT")
|
||||||
InstanceCount = k.InstanceCount,
|
.Select(k => new VisitStudyDTO()
|
||||||
Modalities = k.Modalities,
|
{
|
||||||
//SeriesCount = k.SeriesCount,
|
InstanceCount = k.InstanceCount,
|
||||||
StudyCode = k.StudyCode,
|
Modalities = k.Modalities,
|
||||||
StudyId = k.Id
|
//SeriesCount = k.SeriesCount,
|
||||||
}).ToListAsync();
|
StudyCode = k.StudyCode,
|
||||||
|
StudyId = k.Id
|
||||||
|
}).ToListAsync();
|
||||||
|
|
||||||
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
|
|
@ -285,12 +302,29 @@ namespace IRaCIS.Core.Application.Services
|
||||||
t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
|
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 studyList.Where(x => x.SeriesList.Count() > 0).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//return ResponseOutput.Ok(studyList.Where(t => t.SeriesList.Count > 0).ToList());
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -468,62 +502,75 @@ 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
|
||||||
|
|
||||||
//影像后处理 上传了新的影像
|
|
||||||
if (taskInfo.TaskStudyCount > 0)
|
|
||||||
{
|
{
|
||||||
|
t.TrialReadingCriterionId,
|
||||||
|
t.TrialReadingCriterion.CriterionType,
|
||||||
|
t.TrialReadingCriterion.IsImageFilter,
|
||||||
|
t.TrialReadingCriterion.CriterionModalitys,
|
||||||
|
t.ReadingTaskState,
|
||||||
|
|
||||||
var taskStudyList = await _taskStudyRepository.Where(t => t.TrialId == indto.TrialId && t.VisitTaskId == indto.VisitTaskId)
|
//是否有了后处理的dicom检查
|
||||||
.WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))
|
IsHaveTaskStudy = t.TaskStudyList.Any(),
|
||||||
.ProjectTo<VisitStudyDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
//是否有了后处理的NoneDicom检查
|
||||||
|
IsHaveTaskNoneDicomStudyFile = t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(c => c.TaskNoneDicomFileList.Where(t => t.VisitTaskId == indto.VisitTaskId)).Any(),
|
||||||
|
//是否有了标注的dicom检查
|
||||||
|
IsMarkDicomStudy = t.SourceSubjectVisit.TaskStudyList.Any(),
|
||||||
|
//是否有了标注的NoneDicom检查
|
||||||
|
IsMarkNoneDicomStudy = t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(c => c.ImageLabelNoneDicomFileList).Any()
|
||||||
|
|
||||||
foreach (var study in taskStudyList)
|
}).FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#region dicom 检查查询
|
||||||
|
|
||||||
|
//如果是手动生成的标准,需要过滤检查和序列数据
|
||||||
|
|
||||||
|
var isManualGenerate = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == taskInfo.TrialReadingCriterionId && t.IsAutoCreate == false);
|
||||||
|
|
||||||
|
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(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
||||||
|
//影像后处理 上传了新的影像 还要原始dsa
|
||||||
|
.WhereIf(taskInfo.IsHaveTaskStudy
|
||||||
|
&& (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS),
|
||||||
|
t => t.ModalityForEdit == "XA")
|
||||||
|
|
||||||
|
.WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.IsMarkDicomStudy && taskInfo.CriterionType == CriterionType.IVUS,
|
||||||
|
t => t.ModalityForEdit == "XA" )
|
||||||
|
|
||||||
|
.WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.IsMarkDicomStudy && taskInfo.CriterionType == CriterionType.OCT,
|
||||||
|
t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT")
|
||||||
|
|
||||||
|
.WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.IsMarkDicomStudy == false
|
||||||
|
&& (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS),
|
||||||
|
t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" || t.ModalityForEdit == "IVUS")
|
||||||
|
|
||||||
|
//其他 不应该看原始影像
|
||||||
|
.WhereIf(taskInfo.IsHaveTaskStudy && (taskInfo.CriterionType != CriterionType.OCT && taskInfo.CriterionType != CriterionType.IVUS), t => false)
|
||||||
|
.Select(k => new VisitStudyDTO()
|
||||||
{
|
{
|
||||||
study.SeriesList = study.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList();
|
InstanceCount = k.InstanceCount,
|
||||||
|
StudyName = k.StudyName,
|
||||||
|
Modalities = k.Modalities,
|
||||||
|
//SeriesCount = k.SeriesCount,
|
||||||
|
StudyCode = k.StudyCode,
|
||||||
|
StudyId = k.Id,
|
||||||
|
|
||||||
//foreach (var series in study.SeriesList)
|
BodyPartForEdit = k.BodyPartForEdit,
|
||||||
//{
|
BodyPartForEditOther = k.BodyPartForEditOther
|
||||||
// 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);
|
}).ToListAsync();
|
||||||
|
|
||||||
}
|
|
||||||
else
|
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
|
if (studyIds.Count > 0)
|
||||||
{
|
{
|
||||||
#region dicom 检查查询
|
|
||||||
|
|
||||||
//如果是手动生成的标准,需要过滤检查和序列数据
|
|
||||||
|
|
||||||
var isManualGenerate = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == taskInfo.TrialReadingCriterionId && t.IsAutoCreate == false);
|
|
||||||
|
|
||||||
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(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
|
||||||
.Select(k => new VisitStudyDTO()
|
|
||||||
{
|
|
||||||
InstanceCount = k.InstanceCount,
|
|
||||||
StudyName = k.StudyName,
|
|
||||||
Modalities = k.Modalities,
|
|
||||||
//SeriesCount = k.SeriesCount,
|
|
||||||
StudyCode = k.StudyCode,
|
|
||||||
StudyId = k.Id,
|
|
||||||
|
|
||||||
BodyPartForEdit=k.BodyPartForEdit,
|
|
||||||
BodyPartForEditOther=k.BodyPartForEditOther
|
|
||||||
|
|
||||||
|
|
||||||
}).ToListAsync();
|
|
||||||
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
|
|
||||||
|
|
||||||
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();
|
||||||
|
|
||||||
List<DicomSeriesDTO> seriesLists = await _dicomSeriesRepository.Where(s => studyIds.Contains(s.StudyId))
|
List<DicomSeriesDTO> seriesLists = await _dicomSeriesRepository.Where(s => studyIds.Contains(s.StudyId))
|
||||||
.WhereIf(isManualGenerate == false, t => t.IsReading)
|
.WhereIf(isManualGenerate == false, t => t.IsReading)
|
||||||
|
|
@ -561,155 +608,176 @@ namespace IRaCIS.Core.Application.Services
|
||||||
}
|
}
|
||||||
|
|
||||||
studyList.AddRange(dicomStudyList);
|
studyList.AddRange(dicomStudyList);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
//影像后处理 上传了新的影像
|
||||||
|
if (taskInfo.IsHaveTaskStudy || taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy)
|
||||||
|
{
|
||||||
|
|
||||||
#region dicom 关键序列处理
|
var taskStudyList = await _taskStudyRepository.Where(t => t.TrialId == indto.TrialId)
|
||||||
|
.WhereIf(taskInfo.IsHaveTaskStudy, t => t.VisitTaskId == indto.VisitTaskId)
|
||||||
|
.WhereIf(taskInfo.IsHaveTaskStudy == false && (taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy), t => t.SubjectVisitId == indto.SujectVisitId)
|
||||||
|
.WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))
|
||||||
|
.ProjectTo<VisitStudyDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
//已经签名的任务,加关键序列
|
foreach (var study in taskStudyList)
|
||||||
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
|
|
||||||
{
|
{
|
||||||
var rowInfoList = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).OrderBy(x => x.ReadingQuestionTrial.ShowOrder).ThenBy(x => x.RowIndex).Select(x => new StudyInstanceInfo()
|
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
|
||||||
|
|
||||||
|
#region dicom 关键序列处理
|
||||||
|
|
||||||
|
//已经签名的任务,加关键序列
|
||||||
|
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||||
|
{
|
||||||
|
var rowInfoList = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).OrderBy(x => x.ReadingQuestionTrial.ShowOrder).ThenBy(x => x.RowIndex).Select(x => new StudyInstanceInfo()
|
||||||
|
{
|
||||||
|
ShowOrder = x.ReadingQuestionTrial.ShowOrder,
|
||||||
|
RowIndex = x.RowIndex,
|
||||||
|
SeriesId = x.SeriesId,
|
||||||
|
StudyId = x.StudyId,
|
||||||
|
InstanceId = x.InstanceId,
|
||||||
|
NumberOfFrames = x.NumberOfFrames,
|
||||||
|
CreateTime = x.CreateTime,
|
||||||
|
|
||||||
|
}).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
// 这个表的数据已经移动到 _readingTaskQuestionMark 了
|
||||||
|
//var customoList = await _readingCustomTagRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).Select(x => new StudyInstanceInfo()
|
||||||
|
//{
|
||||||
|
// ShowOrder = 0,
|
||||||
|
// RowIndex = 0m,
|
||||||
|
// SeriesId = x.SeriesId,
|
||||||
|
// StudyId = x.StudyId,
|
||||||
|
// InstanceId = x.InstanceId,
|
||||||
|
// NumberOfFrames = x.NumberOfFrames,
|
||||||
|
// CreateTime = x.CreateTime,
|
||||||
|
//}).ToListAsync();
|
||||||
|
//rowInfoList.AddRange(customoList);
|
||||||
|
|
||||||
|
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,
|
||||||
|
RowIndex = 0m,
|
||||||
|
SeriesId = x.SeriesId,
|
||||||
|
StudyId = x.StudyId,
|
||||||
|
InstanceId = x.InstanceId,
|
||||||
|
NumberOfFrames = x.NumberOfFrames,
|
||||||
|
CreateTime = x.CreateTime,
|
||||||
|
}).ToListAsync();
|
||||||
|
rowInfoList.AddRange(questionMarkList);
|
||||||
|
|
||||||
|
var thisStudyIds = rowInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.StudyId).Distinct().ToList();
|
||||||
|
var thisSeriesIdIds = rowInfoList.Where(x => x.SeriesId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.SeriesId).Distinct().ToList();
|
||||||
|
if (rowInfoList.Count > 0)
|
||||||
|
{
|
||||||
|
var thisVisitTaskStudy = await _dicomStudyRepository.Where(t => thisStudyIds.Contains(t.Id)).Select(k => new VisitStudyDTO()
|
||||||
{
|
{
|
||||||
ShowOrder = x.ReadingQuestionTrial.ShowOrder,
|
InstanceCount = k.InstanceCount,
|
||||||
RowIndex = x.RowIndex,
|
|
||||||
SeriesId = x.SeriesId,
|
|
||||||
StudyId = x.StudyId,
|
|
||||||
InstanceId = x.InstanceId,
|
|
||||||
NumberOfFrames = x.NumberOfFrames,
|
|
||||||
CreateTime=x.CreateTime,
|
|
||||||
|
|
||||||
}).ToListAsync();
|
//SeriesCount = k.SeriesCount,
|
||||||
|
|
||||||
|
StudyId = k.Id,
|
||||||
|
IsCriticalSequence = true,
|
||||||
|
|
||||||
// 这个表的数据已经移动到 _readingTaskQuestionMark 了
|
}).FirstOrDefaultAsync();
|
||||||
//var customoList = await _readingCustomTagRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).Select(x => new StudyInstanceInfo()
|
|
||||||
//{
|
|
||||||
// ShowOrder = 0,
|
|
||||||
// RowIndex = 0m,
|
|
||||||
// SeriesId = x.SeriesId,
|
|
||||||
// StudyId = x.StudyId,
|
|
||||||
// InstanceId = x.InstanceId,
|
|
||||||
// NumberOfFrames = x.NumberOfFrames,
|
|
||||||
// CreateTime = x.CreateTime,
|
|
||||||
//}).ToListAsync();
|
|
||||||
//rowInfoList.AddRange(customoList);
|
|
||||||
|
|
||||||
var questionMarkList = await _readingTaskQuestionMark.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).Select(x => new StudyInstanceInfo()
|
if (thisVisitTaskStudy != null)
|
||||||
{
|
{
|
||||||
ShowOrder = x.ReadingQuestionTrial==null?0: x.ReadingQuestionTrial.ShowOrder,
|
thisVisitTaskStudy.StudyId = default(Guid);
|
||||||
RowIndex = 0m,
|
var item = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).
|
||||||
SeriesId = x.SeriesId,
|
ThenBy(s => s.SeriesTime)
|
||||||
StudyId = x.StudyId,
|
.ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
|
||||||
InstanceId = x.InstanceId,
|
|
||||||
NumberOfFrames = x.NumberOfFrames,
|
|
||||||
CreateTime = x.CreateTime,
|
|
||||||
}).ToListAsync();
|
|
||||||
rowInfoList.AddRange(questionMarkList);
|
|
||||||
|
|
||||||
var thisStudyIds = rowInfoList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.StudyId).Distinct().ToList();
|
if (item != null)
|
||||||
var thisSeriesIdIds = rowInfoList.Where(x => x.SeriesId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.SeriesId).Distinct().ToList();
|
|
||||||
if (rowInfoList.Count > 0)
|
|
||||||
{
|
|
||||||
var thisVisitTaskStudy = await _dicomStudyRepository.Where(t => thisStudyIds.Contains(t.Id)).Select(k => new VisitStudyDTO()
|
|
||||||
{
|
{
|
||||||
InstanceCount = k.InstanceCount,
|
item.SeriesInstanceUid = string.Empty;
|
||||||
|
|
||||||
//SeriesCount = k.SeriesCount,
|
var markInstanceIdList = rowInfoList.Where(y => y.InstanceId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(y => y.InstanceId!.Value).Distinct().ToList();
|
||||||
|
|
||||||
StudyId = k.Id,
|
item.InstanceInfoList = await _dicomInstanceRepository.Where(t => markInstanceIdList.Contains(t.Id)).OrderBy(s => s.DicomSerie.SeriesNumber).ThenBy(s => s.DicomSerie.SeriesTime).ThenBy(x => x.InstanceTime).Select(k =>
|
||||||
IsCriticalSequence = true,
|
new InstanceBasicInfo()
|
||||||
|
{
|
||||||
|
Id = k.Id,
|
||||||
|
NumberOfFrames = k.NumberOfFrames,
|
||||||
|
HtmlPath = k.HtmlPath,
|
||||||
|
Path = k.Path,
|
||||||
|
InstanceNumber = k.InstanceNumber,
|
||||||
|
StudyId = k.StudyId,
|
||||||
|
SeriesId = k.SeriesId,
|
||||||
|
FileSize = k.FileSize
|
||||||
|
}).ToListAsync();
|
||||||
|
|
||||||
}).FirstOrDefaultAsync();
|
item.InstanceInfoList.ForEach(x =>
|
||||||
|
|
||||||
if (thisVisitTaskStudy != null)
|
|
||||||
{
|
|
||||||
thisVisitTaskStudy.StudyId = default(Guid);
|
|
||||||
var item = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).
|
|
||||||
ThenBy(s => s.SeriesTime)
|
|
||||||
.ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
|
|
||||||
|
|
||||||
if (item != null)
|
|
||||||
{
|
{
|
||||||
item.SeriesInstanceUid = string.Empty;
|
x.RowDate = rowInfoList.FirstOrDefault(y => y.InstanceId == x.Id)?.CreateTime ?? DateTime.Now;
|
||||||
|
var keyFramesList = rowInfoList.Where(y => y.InstanceId == x.Id && y.NumberOfFrames != 0 && y.NumberOfFrames != null).Select(y => y.NumberOfFrames).Distinct().ToList();
|
||||||
|
|
||||||
var markInstanceIdList = rowInfoList.Where(y => y.InstanceId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(y => y.InstanceId!.Value).Distinct().ToList();
|
if (keyFramesList.Count() > 0)
|
||||||
|
|
||||||
item.InstanceInfoList = await _dicomInstanceRepository.Where(t => markInstanceIdList.Contains(t.Id)).OrderBy(s => s.DicomSerie.SeriesNumber).ThenBy(s => s.DicomSerie.SeriesTime).ThenBy(x => x.InstanceTime).Select(k =>
|
|
||||||
new InstanceBasicInfo()
|
|
||||||
{
|
|
||||||
Id = k.Id,
|
|
||||||
NumberOfFrames = k.NumberOfFrames,
|
|
||||||
HtmlPath = k.HtmlPath,
|
|
||||||
Path = k.Path,
|
|
||||||
InstanceNumber = k.InstanceNumber,
|
|
||||||
StudyId = k.StudyId,
|
|
||||||
SeriesId = k.SeriesId,
|
|
||||||
FileSize = k.FileSize
|
|
||||||
}).ToListAsync();
|
|
||||||
|
|
||||||
item.InstanceInfoList.ForEach(x =>
|
|
||||||
{
|
{
|
||||||
x.RowDate = rowInfoList.FirstOrDefault(y => y.InstanceId == x.Id)?.CreateTime ?? DateTime.Now;
|
x.KeyFramesList = keyFramesList;
|
||||||
var keyFramesList = rowInfoList.Where(y => y.InstanceId == x.Id && y.NumberOfFrames != 0 && y.NumberOfFrames != null).Select(y => y.NumberOfFrames).Distinct().ToList();
|
}
|
||||||
|
|
||||||
if (keyFramesList.Count() > 0)
|
var item = rowInfoList.FirstOrDefault(y => y.InstanceId == x.Id);
|
||||||
{
|
if (item != null)
|
||||||
x.KeyFramesList = keyFramesList;
|
{
|
||||||
}
|
x.ShowOrder = item.ShowOrder;
|
||||||
|
x.RowIndex = item.RowIndex;
|
||||||
|
}
|
||||||
|
|
||||||
var item = rowInfoList.FirstOrDefault(y => y.InstanceId == x.Id);
|
});
|
||||||
if (item != null)
|
|
||||||
{
|
|
||||||
x.ShowOrder = item.ShowOrder;
|
|
||||||
x.RowIndex = item.RowIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
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;
|
||||||
|
|
||||||
item.Description = "Key Series";
|
item.Description = "Key Series";
|
||||||
|
|
||||||
var modalityList = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(x => x.Modality).Distinct().ToListAsync(); ;
|
|
||||||
item.Modality = string.Join(",", modalityList);
|
|
||||||
thisVisitTaskStudy.SeriesList.Add(item);
|
|
||||||
//thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
studyList.Insert(0, thisVisitTaskStudy);
|
|
||||||
|
|
||||||
|
var modalityList = await _dicomSeriesRepository.Where(s => thisSeriesIdIds.Contains(s.Id)).OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(x => x.Modality).Distinct().ToListAsync(); ;
|
||||||
|
item.Modality = string.Join(",", modalityList);
|
||||||
|
thisVisitTaskStudy.SeriesList.Add(item);
|
||||||
|
//thisVisitTaskStudy.SeriesCount = thisVisitTaskStudy.SeriesList.Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
studyList.Insert(0, thisVisitTaskStudy);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
studyList.ForEach(x =>
|
|
||||||
{
|
|
||||||
x.SeriesList.ForEach(y =>
|
|
||||||
{
|
|
||||||
y.IsBeMark = rowInfoList.Any(z => z.SeriesId == y.Id);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
studyList.ForEach(x =>
|
||||||
|
{
|
||||||
|
x.SeriesList.ForEach(y =>
|
||||||
|
{
|
||||||
|
y.IsBeMark = rowInfoList.Any(z => z.SeriesId == y.Id);
|
||||||
|
});
|
||||||
|
|
||||||
#endregion
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region 非Dicom 检查查询
|
#region 非Dicom 检查查询
|
||||||
|
|
||||||
var noDicomList = await _noneDicomStudyRepository.Where(x => x.TrialId == indto.TrialId && x.SubjectVisitId == indto.SujectVisitId && x.NoneDicomFileList.Any(t => !t.FileType.Contains(StaticData.FileType.Zip)))
|
var noDicomList = await _noneDicomStudyRepository.Where(x => x.TrialId == indto.TrialId && x.SubjectVisitId == indto.SujectVisitId && x.NoneDicomFileList.Any(t => !t.FileType.Contains(StaticData.FileType.Zip)))
|
||||||
.Where(t => t.IsReading)
|
.Where(t => t.IsReading)
|
||||||
.WhereIf(taskInfo.IsImageFilter == true, t => taskInfo.CriterionModalitys.Contains(t.Modality)).ToListAsync();
|
.WhereIf(taskInfo.IsImageFilter, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|"))
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
List<VisitStudyDTO> noDicomStudyList = noDicomList.Select(x => new VisitStudyDTO()
|
List<VisitStudyDTO> noDicomStudyList = noDicomList.Select(x => new VisitStudyDTO()
|
||||||
|
|
@ -722,20 +790,22 @@ 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();
|
||||||
|
|
||||||
var isExistTaskNoneDicomFile = _noneDicomStudyFileRepository.Any(t => t.VisitTaskId == indto.VisitTaskId);
|
//var isExistTaskNoneDicomFile = _noneDicomStudyFileRepository.Any(t => t.VisitTaskId == indto.VisitTaskId);
|
||||||
|
|
||||||
foreach (var item in noDicomStudyList)
|
foreach (var item in noDicomStudyList)
|
||||||
{
|
{
|
||||||
var nodicom = noDicomList.Where(x => x.Id == item.StudyId).First();
|
var nodicom = noDicomList.Where(x => x.Id == item.StudyId).First();
|
||||||
|
|
||||||
var instanceCount = await _noneDicomStudyFileRepository.Where(t => t.IsReading)
|
var instanceCount = await _noneDicomStudyFileRepository.Where(t => t.IsReading)
|
||||||
.WhereIf(isExistTaskNoneDicomFile, x => x.OriginNoneDicomStudyId == item.StudyId)
|
.WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile == false && taskInfo.IsMarkNoneDicomStudy == true, x => x.ImageLabelNoneDicomStudyId == item.StudyId)
|
||||||
.WhereIf(isExistTaskNoneDicomFile == false, x => x.NoneDicomStudyId == item.StudyId).CountAsync();
|
.WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile && taskInfo.IsMarkNoneDicomStudy, x => x.OriginNoneDicomStudyId == item.StudyId)
|
||||||
|
.WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile == false && taskInfo.IsMarkNoneDicomStudy == false, x => x.NoneDicomStudyId == item.StudyId)
|
||||||
|
.CountAsync();
|
||||||
|
|
||||||
if (instanceCount == 0)
|
if (instanceCount == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -756,8 +826,10 @@ namespace IRaCIS.Core.Application.Services
|
||||||
SubjectVisitId=nodicom.SubjectVisitId,
|
SubjectVisitId=nodicom.SubjectVisitId,
|
||||||
SubjectId=nodicom.SubjectId,
|
SubjectId=nodicom.SubjectId,
|
||||||
SeriesNumber=1,
|
SeriesNumber=1,
|
||||||
NoneDicomFileFirstFile=await _noneDicomStudyFileRepository.WhereIf(isExistTaskNoneDicomFile,x=>x.OriginNoneDicomStudyId== item.StudyId)
|
NoneDicomFileFirstFile=await _noneDicomStudyFileRepository
|
||||||
.WhereIf(isExistTaskNoneDicomFile==false, x=>x.NoneDicomStudyId == item.StudyId)
|
.WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile == false && taskInfo.IsMarkNoneDicomStudy == true, x => x.ImageLabelNoneDicomStudyId == item.StudyId)
|
||||||
|
.WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile && taskInfo.IsMarkNoneDicomStudy, x => x.OriginNoneDicomStudyId == item.StudyId)
|
||||||
|
.WhereIf(taskInfo.IsHaveTaskNoneDicomStudyFile == false && taskInfo.IsMarkNoneDicomStudy == false, x => x.NoneDicomStudyId == item.StudyId)
|
||||||
.Where(x=> !x.FileType.Contains(StaticData.FileType.Zip)).Select(x=>x.Path).FirstOrDefaultAsync(),
|
.Where(x=> !x.FileType.Contains(StaticData.FileType.Zip)).Select(x=>x.Path).FirstOrDefaultAsync(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,18 @@ public class ReadingTableAnswerRowInfo : BaseFullDeleteAuditEntity
|
||||||
[ForeignKey("InstanceId")]
|
[ForeignKey("InstanceId")]
|
||||||
public DicomInstance Instance { get; set; }
|
public DicomInstance Instance { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
[ForeignKey("SeriesId")]
|
||||||
|
public DicomSeries DicomSeries { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// studyId 关联 dicom 和非dicom ,这里为了查询方便,默认查询非dicom dicom 通过序列查询
|
||||||
|
/// </summary>
|
||||||
|
[JsonIgnore]
|
||||||
|
[ForeignKey("StudyId")]
|
||||||
|
public NoneDicomStudy NoneDicomStudy { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
[ForeignKey("OrganInfoId")]
|
[ForeignKey("OrganInfoId")]
|
||||||
public OrganInfo OrganInfo { get; set; }
|
public OrganInfo OrganInfo { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -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; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -262,7 +262,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
var entity = item.Entity as ReadingImportFile;
|
var entity = item.Entity as ReadingImportFile;
|
||||||
|
|
||||||
|
|
||||||
var visitTaskInfo = await _dbContext.VisitTask.Where(x => x.Id == entity.VisitTaskId).Include(x=>x.DoctorUser).FirstOrDefaultAsync();
|
var visitTaskInfo = await _dbContext.VisitTask.Where(x => x.Id == entity.VisitTaskId).Include(x => x.DoctorUser).FirstOrDefaultAsync();
|
||||||
|
|
||||||
await InsertInspection<ReadingImportFile>(entity, type, x => new InspectionConvertDTO()
|
await InsertInspection<ReadingImportFile>(entity, type, x => new InspectionConvertDTO()
|
||||||
{
|
{
|
||||||
|
|
@ -2533,20 +2533,35 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
|
|
||||||
var extraIdentification = string.Empty;
|
var extraIdentification = string.Empty;
|
||||||
|
|
||||||
Arm armEnum = Arm.SingleReadingArm;
|
|
||||||
|
Guid? subjectVisitId = null;
|
||||||
|
|
||||||
|
Arm? armEnum = Arm.SingleReadingArm;
|
||||||
if (entity.VisitTaskId != null)
|
if (entity.VisitTaskId != null)
|
||||||
{
|
{
|
||||||
extraIdentification = "/VisitTask";
|
extraIdentification = "/VisitTask";
|
||||||
armEnum = await _dbContext.VisitTask.Where(x => x.Id == entity.VisitTaskId).Select(x => x.ArmEnum).FirstOrDefaultAsync();
|
var obj = await _dbContext.VisitTask.Where(x => x.Id == entity.VisitTaskId).Select(x => new { x.ArmEnum, x.SourceSubjectVisitId }).FirstOrDefaultAsync();
|
||||||
|
armEnum = obj?.ArmEnum;
|
||||||
|
subjectVisitId = obj.SourceSubjectVisitId;
|
||||||
}
|
}
|
||||||
|
else if (entity.ImageLabelNoneDicomStudyId != null)
|
||||||
|
{
|
||||||
|
//默认R0
|
||||||
|
extraIdentification = "/VisitTask";
|
||||||
|
|
||||||
//var noneDicomStudy = await _dbContext.NoneDicomStudy.FindAsync(entity.NoneDicomStudyId);
|
subjectVisitId = await _dbContext.NoneDicomStudy.Where(x => x.Id == entity.ImageLabelNoneDicomStudyId).Select(t => t.SubjectVisitId).FirstOrDefaultAsync();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
subjectVisitId = (await _dbContext.NoneDicomStudy.FindAsync(entity.NoneDicomStudyId))?.SubjectVisitId;
|
||||||
|
}
|
||||||
|
|
||||||
await InsertInspection<NoneDicomStudyFile>(item.Entity as NoneDicomStudyFile, type, x => new InspectionConvertDTO()
|
await InsertInspection<NoneDicomStudyFile>(item.Entity as NoneDicomStudyFile, type, x => new InspectionConvertDTO()
|
||||||
{
|
{
|
||||||
//SubjectVisitId = noneDicomStudy.SubjectVisitId,
|
SubjectVisitId = subjectVisitId,
|
||||||
//SubjectId = noneDicomStudy.SubjectId,
|
//SubjectId = noneDicomStudy.SubjectId,
|
||||||
ObjectRelationParentId = x.VisitTaskId,
|
VisitTaskId= x.VisitTaskId,
|
||||||
|
ObjectRelationParentId = subjectVisitId,
|
||||||
ObjectRelationParentId2 = x.NoneDicomStudyId,
|
ObjectRelationParentId2 = x.NoneDicomStudyId,
|
||||||
ObjectRelationParentId3 = x.OriginNoneDicomStudyId,
|
ObjectRelationParentId3 = x.OriginNoneDicomStudyId,
|
||||||
ExtraIndentification = extraIdentification
|
ExtraIndentification = extraIdentification
|
||||||
|
|
@ -3696,7 +3711,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
|
|
||||||
string questionName = string.Empty;
|
string questionName = string.Empty;
|
||||||
string questionAnswer = string.Empty;
|
string questionAnswer = string.Empty;
|
||||||
if (thisQuestinonAnswer != null&& question!=null)
|
if (thisQuestinonAnswer != null && question != null)
|
||||||
{
|
{
|
||||||
questionName = _userInfo.IsEn_Us ? question.QuestionEnName : question.QuestionName;
|
questionName = _userInfo.IsEn_Us ? question.QuestionEnName : question.QuestionName;
|
||||||
questionAnswer = Translationunit(question.Type, question.Unit, question.CustomUnit, unitDataList, thisQuestinonAnswer.Answer);
|
questionAnswer = Translationunit(question.Type, question.Unit, question.CustomUnit, unitDataList, thisQuestinonAnswer.Answer);
|
||||||
|
|
@ -3857,7 +3872,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
||||||
|
|
||||||
entity.OrderMark = await _dbContext.ReadingQuestionTrial.Where(x => x.Id == entity.QuestionId).Select(x => x.OrderMark).FirstOrDefaultAsync();
|
entity.OrderMark = await _dbContext.ReadingQuestionTrial.Where(x => x.Id == entity.QuestionId).Select(x => x.OrderMark).FirstOrDefaultAsync();
|
||||||
|
|
||||||
entity.RowMark = entity.OrderMark+ entity.RowIndex.GetLesionMark();
|
entity.RowMark = entity.OrderMark + entity.RowIndex.GetLesionMark();
|
||||||
|
|
||||||
|
|
||||||
string extraIdentification = string.Empty;
|
string extraIdentification = string.Empty;
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public class DicomInstanceConfigration : IEntityTypeConfiguration<DicomInstance>
|
||||||
{
|
{
|
||||||
builder.HasKey(e => e.SeqId);
|
builder.HasKey(e => e.SeqId);
|
||||||
|
|
||||||
builder.HasOne(e => e.DicomStudy).WithMany(c=>c.InstanceList).HasForeignKey(t=>t.StudyId).HasPrincipalKey(st => st.Id);
|
builder.HasOne(e => e.DicomStudy).WithMany(c => c.InstanceList).HasForeignKey(t => t.StudyId).HasPrincipalKey(st => st.Id);
|
||||||
|
|
||||||
builder.HasMany(s => s.ReadingTableAnswerRowInfoList).WithOne(di => di.Instance).HasForeignKey(t => t.InstanceId).HasPrincipalKey(se => se.Id);
|
builder.HasMany(s => s.ReadingTableAnswerRowInfoList).WithOne(di => di.Instance).HasForeignKey(t => t.InstanceId).HasPrincipalKey(se => se.Id);
|
||||||
|
|
||||||
|
|
@ -76,7 +76,7 @@ public class TaskInstanceConfigration : IEntityTypeConfiguration<TaskInstance>
|
||||||
{
|
{
|
||||||
builder.HasKey(e => e.SeqId);
|
builder.HasKey(e => e.SeqId);
|
||||||
|
|
||||||
builder.HasOne(e => e.TaskStudy).WithMany(t=>t.InstanceList).HasForeignKey(t => t.StudyId).HasPrincipalKey(st => st.Id);
|
builder.HasOne(e => e.TaskStudy).WithMany(t => t.InstanceList).HasForeignKey(t => t.StudyId).HasPrincipalKey(st => st.Id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -112,6 +112,18 @@ public class SCPInstanceConfigration : IEntityTypeConfiguration<SCPInstance>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class ReadingTableAnswerRowInfoConfigration : IEntityTypeConfiguration<ReadingTableAnswerRowInfo>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<ReadingTableAnswerRowInfo> builder)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
builder.HasOne(e => e.DicomSeries).WithMany().HasForeignKey(t => t.SeriesId).HasPrincipalKey(st => st.Id);
|
||||||
|
|
||||||
|
//builder.HasOne(e => e.Instance).WithMany().HasForeignKey(t => t.InstanceId).HasPrincipalKey(st => st.Id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3538,6 +3538,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");
|
||||||
|
|
||||||
|
|
@ -3563,6 +3566,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");
|
||||||
|
|
@ -10570,6 +10575,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)
|
||||||
|
|
@ -10605,6 +10613,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");
|
||||||
|
|
@ -10927,6 +10937,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");
|
||||||
|
|
||||||
|
|
@ -10950,6 +10963,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("项目阅片 - 任务后上传序列");
|
||||||
|
|
@ -11100,6 +11115,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");
|
||||||
|
|
||||||
|
|
@ -11123,6 +11141,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 =>
|
||||||
|
|
@ -11980,6 +12000,42 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
b.ToTable("TrialCriterionDictionaryCode");
|
b.ToTable("TrialCriterionDictionaryCode");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialCriterionKeyFile", b =>
|
||||||
|
{
|
||||||
|
b.Property<Guid>("Id")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreateTime")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<Guid>("CreateUserId")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<string>("FileName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(400)
|
||||||
|
.HasColumnType("nvarchar(400)");
|
||||||
|
|
||||||
|
b.Property<string>("FilePath")
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(400)
|
||||||
|
.HasColumnType("nvarchar(400)");
|
||||||
|
|
||||||
|
b.Property<Guid>("TrialCriterionId")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("CreateUserId");
|
||||||
|
|
||||||
|
b.HasIndex("TrialCriterionId");
|
||||||
|
|
||||||
|
b.ToTable("TrialCriterionKeyFile", t =>
|
||||||
|
{
|
||||||
|
t.HasComment("项目标准阅片关键点文件");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDicomAE", b =>
|
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDicomAE", b =>
|
||||||
{
|
{
|
||||||
b.Property<Guid>("Id")
|
b.Property<Guid>("Id")
|
||||||
|
|
@ -16221,6 +16277,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")
|
||||||
|
|
@ -16237,6 +16297,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");
|
||||||
|
|
@ -18315,8 +18377,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");
|
||||||
|
|
@ -18395,8 +18463,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");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -18414,6 +18488,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")
|
||||||
|
|
@ -18424,6 +18502,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
|
||||||
b.Navigation("Subject");
|
b.Navigation("Subject");
|
||||||
|
|
||||||
|
b.Navigation("SubjectVisit");
|
||||||
|
|
||||||
b.Navigation("VisitTask");
|
b.Navigation("VisitTask");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -18675,6 +18755,25 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
b.Navigation("TrialReadingCriterion");
|
b.Navigation("TrialReadingCriterion");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialCriterionKeyFile", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("CreateUserId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", "TrialReadingCriterion")
|
||||||
|
.WithMany("KeyFileList")
|
||||||
|
.HasForeignKey("TrialCriterionId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("CreateUserRole");
|
||||||
|
|
||||||
|
b.Navigation("TrialReadingCriterion");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDicomAE", b =>
|
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TrialDicomAE", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
|
b.HasOne("IRaCIS.Core.Domain.Models.UserRole", "CreateUserRole")
|
||||||
|
|
@ -19973,6 +20072,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");
|
||||||
|
|
@ -20021,6 +20122,8 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
|
||||||
modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", b =>
|
modelBuilder.Entity("IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial", b =>
|
||||||
{
|
{
|
||||||
|
b.Navigation("KeyFileList");
|
||||||
|
|
||||||
b.Navigation("TrialClinicalDataSetCriterionList");
|
b.Navigation("TrialClinicalDataSetCriterionList");
|
||||||
|
|
||||||
b.Navigation("TrialCriterionAdditionalAssessmentTypeList");
|
b.Navigation("TrialCriterionAdditionalAssessmentTypeList");
|
||||||
|
|
@ -20129,6 +20232,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");
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson;
|
using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
|
|
@ -75,6 +76,13 @@ namespace IRaCIS.Core.Infrastructure.Extention
|
||||||
|
|
||||||
foreach (PropertyInfo property in properties)
|
foreach (PropertyInfo property in properties)
|
||||||
{
|
{
|
||||||
|
//质控导出需要集合
|
||||||
|
// if (typeof(IEnumerable).IsAssignableFrom(property.PropertyType)
|
||||||
|
//&& property.PropertyType != typeof(string))
|
||||||
|
// {
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
|
||||||
string propertyName = property.Name;
|
string propertyName = property.Name;
|
||||||
object propertyValue = property.GetValue(obj);
|
object propertyValue = property.GetValue(obj);
|
||||||
// 如果属性的类型是枚举,将其值保留为整数
|
// 如果属性的类型是枚举,将其值保留为整数
|
||||||
|
|
|
||||||
|
|
@ -306,6 +306,15 @@ public static class StaticData
|
||||||
|
|
||||||
public const string SystenMedicalQCQuestionsList_Export = "SystenMedicalQCQuestionsList_Export";
|
public const string SystenMedicalQCQuestionsList_Export = "SystenMedicalQCQuestionsList_Export";
|
||||||
|
|
||||||
|
//一致性全量核查导出
|
||||||
|
public const string TrialConsistentFUllCheckList_Export = "TrialConsistentFUllCheckList_Export";
|
||||||
|
|
||||||
|
public const string TumorCDISC_Export = "TumorCDISC_Export";
|
||||||
|
|
||||||
|
public const string IVUS_CDISC_Export = "IVUS_CDISC_Export";
|
||||||
|
|
||||||
|
public const string OCT_CDISC_Export = "OCT_CDISC_Export";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue