From 9158f28998272d0d6946e5f1c07f4f5e08110ef9 Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Tue, 25 Nov 2025 09:56:51 +0800
Subject: [PATCH 01/13] =?UTF-8?q?=E5=8C=BB=E5=AD=A6=E5=AE=A1=E6=A0=B8?=
=?UTF-8?q?=E5=AF=B9=E8=AF=9D=E5=AF=BC=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../IRaCIS.Core.Application.xml | 13 ++
.../Service/Common/ExcelExportService.cs | 160 ++++++++++++++++++
.../Service/QC/DTO/QCListViewModel.cs | 8 +
.../Service/QC/_MapConfig.cs | 5 +-
.../Reading/Dto/ReadingMedicalReviewDto.cs | 2 +
5 files changed, 186 insertions(+), 2 deletions(-)
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 2fbc18fdc..12edfd5d1 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -900,6 +900,14 @@
+
+
+ 获取医学审核对话拼接内容
+
+
+
+
+
影像下载记录表
@@ -9187,6 +9195,11 @@
任务Id
+
+
+ 单位
+
+
保存表格问题标记
diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
index 82f8a9eb3..6d302a3f4 100644
--- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
+++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
@@ -22,6 +22,8 @@ using System.ComponentModel.Design;
using System.Globalization;
using System.IO;
using System.Linq;
+using System.Reflection;
+using System.Text;
using static IRaCIS.Core.Application.Service.ExcelExportHelper;
using IDictionaryService = IRaCIS.Application.Interfaces.IDictionaryService;
using TrialIdentityUser = IRaCIS.Core.Domain.Models.TrialIdentityUser;
@@ -32,6 +34,8 @@ namespace IRaCIS.Core.Application.Service.Common
[ApiExplorerSettings(GroupName = "Common")]
public class ExcelExportService(IRepository _trialUserRoleRepository,
IRepository _visitTaskRepository,
+ IRepository _dictionaryRepository,
+ IRepository _internationalizationRepository,
IRepository _readingQuestionCriterionTrialRepository,
IRepository _systemDocNeedConfirmedUserTypeRepository,
IRepository _dicomStudyRepository,
@@ -1758,6 +1762,80 @@ namespace IRaCIS.Core.Application.Service.Common
var list = taskMedicalReviewQueryable.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
+ #region 处理翻译对话 by he wen tao
+
+ Dictionary i18NKeys = new Dictionary()
+ {
+ { "Msg1","trials:medicalFeedback:message:msg1"},
+ { "Msg2","trials:medicalFeedback:message:msg2"},
+ { "Msg3","trials:medicalFeedback:message:msg3"},
+ { "Msg4", "trials:medicalFeedback:message:msg4"},
+ { "Msg5", "trials:medicalFeedback:message:msg5"},
+ { "CloseReasonEnum", "trials:medicalFeedback:title:closeReasonEnum"},
+ { "IsEndorse", "trials:medicalFeedback:title:isEndorse"},
+ { "Reason", "trials:medicalFeedback:title:reason"},
+ { "IsRequestReread", "trials:medicalFeedback:title:isRequestReread"},
+ };
+
+ var i18Values = i18NKeys.Select(x => x.Value).ToList();
+ var i18nList = await _internationalizationRepository.Where(x => i18Values.Contains(x.Code))
+ .Select(x => new
+ {
+ Code = x.Code,
+ Value = _userInfo.IsEn_Us ? x.Value : x.ValueCN
+ }).ToListAsync();
+
+ List dictionaryCodeList = new List()
+ {
+ "AuditAdvice",
+ "MedicalDialogCloseEnum",
+ "MedicalReviewDoctorUserIdea",
+ "YesOrNo",
+ };
+
+ var dictionadParents = await _dictionaryRepository.Where(x => dictionaryCodeList.Contains(x.Parent.Code))
+ .Select(x => new
+ {
+ ParentCode = x.Parent.Code,
+ Code = x.Code,
+ Value = _userInfo.IsEn_Us ? x.Value : x.ValueCN
+ }).ToListAsync();
+
+ JointMedicalReviewI18n i18N = new JointMedicalReviewI18n() { };
+ foreach (var kv in i18NKeys)
+ {
+ PropertyInfo? pi = i18N.GetType().GetProperty(kv.Key);
+ if (pi != null && pi.CanWrite)
+ {
+ var value = i18nList.Where(x => x.Code == kv.Value).Select(x => x.Value).FirstOrDefault() ?? string.Empty;
+ object safeValue = Convert.ChangeType(value, pi.PropertyType);
+ pi.SetValue(i18N, safeValue);
+ }
+ }
+ foreach (var item in dictionaryCodeList)
+ {
+ PropertyInfo? pi = i18N.GetType().GetProperty(item);
+ if (pi != null && pi.CanWrite)
+ {
+ var value = dictionadParents.Where(x => x.ParentCode == item).ToDictionary(x => x.Code, x => x.Value);
+ object safeValue = Convert.ChangeType(value, pi.PropertyType);
+ pi.SetValue(i18N, safeValue);
+ }
+ }
+
+
+ foreach (var item in list)
+ {
+ foreach (var dialog in item.DialogList)
+ {
+ dialog.ResultContent = JointMedicalReviewDialog(dialog, i18N);
+ }
+ }
+
+
+ #endregion
+
+
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
@@ -1767,6 +1845,88 @@ namespace IRaCIS.Core.Application.Service.Common
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TaskMedicalReviewExportDto));
}
+ ///
+ /// 获取医学审核对话拼接内容
+ ///
+ ///
+ ///
+ ///
+ private string JointMedicalReviewDialog(GetMedicalReviewDialogOutDto record, JointMedicalReviewI18n i18NAndDic)
+ {
+ StringBuilder str = new StringBuilder() { };
+ var userTypes = new List() { 14, 30 };
+
+ // 这里userTypes.Contains(record.UserTypeEnumInt) 可以提出来 但是还是按照前端写吧 免得不好对照
+
+ // v-if="[14, 30].includes(record.UserTypeEnumInt) && record.Questioning
+ if (userTypes.Contains(record.UserTypeEnumInt) && record.Questioning.IsNotNullOrEmpty())
+ {
+ //
+ str.AppendLine(i18NAndDic.Msg1);
+
+ str.AppendLine(record.Questioning);
+
+ if (record.FileList.Count() > 0)
+ {
+ str.AppendLine(i18NAndDic.Msg2);
+ record.FileList.ForEach(x =>
+ {
+ str.AppendLine(x.FileName);
+ });
+ }
+
+ str.AppendLine(i18NAndDic.Msg3);
+
+ str.AppendLine(i18NAndDic.AuditAdvice[record.AuditAdviceEnum.GetEnumInt()]);
+
+ str.AppendLine(i18NAndDic.Msg4);
+ }
+
+ //v-if="[14, 30].includes(record.UserTypeEnumInt) && record.MedicalDialogCloseEnum!== null"
+ if (userTypes.Contains(record.UserTypeEnumInt) && record.MedicalDialogCloseEnum != null)
+ {
+ str.AppendLine(i18NAndDic.CloseReasonEnum + i18NAndDic.MedicalDialogCloseEnum[record.MedicalDialogCloseEnum.Value.GetEnumInt()]);
+ }
+
+ // v-if="[14, 30].includes(record.UserTypeEnumInt) && record.Content
+ if (userTypes.Contains(record.UserTypeEnumInt) && record.Content.IsNotNullOrEmpty())
+ {
+ str.AppendLine(record.Content);
+ }
+
+ // v-if="[13].includes(record.UserTypeEnumInt)"
+
+ if (13 == record.UserTypeEnumInt)
+ {
+ str.AppendLine(i18NAndDic.IsEndorse + i18NAndDic.MedicalReviewDoctorUserIdea[record.DoctorUserIdeaEnum.GetEnumInt()]);
+
+ // v-if="record.DoctorUserIdeaEnum===2"
+ if ((int)record.DoctorUserIdeaEnum == 2)
+ {
+ str.AppendLine(i18NAndDic.Reason + record.DisagreeReason);
+ }
+
+ // record.MedicalDialogCloseEnum!== null
+
+ if (record.MedicalDialogCloseEnum != null)
+ {
+ str.AppendLine(i18NAndDic.IsRequestReread + i18NAndDic.YesOrNo[record.IsApplyHeavyReading.ToString()]);
+ }
+
+ // v-if="record.FileList && record.FileList.length > 0"
+
+ if (record.FileList.Count() > 0)
+ {
+ record.FileList.ForEach(x =>
+ {
+ str.AppendLine(x.FileName);
+ });
+ }
+ }
+
+ return str.ToString();
+
+ }
///
/// 影像下载记录表
diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
index 526f366ab..1c2629107 100644
--- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
+++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
@@ -1,6 +1,7 @@
using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson;
using IRaCIS.Core.Application.Contracts.DTO;
using IRaCIS.Core.Application.Helper;
+using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Domain.Share;
using MiniExcelLibs.Attributes;
using Newtonsoft.Json;
@@ -989,6 +990,13 @@ namespace IRaCIS.Core.Application.Contracts
///
[DictionaryTranslateAttribute("YesOrNo")]
public bool IsInvalid { get; set; }
+
+
+
+ public List DialogList { get; set; }
+
+ public string DialogStr => string.Join("\n\n", DialogList.OrderBy(t => t.CreateTime).Select(c => c.CreateUserName + " (" + ExportExcelConverterDate.DateTimeInternationalToString(c.CreateTime) + ") :" + c.ResultContent));
+
}
public class TrialImageDownloadExportDto
diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
index 3af58e72a..f94b1bb1f 100644
--- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
@@ -179,13 +179,14 @@ namespace IRaCIS.Core.Application.Service
.ForMember(o => o.MedicalNo, t => t.MapFrom(u => u.VisitTask.Subject.MedicalNo))
.ForMember(o => o.DoctorUserName, t => t.MapFrom(u => u.VisitTask.DoctorUser.UserName))
.ForMember(o => o.MedicalManagerUserName, t => t.MapFrom(u => u.MedicalManagerUser.UserName))
- .ForMember(o => o.QuestionContent, t => t.MapFrom(u => string.Join("\n\n", u.ReadingMedicalReviewDialogList.Where(t => t.IsHaveQuestion).Select(t => t.Questioning))));
+ .ForMember(o => o.QuestionContent, t => t.MapFrom(u => string.Join("\n\n", u.ReadingMedicalReviewDialogList.Where(t => t.IsHaveQuestion).Select(t => t.Questioning))))
+ .ForMember(o => o.DialogList, t => t.MapFrom(u => u.ReadingMedicalReviewDialogList));
CreateMap()
.ForMember(o => o.TrialReadingCriterionName, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionName))
.ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.IsSelfAnalysis == true ? u.BlindTrialSiteCode : u.Subject.TrialSite.TrialSiteCode))
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code))
-
+
;
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicalReviewDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicalReviewDto.cs
index 4f7939d5a..b50c85548 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicalReviewDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicalReviewDto.cs
@@ -343,6 +343,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public List FileList { get; set; } = new List();
+ //存储最后翻译的内容
+ public string ResultContent { get; set; }
}
From f19fc0e92f98154362c77b9c861453ecfc550be1 Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Thu, 27 Nov 2025 10:56:05 +0800
Subject: [PATCH 02/13] =?UTF-8?q?ivus-=E5=AF=BC=E8=A1=A8=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Attribute/DictionaryTranslateAttribute.cs | 12 +
.../Service/Common/ExcelExportService.cs | 5 +
.../Service/Common/IVUS_OCTExportService.cs | 1017 +++++++++++++++++
.../Service/Common/_MapConfig.cs | 4 +
IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 29 +-
.../_IRaCIS/ObjectExtension.cs | 7 +
.../_IRaCIS/_Config/_StaticData.cs | 4 +
7 files changed, 1077 insertions(+), 1 deletion(-)
create mode 100644 IRaCIS.Core.Application/Service/Common/IVUS_OCTExportService.cs
diff --git a/IRaCIS.Core.Application/Helper/FileDocProcess/Attribute/DictionaryTranslateAttribute.cs b/IRaCIS.Core.Application/Helper/FileDocProcess/Attribute/DictionaryTranslateAttribute.cs
index 051b72909..e54a72747 100644
--- a/IRaCIS.Core.Application/Helper/FileDocProcess/Attribute/DictionaryTranslateAttribute.cs
+++ b/IRaCIS.Core.Application/Helper/FileDocProcess/Attribute/DictionaryTranslateAttribute.cs
@@ -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;
+
+ }
+ }
}
diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
index 6d302a3f4..203ec15a3 100644
--- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
+++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
@@ -2765,6 +2765,11 @@ namespace IRaCIS.Core.Application.Service.Common
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_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 });
}
if (criterion.CriterionGroup != CriterionGroup.Tumor)
diff --git a/IRaCIS.Core.Application/Service/Common/IVUS_OCTExportService.cs b/IRaCIS.Core.Application/Service/Common/IVUS_OCTExportService.cs
new file mode 100644
index 000000000..8796c4f77
--- /dev/null
+++ b/IRaCIS.Core.Application/Service/Common/IVUS_OCTExportService.cs
@@ -0,0 +1,1017 @@
+using IRaCIS.Application.Contracts;
+using IRaCIS.Application.Interfaces;
+using IRaCIS.Core.Application.Helper;
+using IRaCIS.Core.Application.ViewModel;
+using IRaCIS.Core.Domain.Share;
+using IRaCIS.Core.Infra.EFCore.Common;
+using IRaCIS.Core.Infrastructure.Extention;
+using MassTransit;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Mvc;
+using MiniExcelLibs;
+using MiniExcelLibs.OpenXml;
+using NPOI.SS.Formula.Functions;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IRaCIS.Core.Application.Service.Common;
+
+#region 模型
+
+///
+/// 公共影像导表基类(IVUS / OCT 通用)
+///
+public class IVUS_OCTBaseDto
+{
+ /// 研究标识符
+ public string ResearchProgramNo { get; set; }
+
+ /// 中心编号
+ public string TrialSiteCode { get; set; }
+
+ /// 受试者标识符
+ public string SubjectCode { get; set; }
+
+ /// 受试者唯一标识
+ public string USUBJID => ResearchProgramNo + "_" + SubjectCode;
+
+ /// 访视名称
+ public string? VisitName { get; set; }
+
+ /// 阅片人角色
+ [DictionaryTranslateAttribute("ArmEnum")]
+ public Arm ArmEnum { get; set; }
+
+ /// 拍片日期
+ [DateTimeTranaslateAttribute("yyyy-MM-dd")]
+ public DateTime? LatestScanDate { get; set; }
+
+ [DateTimeTranaslateAttribute("yyyy-MM-dd")]
+ public DateTime? EarliestScanDate { get; set; }
+
+ /// 阅片完成时间
+ [DateTimeTranaslateAttribute("yyyy-MM-dd")]
+ public DateTime? SignTime { get; set; }
+
+ ///
+ /// 访视编号 VISITNUM
+ ///
+ public decimal? VisitNum { get; set; }
+
+ public string TaskName { get; set; }
+
+ public string UserName { get; set; }
+
+ public Guid VisitTaskId { get; set; }
+
+ public string CriterionName { get; set; }
+ #region 查询 导出
+ public List LesionList { get; set; } = new List();
+
+ public List QuestionAnswerList { get; set; }
+
+ public List GlobalResultList { get; set; }
+
+
+ public DateTime? JudgeSignTime { get; set; }
+
+ public Guid? SourceSubjectVisitId { get; set; }
+
+ public List SubjectCriterionReadingPeriodVisitNumList { get; set; }
+
+ public decimal VisitTaskNum { get; set; }
+
+ public ReadingTaskState ReadingTaskState { get; set; }
+
+ public ReadingCategory ReadingCategory { get; set; }
+
+ //裁判选择标记 裁判结果选择的访视或者全局任务Id
+ [DictionaryTranslateAttribute("ArmEnum")]
+ public Arm? JudgeArmEnum { get; set; }
+ [DictionaryTranslate("YesOrNo")]
+ public bool? IsJudgeSelect { get; set; }
+ //在当前访视触发裁判,或者在截止日期小于等于当前访视的阅片期触发裁判
+ [DictionaryTranslate("YesOrNo")]
+ public bool? IsTrigerJudge { get; set; }
+
+ //裁判选择原因(如果是访视点裁判,则仅在所选阅片人对应访视 显示;如果是阅片期裁判,则在所选阅片人 阅片期内的所有访视 显示此原因)
+ public string JudgeNote { get; set; } = string.Empty;
+ /// 访视点备注
+ public string VisitNote { get; set; }
+
+ #endregion
+
+
+}
+
+
+///
+/// IVUS 导表模型
+///
+public class IvusExportDto : IVUS_OCTBaseDto
+{
+ /// 靶段
+ public string TARGETV { get; set; }
+
+ /// 斑块编号
+ public string PLAQUE { get; set; }
+
+ /// 外弹力膜面积
+ public string EEM { get; set; }
+
+ /// 管腔面积
+ public string LUMEN { get; set; }
+
+ /// 外弹力膜与管腔面积差值
+ public string PA { get; set; }
+
+ /// 回撤中的图像帧数
+ public string PFC { get; set; }
+
+ /// 分析图像帧数
+ public string FC { get; set; }
+
+ /// 总外弹力膜面积 (如无可不填)
+ public string TOTALEEM { get; set; }
+
+ /// 总 PA (如无可不填)
+ public string TOTALPA { get; set; }
+
+ /// PAV (如无可不填)
+ public string PAV { get; set; }
+}
+
+///
+/// OCT 导表模型
+///
+public class OctExportDto : IVUS_OCTBaseDto
+{
+ /// 靶段
+ public string TARGETV { get; set; }
+
+ /// 斑块编号
+ public string PLAQUE { get; set; }
+
+ /// 测量标识
+ public string TestID { get; set; }
+
+ /// 测量参数名称
+ public string TESTCD { get; set; }
+
+ /// 测量参数值
+ public string ORRES { get; set; }
+
+ /// 测量值单位
+ public string ORRESU { get; set; }
+
+ /// 斑块类型
+ public string PLATYPE { get; set; }
+
+ /// 最小纤维帽厚度
+ public string MINFCT { get; set; }
+
+ /// 平均纤维帽厚度
+ public string AVGMFCT { get; set; }
+
+ /// 脂质角度平均值
+ public string LAMEAN { get; set; }
+
+ /// 脂质角度最大值
+ public string LAMAX { get; set; }
+
+ /// 巨噬细胞浸润
+ public string MACRI { get; set; }
+
+ /// 巨噬细胞浸润角度
+ public string MIARC { get; set; }
+
+ /// 微通道
+ public string MC { get; set; }
+
+ /// 胆固醇结晶
+ public string CCS { get; set; }
+}
+
+
+
+#endregion
+
+[ApiExplorerSettings(GroupName = "Common")]
+public class IVUS_OCTExportService(IRepository _readingQuestionCriterionTrialRepository, IRepository _visitTaskRepository,
+ IRepository _subjectVisitTaskRepository,
+ IMapper _mapper, IUserInfo _userInfo, IRepository _commonDocumentRepository, IStringLocalizer _localizer, IWebHostEnvironment _hostEnvironment) : BaseService
+{
+
+ private IQueryable GetCIDSCQueryable(VisitTaskQuery inQuery, ArbitrationRule arbitrationRule, Guid trialReadingCriterionId)
+ {
+ var isEn_Us = _userInfo.IsEn_Us;
+
+
+ var query = _visitTaskRepository.Where(t => t.TrialId == inQuery.TrialId && t.IsAnalysisCreate == false && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze))
+
+ //访视和全局查询已签名完成的,裁判可以是未签名,未完成的
+ .Where(t => (t.ReadingTaskState == ReadingTaskState.HaveSigned && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global)) || t.ReadingCategory == ReadingCategory.Judge)
+ .WhereIf(inQuery.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)
+ .WhereIf(inQuery.TrialSiteId != null, t => t.Subject.TrialSiteId == inQuery.TrialSiteId)
+
+ .WhereIf(inQuery.ArmEnum != null, t => t.ArmEnum == inQuery.ArmEnum)
+ .WhereIf(!string.IsNullOrEmpty(inQuery.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(inQuery.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode!) && t.IsAnalysisCreate == false))
+ .WhereIf(!string.IsNullOrEmpty(inQuery.TaskName), t => t.TaskName.Contains(inQuery.TaskName) || t.TaskBlindName.Contains(inQuery.TaskName))
+ .WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => t.Subject.Code.Contains(inQuery.SubjectCode))
+ .Select(t => new IVUS_OCTBaseDto()
+ {
+ ResearchProgramNo = t.Trial.ResearchProgramNo,
+ SubjectCode = t.Subject.Code,
+ UserName = t.DoctorUser.UserName,
+ ArmEnum = t.ArmEnum,
+
+ TaskName = t.TaskName,
+ SignTime = t.SignTime,
+ JudgeSignTime = t.ReadingCategory == ReadingCategory.Judge ? t.SignTime : null,
+ SourceSubjectVisitId = t.SourceSubjectVisitId,
+ VisitTaskNum = t.VisitTaskNum,
+ VisitNum = t.VisitTaskNum,
+ VisitName = t.SourceSubjectVisit.VisitName,
+ EarliestScanDate = t.SourceSubjectVisit.EarliestScanDate,
+ LatestScanDate = t.SourceSubjectVisit.LatestScanDate,
+ VisitTaskId = t.Id,
+ CriterionName = t.TrialReadingCriterion.CriterionName,
+
+
+
+ ReadingCategory = t.ReadingCategory,
+ ReadingTaskState = t.ReadingTaskState,
+
+
+ //以最后为准,没法直接获取(涉及到全局,裁判)
+ SubjectCriterionReadingPeriodVisitNumList = t.Subject.ReadModuleList.Where(u => u.TrialReadingCriterionId == trialReadingCriterionId && u.ReadingSetType == ReadingSetType.ImageReading).Select(c => c.SubjectVisit.VisitNum).ToList(),
+
+ IsJudgeSelect = null,
+
+ JudgeArmEnum = t.JudgeResultTask.ArmEnum,
+
+ IsTrigerJudge = arbitrationRule == ArbitrationRule.Visit ? t.JudgeVisitTaskId != null :
+ (arbitrationRule == ArbitrationRule.Reading ?
+ t.Subject.SubjectVisitTaskList.Any(c => c.TaskState == TaskState.Effect && c.IsAnalysisCreate == false && c.ReadingCategory == ReadingCategory.Judge && c.TrialReadingCriterionId == trialReadingCriterionId && t.VisitTaskNum < c.VisitTaskNum) :
+ false),
+ JudgeNote = t.ReadingCategory == ReadingCategory.Judge ? t.JudgeResultRemark : "",
+
+ //全局 访视上修改会要求填写
+ VisitNote = t.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.AdjustReason).FirstOrDefault()!.Answer,
+
+ GlobalResultList = t.GlobalVisitResultList.Where(t => t.GlobalAnswerType == GlobalAnswerType.Reason || t.GlobalAnswerType == GlobalAnswerType.UpdateType).Select(t => new TumorGlobalQuestionAnserInfo()
+ {
+ TaskId = t.TaskId,
+ GlobalAnswerType = t.GlobalAnswerType,
+ Answer = t.Answer
+ }).ToList(),
+
+
+
+ QuestionAnswerList = t.ReadingTaskQuestionAnswerList
+ .OrderBy(u => u.ReadingQuestionTrial.ShowOrder)
+ .Select(c => new TumorCommonQustionInfo()
+ {
+ QuestionType = c.ReadingQuestionTrial.QuestionType,
+ QuestionId = c.ReadingQuestionTrial.Id,
+ QuestionName = isEn_Us ? c.ReadingQuestionTrial.QuestionEnName : c.ReadingQuestionTrial.QuestionName,
+ QuestionValue = c.IsGlobalChange ? c.GlobalChangeAnswer : c.Answer,
+ TranslateDicName = c.ReadingQuestionTrial.DictionaryCode,
+ ValueType = c.ReadingQuestionTrial.ValueType,
+ Unit = c.ReadingQuestionTrial.Unit
+ }).ToList(),
+
+ LesionList = t.LesionList.OrderBy(t => t.RowMark).Select(c => new TumorLessionInfo()
+ {
+ Id = c.Id,
+ OrganInfoId = c.OrganInfoId,
+ LessionType = c.ReadingQuestionTrial.LesionType,
+ LessionCode = c.RowMark,
+ SplitRowId = c.SplitRowId,
+ DicomModality = c.DicomSeries.DicomStudy.ModalityForEdit,
+ NoneDicomModality = c.NoneDicomStudy.Modality,
+
+ LessionAnswerList = c.LesionAnswerList.Select(k => new TumorLessionAnswerInfo()
+ {
+
+ RowId = k.RowId,
+ TranslateDicName = k.ReadingTableQuestionTrial.DictionaryCode,
+ QuestionMark = k.ReadingTableQuestionTrial.QuestionMark,
+ TableQuesionId = k.ReadingTableQuestionTrial.Id,
+ QuestionName = isEn_Us ? k.ReadingTableQuestionTrial.QuestionEnName : k.ReadingTableQuestionTrial.QuestionName,
+ QuestionValue = k.Answer,
+ ShowOrder = k.ReadingTableQuestionTrial.ShowOrder,
+ Unit = k.ReadingTableQuestionTrial.Unit
+
+ }).ToList(),
+
+ }).ToList()
+
+ });
+
+ return query;
+ }
+
+
+ [HttpPost]
+ public async Task GetTumor_CDISC_Export(VisitTaskQuery inQuery,
+ [FromServices] IRepository _visitTaskReReadingRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialOrganRepository,
+ [FromServices] IRepository _trialReadingQuestionRepository,
+ [FromServices] IRepository _trialReadingTableQuestionRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+ //每次查询必须是单标准的
+ var criterion = await _readingQuestionCriterionTrialRepository
+ .WhereIf(inQuery.TrialReadingCriterionId != null, t => t.Id == inQuery.TrialReadingCriterionId)
+ .WhereIf(inQuery.CriterionType != null, t => t.CriterionType == inQuery.CriterionType)
+ .Select(t => new { t.Id, t.CriterionType, t.CriterionGroup, t.IsGlobalReading, t.IsArbitrationReading, t.IsOncologyReading, t.CriterionName, t.ArbitrationRule }).FirstNotNullAsync();
+
+ var arbitrationRule = criterion.ArbitrationRule;
+
+ var isEn_Us = _userInfo.IsEn_Us;
+
+ var query = GetCIDSCQueryable(inQuery, arbitrationRule, criterion.Id);
+
+ //任务排序
+ var taskList = await query.OrderBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ThenBy(t => t.ArmEnum).ToListAsync();
+
+ //重阅信息
+ var reReadingList = _visitTaskReReadingRepository.Where(t => t.TrialId == inQuery.TrialId && t.RequestReReadingType == RequestReReadingType.DocotorApply).Select(t => new
+ {
+ t.OriginalReReadingTask.VisitTaskNum,
+ t.OriginalReReadingTask.ArmEnum,
+ t.OriginalReReadingTask.DoctorUser.UserName,
+ t.RequestReReadingReason
+ }).ToList();
+
+ //处理裁判标记
+ taskList = DealJudgeMark(criterion.ArbitrationRule, criterion.IsGlobalReading, taskList);
+
+
+
+ #region 字典和各个表的数组准备
+
+ var dicNameList = new List() { "ArmEnum", "ValueUnit" }
+ .Distinct().ToArray();
+
+ //翻译字典
+ var translateDataList = await _dictionaryService.GetBasicDataSelect(dicNameList);
+
+ var ivusList = new List();
+
+ var octList = new List();
+
+ var exportCode = string.Empty;
+
+ var data = new object();
+
+ #endregion
+
+
+ foreach (var task in taskList)
+ {
+
+ if (task.ReadingCategory == ReadingCategory.Judge || task.ReadingCategory == ReadingCategory.Global)
+ {
+ continue;
+ }
+
+ if (criterion.CriterionType == CriterionType.IVUS)
+ {
+ //一个斑块一条记录
+ foreach (var lesion in task.LesionList.Where(t => t.LessionType == LesionType.MatchValues))
+ {
+ var ivus = _mapper.Map(task);
+
+ //靶段
+ ivus.TARGETV = task.QuestionAnswerList.Where(t => t.QuestionName == "靶段").FirstOrDefault()?.QuestionValue ?? string.Empty;
+
+
+ //斑块编号
+ ivus.PLAQUE = lesion.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.PlaqueNumber).FirstOrDefault()?.QuestionValue ?? string.Empty;
+
+ //外弹力膜面积
+ ivus.EEM = lesion.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.ElasticArea).FirstOrDefault()?.QuestionValue ?? string.Empty;
+ //管腔面积
+ ivus.LUMEN = lesion.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.LumenArea).FirstOrDefault()?.QuestionValue ?? string.Empty;
+
+ //外弹力膜与管腔面积差值
+ ivus.PA = lesion.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.ElasticAreaDiffValue).FirstOrDefault()?.QuestionValue ?? string.Empty;
+
+
+ //回撤中的图像帧数
+ ivus.PFC = task.QuestionAnswerList.Where(t => t.QuestionName == "回撤中的图像帧数").FirstOrDefault()?.QuestionValue ?? string.Empty;
+
+ //分析图像帧数
+ ivus.FC = task.QuestionAnswerList.Where(t => t.QuestionName == "分析图像帧数").FirstOrDefault()?.QuestionValue ?? string.Empty;
+
+ var findStatLession = task.LesionList.FirstOrDefault(t => t.LessionType == LesionType.PatchDataStatistics && t.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.PlaqueNumber && t.QuestionValue == ivus.PLAQUE));
+ var findPAVLession = task.LesionList.FirstOrDefault(t => t.LessionType == LesionType.PAV && t.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.PlaqueNumber && t.QuestionValue == ivus.PLAQUE));
+
+
+ //EEM求和
+ ivus.TOTALEEM = findStatLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.EEMSum).FirstOrDefault()?.QuestionValue ?? string.Empty;
+
+ //(EEM-Lumen)求和
+ ivus.TOTALPA = findStatLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.EEMSubtractLumenSum).FirstOrDefault()?.QuestionValue ?? string.Empty;
+ //冠状动脉粥样硬化体积百分比(PAV)
+
+ ivus.TOTALPA = findPAVLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.PAV).FirstOrDefault()?.QuestionValue ?? string.Empty;
+
+ ivusList.Add(ivus);
+
+ }
+
+
+
+ }
+ else if (criterion.CriterionType == CriterionType.OCT)
+ {
+ //找到所有的斑块编号 排序
+
+ var noList = task.LesionList.Where(t => t.LessionType == LesionType.FCT).SelectMany(t => t.LessionAnswerList.Where(a => a.QuestionMark == QuestionMark.PlaqueNumber)
+ .Select(a => a.QuestionValue)).Where(v => !string.IsNullOrEmpty(v)).Distinct()
+ .OrderBy(v => int.Parse(v)) // 按数字排序
+ .ToList(); // 最终是字符串列表
+
+
+ foreach (var pNo in noList)
+ {
+ var pNoIndex = 0;
+ //一个斑块 一次测量(FCT 脂质角度)一条记录
+ foreach (var fctLesion in task.LesionList.Where(t => t.LessionType == LesionType.FCT
+ && t.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.PlaqueNumber && t.QuestionValue == pNo)))
+ {
+ pNoIndex++;
+
+ var findFct1= fctLesion?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.FirstFCT).FirstOrDefault();
+
+ if (findFct1 != null)
+ {
+ var oct = CreatOCT(task, pNo);
+
+ // 测量标识
+
+ oct.TestID = $"{(task.ArmEnum == Arm.DoubleReadingArm1 ? "R1" : "R2")}_{pNo}_L_{pNoIndex}";
+
+ // 测量参数名称
+
+ oct.TESTCD = "FCTMV1";
+
+ // 测量参数值
+ oct.ORRES = findFct1?.QuestionValue??string.Empty;
+
+ // 测量值单位
+ oct.ORRESU = translateDataList["ValueUnit"].Where(t => t.Code.ToLower() == ((int?)findFct1.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
+
+ octList.Add(oct);
+ }
+
+ var findFct2 = fctLesion?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.SecondFCT).FirstOrDefault();
+
+ if (findFct2 != null)
+ {
+ var oct = CreatOCT(task, pNo);
+
+ // 测量标识
+
+ oct.TestID = $"{(task.ArmEnum == Arm.DoubleReadingArm1 ? "R1" : "R2")}_{pNo}_L_{pNoIndex}";
+
+ // 测量参数名称
+
+ oct.TESTCD = "FCTMV2";
+
+ // 测量参数值
+ oct.ORRES = findFct2?.QuestionValue ?? string.Empty;
+
+ // 测量值单位
+ oct.ORRESU = translateDataList["ValueUnit"].Where(t => t.Code.ToLower() == ((int?)findFct2.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
+
+ octList.Add(oct);
+ }
+
+ var findFct3 = fctLesion?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.ThirdFCT).FirstOrDefault();
+
+ if (findFct3 != null)
+ {
+ var oct = CreatOCT(task, pNo);
+
+ // 测量标识
+
+ oct.TestID = $"{(task.ArmEnum == Arm.DoubleReadingArm1 ? "R1" : "R2")}_{pNo}_L_{pNoIndex}";
+
+ // 测量参数名称
+
+ oct.TESTCD = "FCTMV3";
+
+ // 测量参数值
+ oct.ORRES = findFct3?.QuestionValue ?? string.Empty;
+
+ // 测量值单位
+ oct.ORRESU = translateDataList["ValueUnit"].Where(t => t.Code.ToLower() == ((int?)findFct3.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
+
+ octList.Add(oct);
+ }
+
+
+ var avgFct = fctLesion?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.AvgFCT).FirstOrDefault();
+
+ if (avgFct != null)
+ {
+ var oct = CreatOCT(task, pNo);
+
+ // 测量标识
+
+ oct.TestID = $"{(task.ArmEnum == Arm.DoubleReadingArm1 ? "R1" : "R2")}_{pNo}_L_{pNoIndex}";
+
+ // 测量参数名称
+
+ oct.TESTCD = "AVGFCT";
+
+ // 测量参数值
+ oct.ORRES = avgFct?.QuestionValue ?? string.Empty;
+
+ // 测量值单位
+ oct.ORRESU = translateDataList["ValueUnit"].Where(t => t.Code.ToLower() == ((int?)avgFct.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
+
+ octList.Add(oct);
+ }
+
+ }
+
+ var lNoIndex = 0;
+ //纸质角度
+ foreach (var liLesion in task.LesionList.Where(t => t.LessionType == LesionType.LipidAngle
+ && t.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.PlaqueNumber && t.QuestionValue == pNo)))
+ {
+ lNoIndex++;
+
+ var findAngle = liLesion?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.LipidAngle).FirstOrDefault();
+
+ if (findAngle != null)
+ {
+ var oct = CreatOCT(task, pNo);
+
+ // 测量标识
+
+ oct.TestID = $"{(task.ArmEnum == Arm.DoubleReadingArm1 ? "R1" : "R2")}_{pNo}_A_{lNoIndex}";
+
+ // 测量参数名称
+
+ oct.TESTCD = "LIPIDA";
+
+ // 测量参数值
+ oct.ORRES = findAngle?.QuestionValue ?? string.Empty;
+
+ // 测量值单位
+ oct.ORRESU = translateDataList["ValueUnit"].Where(t => t.Code.ToLower() == ((int?)findAngle.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
+
+ octList.Add(oct);
+ }
+ }
+ }
+
+
+
+
+ }
+
+
+
+ }
+
+
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+ exportInfo.CriterionName = criterion.CriterionName;
+
+
+
+
+ if (criterion.CriterionType == CriterionType.IVUS)
+ {
+ exportCode = StaticData.Export.IVUS_CDISC_Export;
+
+ data = ivusList;
+
+ data = await TranslateDataList(new { List = data }, _dictionaryService, typeof(IvusExportDto));
+ }
+ else if (criterion.CriterionType == CriterionType.OCT)
+ {
+ exportCode = StaticData.Export.OCT_CDISC_Export;
+
+ data = octList;
+
+ data = await TranslateDataList(new { List = data }, _dictionaryService, typeof(OctExportDto));
+ }
+
+ var (physicalPath, fileName) = await FileStoreHelper.GetCommonDocPhysicalFilePathAsync(_hostEnvironment, _commonDocumentRepository, exportCode);
+
+ var exportFileNamePrefix = $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}";
+
+ var fileDownloadName = $"{(string.IsNullOrEmpty(exportFileNamePrefix) ? "" : exportFileNamePrefix + "_")}{Path.GetFileNameWithoutExtension(fileName)}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx";
+
+ return await DataExportAsync(data, fileDownloadName, physicalPath);
+
+
+
+
+ }
+
+ private OctExportDto CreatOCT(IVUS_OCTBaseDto task, string pNo)
+ {
+ var oct = _mapper.Map(task);
+
+
+
+ //靶段
+ oct.TARGETV = task.QuestionAnswerList.Where(t => t.QuestionName == "靶段").FirstOrDefault()?.QuestionValue ?? string.Empty;
+
+ //斑块编号
+ oct.PLAQUE = pNo;
+
+ var findLession = task.LesionList.Where(t => t.LessionType == LesionType.PatchDataStatistics
+ && t.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.PlaqueNumber && t.QuestionValue == pNo)).FirstOrDefault();
+
+ // 斑块类型
+ oct.PLATYPE = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.Undetermined).FirstOrDefault()?.QuestionValue ?? string.Empty;
+ // 匹配动脉段最小FCT
+ oct.MINFCT = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.MiniMumFCT).FirstOrDefault()?.QuestionValue ?? string.Empty;
+ // 平均最小FCT
+ oct.AVGMFCT = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.AvgMinFCT).FirstOrDefault()?.QuestionValue ?? string.Empty;
+ // 脂质角度平均值
+ oct.LAMEAN = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.AvgLipidAngle).FirstOrDefault()?.QuestionValue ?? string.Empty;
+ // 脂质角度最大值
+ oct.LAMAX = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.MaxAvgLipidAngle).FirstOrDefault()?.QuestionValue ?? string.Empty;
+ // 巨噬细胞浸润
+ oct.MACRI = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.MacrophageInfiltration).FirstOrDefault()?.QuestionValue ?? string.Empty;
+ // 巨噬细胞浸润角度
+ oct.MIARC = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.MacrophageExtensionAngle).FirstOrDefault()?.QuestionValue ?? string.Empty;
+ // 微通道
+ oct.MC = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.Microchannels).FirstOrDefault()?.QuestionValue ?? string.Empty;
+ // 胆固醇结晶
+ oct.CCS = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.CholesterolCrystallization).FirstOrDefault()?.QuestionValue ?? string.Empty;
+
+ return oct;
+ }
+
+ public static async Task
///
- [HttpGet("{trialId:guid}/{trialSiteSurveyId:guid}")]
- public async Task GetSiteSurveyInfo(Guid trialSiteSurveyId, Guid trialId)
+ [HttpGet("{trialId:guid}")]
+ public async Task GetSiteSurveyInfo(Guid? trialSiteSurveyId, Guid trialId)
{
+ LoginReturnDTO result = new LoginReturnDTO();
- //有可能填表人提交了,但是此时PM手动对人员信息进行了更改,此时需要将数据同步下(选择在这里同步是因为 不想改动 中心人员哪里的两个接口的逻辑)
- var find = await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId, true);
-
-
- if (find.State != TrialSiteSurveyEnum.PMCreatedAndLock && find.IsDeleted != true)
+ if (trialSiteSurveyId != null)
{
- var userList = await _trialSiteUserRoleRepository.Where(t => t.TrialId == find.TrialId && t.TrialSiteId == find.TrialSiteId, false, true).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ //有可能填表人提交了,但是此时PM手动对人员信息进行了更改,此时需要将数据同步下(选择在这里同步是因为 不想改动 中心人员哪里的两个接口的逻辑)
+ var find = await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId, true);
- await UnlockSyncSiteUserAsync(find.TrialId, find.TrialSiteId, find.Id, userList);
+ if (find.State != TrialSiteSurveyEnum.PMCreatedAndLock && find.IsDeleted != true)
+ {
+ var userList = await _trialSiteUserRoleRepository.Where(t => t.TrialId == find.TrialId && t.TrialSiteId == find.TrialSiteId, false, true).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+
+ await UnlockSyncSiteUserAsync(find.TrialId, find.TrialSiteId, find.Id, userList);
+ }
+
+ result = await _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId && t.TrialId == trialId).IgnoreQueryFilters()
+ .ProjectTo(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us }).FirstOrDefaultAsync().IfNullThrowException();
}
-
- var result = await _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId && t.TrialId == trialId).IgnoreQueryFilters()
- .ProjectTo(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us }).FirstOrDefaultAsync().IfNullThrowException();
-
var siteSurveryConfig = _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId).IgnoreQueryFilters().Select(t => t.Trial.TrialExtraConfigJsonStr).FirstOrDefault() ?? string.Empty;
result.SiteSurveyFiledConfig = JsonConvert.DeserializeObject(siteSurveryConfig) ?? new TrialExtraConfig();
From 9a5221ef7d676845b4255511919f225767d9c218 Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Thu, 27 Nov 2025 17:31:56 +0800
Subject: [PATCH 13/13] =?UTF-8?q?=E8=B0=83=E6=95=B4ivus=E5=AF=BC=E8=A1=A8?=
=?UTF-8?q?=E4=BD=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Service/Common/Export/CDISCExportBaseModel.cs | 1 -
.../Service/Common/{ => Export}/IVUS_OCTExportService.cs | 0
2 files changed, 1 deletion(-)
rename IRaCIS.Core.Application/Service/Common/{ => Export}/IVUS_OCTExportService.cs (100%)
diff --git a/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs b/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs
index 9e6623357..0bf2ef489 100644
--- a/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs
+++ b/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs
@@ -10,7 +10,6 @@ using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Service.Common;
-
public class TumorCommonQustionInfo
{
//问题标识,肿瘤评估用于区分是什么问题
diff --git a/IRaCIS.Core.Application/Service/Common/IVUS_OCTExportService.cs b/IRaCIS.Core.Application/Service/Common/Export/IVUS_OCTExportService.cs
similarity index 100%
rename from IRaCIS.Core.Application/Service/Common/IVUS_OCTExportService.cs
rename to IRaCIS.Core.Application/Service/Common/Export/IVUS_OCTExportService.cs