From e59d5c15e21fdbb11aef87f8c86207bcabd7a524 Mon Sep 17 00:00:00 2001
From: "{872297557@qq.com}" <872297557@qq.com>
Date: Tue, 14 Feb 2023 10:48:15 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E8=A1=A8=E7=A7=BB=E5=8A=A8=E4=BD=8D?=
=?UTF-8?q?=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../IRaCIS.Core.Application.xml | 220 ++---
.../Service/Common/ExcelExportService.cs | 793 ++++++++++++++++++
.../DTO/TrialEmailNoticeConfigViewModel.cs | 2 +
.../Service/QC/DTO/QCListViewModel.cs | 33 +-
.../Service/QC/QCListService.cs | 752 -----------------
.../Service/QC/_MapConfig.cs | 8 +-
6 files changed, 933 insertions(+), 875 deletions(-)
create mode 100644 IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index eacabd893..18df07030 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -435,6 +435,117 @@
系统模板文档配置表
+
+
+ 影像上传列表 只导出已上传状态的访视记录
+
+
+
+
+
+
+
+
+
+
+ 质疑列表
+
+
+
+
+
+
+ 受试者信息导出表
+
+
+
+
+
+
+ 受试者 阅片期 进度表 导出
+
+
+
+
+
+
+
+
+ 阅片期信息表
+
+
+
+
+
+
+ 一致性核查 检查信息表
+
+
+
+
+
+
+ 一致性核查记录表
+
+
+
+
+
+
+ PM阅片跟踪
+
+
+
+
+
+
+ PM 重阅追踪
+
+
+
+
+
+
+ PM 医学审核(挑选任务生成后的列表)
+
+
+
+
+
+
+ 自身一致性分析
+
+
+
+
+
+
+ 组件一致性分析
+
+
+
+
+
+
+ 整体肿瘤评估 多个标准一个接口 Excel 列是一样的
+
+
+
+
+
+
+ 肿瘤疗效评估表 ( 目前 RECIST1.1)
+
+
+
+
+
+
+ 评估病灶明细表 ( 目前 RECIST1.1 PGW3 表都是不同的)
+
+
+
+
TrialEmailNoticeConfigService
@@ -7814,115 +7925,6 @@
-
-
- 影像上传列表 只导出已上传状态的访视记录
-
-
-
-
-
-
-
-
- 质疑列表
-
-
-
-
-
-
- 受试者信息导出表
-
-
-
-
-
-
- 受试者 阅片期 进度表 导出
-
-
-
-
-
-
-
-
- 阅片期信息表
-
-
-
-
-
-
- 一致性核查 检查信息表
-
-
-
-
-
-
- 一致性核查记录表
-
-
-
-
-
-
- PM阅片跟踪
-
-
-
-
-
-
- PM 重阅追踪
-
-
-
-
-
-
- PM 医学审核(挑选任务生成后的列表)
-
-
-
-
-
-
- 自身一致性分析
-
-
-
-
-
-
- 组件一致性分析
-
-
-
-
-
-
- 整体肿瘤评估 多个标准一个接口 Excel 列是一样的
-
-
-
-
-
-
- 肿瘤疗效评估表 ( 目前 RECIST1.1)
-
-
-
-
-
-
- 评估病灶明细表 ( 目前 RECIST1.1 PGW3 表都是不同的)
-
-
-
-
CRC 访视上传列表
diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
new file mode 100644
index 000000000..d05b12e5f
--- /dev/null
+++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
@@ -0,0 +1,793 @@
+using IRaCIS.Application.Contracts;
+using IRaCIS.Application.Interfaces;
+using IRaCIS.Core.Application.Contracts;
+using IRaCIS.Core.Application.Service.Reading.Dto;
+using IRaCIS.Core.Application.ViewModel;
+using IRaCIS.Core.Domain.Share;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IRaCIS.Core.Application.Service.Common
+{
+ public class ExcelExportService : BaseService
+ {
+
+ #region 导表查询
+
+
+ ///
+ /// 影像上传列表 只导出已上传状态的访视记录
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ [AllowAnonymous]
+ public async Task CRCVisitListExport(CRCVisitSearchDTO visitSearchDTO,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository
+ )
+ {
+
+ var svExpression = QCCommon.GetSubjectVisitFilter(visitSearchDTO.VisitPlanArray);
+
+ var list = await _subjectVisitRepository.Where(x => x.TrialId == visitSearchDTO.TrialId)
+ .Where(t => t.Subject.FinalSubjectVisitId != null ? t.VisitNum <= t.Subject.FinalSubjectVisit.VisitNum : true)
+ .WhereIf(visitSearchDTO.SiteId != null, t => t.SiteId == visitSearchDTO.SiteId)
+ .WhereIf(visitSearchDTO.SubjectId != null, t => t.Subject.Id == visitSearchDTO.SubjectId)
+ .WhereIf(!string.IsNullOrEmpty(visitSearchDTO.SubjectInfo), t => t.Subject.Code.Contains(visitSearchDTO.SubjectInfo))
+
+ .WhereIf(visitSearchDTO.VisitPlanArray != null && visitSearchDTO.VisitPlanArray?.Length > 0, svExpression)
+ //.WhereIf(!string.IsNullOrEmpty(visitSearchDTO.VisitPlanInfo), visitSearchDTO.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(visitSearchDTO.VisitPlanInfo))
+ .WhereIf(visitSearchDTO.AuditStateArray != null && visitSearchDTO.AuditStateArray?.Length > 0, t => visitSearchDTO.AuditStateArray!.Contains(t.AuditState))
+ .WhereIf(visitSearchDTO.SubmitState != null, t => t.SubmitState == visitSearchDTO.SubmitState)
+ .WhereIf(visitSearchDTO.ChallengeState != null, t => t.ChallengeState == visitSearchDTO.ChallengeState)
+ .WhereIf(visitSearchDTO.IsUrgent != null, t => t.IsUrgent == visitSearchDTO.IsUrgent)
+ .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+ list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.BlindName).ToList();
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == visitSearchDTO.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialCRCUploadImageList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CRCVisitExportDTO));
+
+ }
+
+
+
+
+ ///
+ /// 质疑列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ [AllowAnonymous]
+ public async Task GetQCChallengeList_Export(ChallengeQuery challengeQuery,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository
+ )
+
+ {
+
+ var svExpression = QCCommon.GetQCChallengeFilter(challengeQuery.VisitPlanArray);
+
+ var list = await _repository.Where(x => x.TrialId == challengeQuery.TrialId)
+ //.WhereIf(challengeQuery.ChallengeState != null, t => t.SubjectVisit.ChallengeState == challengeQuery.ChallengeState)
+ .WhereIf(challengeQuery.ReuploadEnum != null, t => t.ReuploadEnum == challengeQuery.ReuploadEnum)
+ .WhereIf(challengeQuery.IsClosed != null, t => t.IsClosed == challengeQuery.IsClosed)
+ .WhereIf(challengeQuery.SiteId != null, t => t.SubjectVisit.SiteId == challengeQuery.SiteId)
+ .WhereIf(challengeQuery.SubjectId != null, t => t.SubjectVisit.SubjectId == challengeQuery.SubjectId)
+ .WhereIf(challengeQuery.CreateUserId != null, t => t.CreateUserId == challengeQuery.CreateUserId)
+ .WhereIf(!string.IsNullOrEmpty(challengeQuery.SubjectCode), t => t.SubjectVisit.Subject.Code.Contains(challengeQuery.SubjectCode))
+ .WhereIf(challengeQuery.VisitPlanArray != null && challengeQuery.VisitPlanArray?.Length > 0, svExpression)
+ //.WhereIf(!string.IsNullOrEmpty(challengeQuery.VisitPlanInfo), challengeQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.InPlan == false : t => t.SubjectVisit.VisitNum == decimal.Parse(challengeQuery.VisitPlanInfo))
+ .WhereIf(challengeQuery.IsUrgent != null, t => t.SubjectVisit.IsUrgent == challengeQuery.IsUrgent)
+ .WhereIf(challengeQuery.IsOverTime != null && challengeQuery.IsOverTime == true, t => t.IsClosed ? t.ClosedTime > t.DeadlineTime : DateTime.Now > t.DeadlineTime)
+ .WhereIf(challengeQuery.IsOverTime != null && challengeQuery.IsOverTime == false, t => t.IsClosed ? t.ClosedTime < t.DeadlineTime : DateTime.Now < t.DeadlineTime)
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+ list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.ChallengeCode).ToList();
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == challengeQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialQCImageChanllengeList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(QCChanllengeExportDto));
+ }
+
+
+ ///
+ /// 受试者信息导出表
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task GetSubjectList_Export(SubjectQueryParam param,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var list = await _repository.Where(u => u.TrialId == param.TrialId)
+ .WhereIf(!string.IsNullOrWhiteSpace(param.Code), t => t.Code.Contains(param.Code))
+ .WhereIf(!string.IsNullOrWhiteSpace(param.Name), t => t.ShortName.Contains(param.Name))
+ .WhereIf(!string.IsNullOrWhiteSpace(param.Sex), t => t.Sex.Contains(param.Sex))
+ .WhereIf(param.Status != null, t => t.Status == param.Status)
+ .WhereIf(param.SiteId != null, t => t.SiteId == param.SiteId)
+ // CRC 只负责他管理site的受试者
+ .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+
+ list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.Code).ToList();
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == param.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SubjectExportDTO));
+
+ }
+
+
+
+ ///
+ /// 受试者 阅片期 进度表 导出
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task GetSubjectReadingPeriod_Export(GetReadModuleDto dto,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository)
+ {
+
+
+ var list = await _repository.Where(u => u.TrialId == dto.TrialId)
+ .WhereIf(dto.SubjectId != null, x => x.Id == dto.SubjectId)
+ .WhereIf(dto.TrialSiteCode != null && dto.TrialSiteCode != string.Empty, x => x.TrialSite.TrialSiteCode == dto.TrialSiteCode)
+ .WhereIf(dto.SubjectCode != null && dto.SubjectCode != string.Empty, x => x.Code == dto.SubjectCode)
+ //.WhereIf(dto.ReadingStatus != null, x => x.ReadingStatus == dto.ReadingStatus)
+
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+
+ list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.Code).ToList();
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == dto.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SubjectExportDTO));
+ }
+
+
+ ///
+ /// 阅片期信息表
+ ///
+ ///
+ ///
+ public async Task GetReadingPeriodList_Export(ReadPeriodQuery param,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var list = await _repository.Where(u => u.TrialId == param.TrialId)
+
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+ list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ToList();
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == param.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectReadingPeriodList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadPeriodExportDto));
+
+ }
+
+ ///
+ /// 一致性核查 检查信息表
+ ///
+ ///
+ ///
+
+ [HttpPost]
+ public async Task GetDicomAndNoneDicomStudyList_Export(StudyQuery studyQuery,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var svExpression = QCCommon.GetDicomStudySubjectVisitFilter(studyQuery.VisitPlanArray);
+
+ var dicomStudyQuery = _repository.Where(t => t.TrialId == studyQuery.TrialId)
+ .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
+ .WhereIf(studyQuery.VisitPlanArray != null && studyQuery.VisitPlanArray?.Length > 0, svExpression)
+ .WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo))
+ .Select(t => new UnionStudyExportDTO()
+ {
+ VisitName = t.SubjectVisit.VisitName,
+ VisitNum = t.SubjectVisit.VisitNum,
+ IsDicom = true,
+ SubjectCode = t.Subject.Code,
+ Modality = t.Modalities,
+ StudyCode = t.StudyCode,
+ StudyTime = t.StudyTime,
+
+ TrialSiteAliasName = t.TrialSite.TrialSiteAliasName,
+
+ TrialSiteCode = t.TrialSite.TrialSiteCode,
+
+ CheckState = t.SubjectVisit.CheckState,
+ //Uploader = t.Uploader.UserName,
+ //UploadTime = t.CreateTime
+
+ });
+
+ var svExpression2 = QCCommon.GetNoneDicomStudySubjectVisitFilter(studyQuery.VisitPlanArray);
+
+
+ var nodeDicomStudyQuery = _repository.Where(t => t.TrialId == studyQuery.TrialId)
+ .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
+ .WhereIf(studyQuery.VisitPlanArray != null && studyQuery.VisitPlanArray?.Length > 0, svExpression2)
+ .WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo))
+
+ .Select(t => new UnionStudyExportDTO()
+ {
+
+ VisitName = t.SubjectVisit.VisitName,
+ VisitNum = t.SubjectVisit.VisitNum,
+ IsDicom = false,
+ SubjectCode = t.Subject.Code,
+ Modality = t.Modality,
+ StudyCode = t.StudyCode,
+ StudyTime = t.ImageDate,
+
+ TrialSiteAliasName = t.TrialSite.TrialSiteAliasName,
+
+ TrialSiteCode = t.TrialSite.TrialSiteCode,
+
+ CheckState = t.SubjectVisit.CheckState,
+
+ //Uploader = t.CreateUser.UserName,
+ //UploadTime = t.CreateTime
+
+ });
+
+
+
+ var list = await dicomStudyQuery.Union(nodeDicomStudyQuery)
+ .ToListAsync();
+
+ list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitNum).ToList();
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == studyQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialStudyList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(UnionStudyExportDTO));
+ }
+
+
+ ///
+ /// 一致性核查记录表
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task GetConsistencyVerificationList_Export(CheckQuery checkQuery,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository,
+ [FromServices] IRepository _subjectVisitRepository)
+ {
+
+ var svExpression = QCCommon.GetSubjectVisitFilter(checkQuery.VisitPlanArray);
+
+ var list = await _subjectVisitRepository.Where(x => x.TrialId == checkQuery.TrialId)
+ .Where(x => x.AuditState == AuditStateEnum.QCPassed) //一致性核查中的,或者还没一致性核查的
+ .WhereIf(checkQuery.CheckState != null, t => t.CheckState == checkQuery.CheckState)
+ .WhereIf(checkQuery.SiteId != null, t => t.SiteId == checkQuery.SiteId)
+ .WhereIf(!string.IsNullOrEmpty(checkQuery.SubjectInfo), t => t.Subject.Code.Contains(checkQuery.SubjectInfo))
+ .WhereIf(checkQuery.VisitPlanArray != null && checkQuery.VisitPlanArray?.Length > 0, svExpression)
+ .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//CRC 过滤负责的site
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+ list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitNum).ToList();
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == checkQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectVisitCheckList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(PMKCheckEXportDTO));
+ }
+
+
+
+
+ ///
+ /// PM阅片跟踪
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task GetReadingTaskList_Export(VisitTaskQuery queryVisitTask,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository)
+ {
+ var list = await _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.IsAnalysisCreate == false)
+ //.Where(t => t.IsAnalysisCreate == false && t.DoctorUserId != null)
+
+ .WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
+ .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
+ .WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
+ .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
+ .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
+ .WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
+ .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
+ .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
+ .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
+
+
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode) || t.BlindSubjectCode.Contains(queryVisitTask.SubjectCode))
+ .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
+ .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+ //var defalutSortArray = new string[] { nameof(VisitTask.IsUrgent) + " desc", nameof(VisitTask.SubjectId), nameof(VisitTask.VisitTaskNum) };
+
+ list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
+
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialReadingTaskList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadingTaskExportDto));
+ }
+
+
+
+
+ ///
+ /// PM 重阅追踪
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task GetReReadingTaskList_Export(VisitTaskQuery queryVisitTask,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository)
+ {
+
+
+ var list = await _repository.Where(t => t.OriginalReReadingTask.TrialId == queryVisitTask.TrialId /*&& t.OriginalReReadingTask.IsAnalysisCreate == false*/)
+ .WhereIf(queryVisitTask.RootReReadingTaskId != null, t => t.RootReReadingTaskId == queryVisitTask.RootReReadingTaskId || t.OriginalReReadingTaskId == queryVisitTask.RootReReadingTaskId)
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskCode), t => t.OriginalReReadingTask.TaskCode.Contains(queryVisitTask.TaskCode!) || t.RootReReadingTask.TaskCode.Contains(queryVisitTask.TaskCode!))
+ .WhereIf(queryVisitTask.SiteId != null, t => t.OriginalReReadingTask.Subject.SiteId == queryVisitTask.SiteId)
+ .WhereIf(queryVisitTask.TaskState != null, t => t.OriginalReReadingTask.TaskState == queryVisitTask.TaskState)
+ .WhereIf(queryVisitTask.ReReadingApplyState != null, t => t.OriginalReReadingTask.ReReadingApplyState == queryVisitTask.ReReadingApplyState)
+ .WhereIf(queryVisitTask.SubjectId != null, t => t.OriginalReReadingTask.SubjectId == queryVisitTask.SubjectId)
+ .WhereIf(queryVisitTask.IsUrgent != null, t => t.OriginalReReadingTask.IsUrgent == queryVisitTask.IsUrgent)
+ .WhereIf(queryVisitTask.DoctorUserId != null, t => t.OriginalReReadingTask.DoctorUserId == queryVisitTask.DoctorUserId)
+ .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.OriginalReReadingTask.ReadingTaskState == queryVisitTask.ReadingTaskState)
+ .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.OriginalReReadingTask.TaskAllocationState == queryVisitTask.TaskAllocationState)
+ .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.OriginalReReadingTask.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
+
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.OriginalReReadingTask.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate) || (t.OriginalReReadingTask.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate == false))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.OriginalReReadingTask.TaskName.Contains(queryVisitTask.TaskName) || t.OriginalReReadingTask.TaskBlindName.Contains(queryVisitTask.TaskName))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.OriginalReReadingTask.Subject.Code.Contains(queryVisitTask.SubjectCode) || t.OriginalReReadingTask.BlindSubjectCode.Contains(queryVisitTask.SubjectCode))
+ .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime > queryVisitTask.BeginAllocateDate)
+ .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+ //var defalutSortArray = new string[] { nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.IsUrgent) + " desc", nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.SubjectId), nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.VisitTaskNum) };
+
+ list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialReReadingTaskList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReReadingTaskExportDto));
+ }
+
+
+
+ ///
+ /// PM 医学审核(挑选任务生成后的列表)
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task GetMedicalReviewTaskList_Export(TaskMedicalReviewQuery inQuery,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var list = await _repository.Where(t => t.VisitTask.TrialId == inQuery.TrialId)
+ .WhereIf(inQuery.SiteId != null, t => t.VisitTask.Subject.SiteId == inQuery.SiteId)
+ .WhereIf(inQuery.SubjectId != null, t => t.VisitTask.SubjectId == inQuery.SubjectId)
+ .WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => t.VisitTask.Subject.Code.Contains(inQuery.SubjectCode))
+ .WhereIf(!string.IsNullOrEmpty(inQuery.TaskName), t => t.VisitTask.TaskName.Contains(inQuery.TaskName) || t.VisitTask.TaskBlindName.Contains(inQuery.TaskName))
+ .WhereIf(inQuery.IsUrgent != null, t => t.VisitTask.IsUrgent == inQuery.IsUrgent)
+ .WhereIf(inQuery.DoctorUserId != null, t => t.VisitTask.DoctorUserId == inQuery.DoctorUserId)
+ .WhereIf(!string.IsNullOrEmpty(inQuery.TrialSiteCode), t => (t.VisitTask.BlindTrialSiteCode.Contains(inQuery.TrialSiteCode) && t.VisitTask.IsAnalysisCreate) || (t.VisitTask.Subject.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode) && t.VisitTask.IsAnalysisCreate == false))
+ .WhereIf(inQuery.ReadingCategory != null, t => t.VisitTask.ReadingCategory == inQuery.ReadingCategory)
+ .WhereIf(inQuery.ReadingTaskState != null, t => t.VisitTask.ReadingTaskState == inQuery.ReadingTaskState)
+
+ .WhereIf(inQuery.TrialReadingCriterionId != null, t => t.VisitTask.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+ list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
+
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TaskMedicalReviewExportDto));
+ }
+
+
+
+ ///
+ /// 自身一致性分析
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task GetSelfAnalysisTaskList_Export(VisitTaskQuery queryVisitTask,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ //产生一致性分析的Subject
+
+ var subjectQuerybal = _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsSelfAnalysis == true).Select(t => t.SubjectId).Distinct();
+
+ var allList = await _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && subjectQuerybal.Contains(t.SubjectId) && t.ReadingCategory == ReadingCategory.Visit)
+ .Where(t => t.IsSelfAnalysis == true || t.IsSelfAnalysis == null) //一致性分析的结果 + 正常任务的结果 + 仅仅访视的结果
+
+ //.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
+ //.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
+ //.WhereIf(queryVisitTask.IsSelfAnalysis != null, t => t.IsSelfAnalysis == queryVisitTask.IsSelfAnalysis)
+
+ .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
+ .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
+
+ .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
+ .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
+ .WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
+ .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
+ .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
+ .WhereIf(queryVisitTask.ArmEnum != null, t => t.ArmEnum == queryVisitTask.ArmEnum)
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode))
+ .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
+ .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+
+
+ var list = allList.Where(t => t.IsSelfAnalysis == null).OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
+
+ //To do 根据任务Id 找对评估结果,这里需要考虑标准 以及对应的翻译
+
+ //基线和访视的评估结果翻译枚举 分别对应着
+
+ foreach (var item in list)
+ {
+ //找到一致性分析的结果
+ var selfAnalysisTask = allList.Where(t => t.IsSelfAnalysis == true && t.SubjectCode == item.SubjectCode && t.VisitTaskNum == item.VisitTaskNum && t.TaskName == t.TaskName).FirstOrDefault();
+
+
+ //因为基线的评估结果是 是否存在疾病 而 其他访视的结果是 整体肿瘤评估结果 是用不同的枚举翻译的 所以这里手动翻译 不把翻译逻辑耦合到通用的翻译代码里面 在此特殊处理
+
+ item.AgainEvaluateResult = selfAnalysisTask?.EvaluateResult ?? String.Empty;
+
+ //将自身一致性分析的字段 赋值到访视任务这个字段
+ item.IsAnalysisDiffToOriginalData = selfAnalysisTask.IsAnalysisDiffToOriginalData;
+
+ }
+
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SelftAnalysisExport));
+ }
+
+
+ ///
+ /// 组件一致性分析
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task GetGroupAnalysisTaskList_Export(VisitTaskQuery queryVisitTask,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ //产生组间一致性分析的Subject
+
+ var subjectQuerybal = _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsSelfAnalysis == false).Select(t => t.SubjectId).Distinct();
+
+ var allList = await _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && subjectQuerybal.Contains(t.SubjectId) && t.ReadingCategory == ReadingCategory.Visit)
+ .Where(t => t.IsSelfAnalysis == false || t.IsSelfAnalysis == null) //一致性分析的结果 + 正常任务的结果 +仅仅访视的结果
+
+ //.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
+ //.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
+ //.WhereIf(queryVisitTask.IsSelfAnalysis != null, t => t.IsSelfAnalysis == queryVisitTask.IsSelfAnalysis)
+
+ .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
+ .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
+
+ .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
+ .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
+ .WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
+ .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
+ .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
+ .WhereIf(queryVisitTask.ArmEnum != null, t => t.ArmEnum == queryVisitTask.ArmEnum)
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode))
+ .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
+ .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+
+
+
+ var list = allList.Where(t => t.IsSelfAnalysis == null).OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
+
+ //To do 根据任务Id 找对评估结果,这里需要考虑标准 以及对应的翻译
+
+
+
+ foreach (var item in list)
+ {
+ //找到一致性分析的结果
+ var groupAnalysisTask = allList.Where(t => t.IsSelfAnalysis == false && t.SubjectCode == item.SubjectCode && t.VisitTaskNum == item.VisitTaskNum && t.TaskName == t.TaskName).FirstOrDefault();
+
+ item.AgainEvaluateResult = groupAnalysisTask?.EvaluateResult ?? String.Empty;
+
+ }
+
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TaskMedicalReviewExportDto));
+ }
+
+
+
+
+
+ ///
+ /// 整体肿瘤评估 多个标准一个接口 Excel 列是一样的
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task GetOverallTumorEvaluationList_Export(VisitTaskQuery queryVisitTask,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ //每次查询必须是单标准的
+ var criterionType = await _repository.Where(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
+
+ var list = await _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned)
+
+ //.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
+ //.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
+ //.WhereIf(queryVisitTask.IsSelfAnalysis != null, t => t.IsSelfAnalysis == queryVisitTask.IsSelfAnalysis)
+
+ .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
+ .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
+
+ .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
+ .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
+ .WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
+ .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
+ .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
+ .WhereIf(queryVisitTask.ArmEnum != null, t => t.ArmEnum == queryVisitTask.ArmEnum)
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode))
+ .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
+ .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
+ .ProjectTo(_mapper.ConfigurationProvider, new { criterionType = criterionType }).ToListAsync();
+
+
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+ exportInfo.List = list;
+
+
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(OverallTumorEvaluationExport), criterionType);
+ }
+
+ ///
+ /// 肿瘤疗效评估表 ( 目前 RECIST1.1)
+ ///
+ ///
+ [HttpPost]
+ public async Task GetEvaluationOfTumorEfficacy_Export(VisitTaskQuery queryVisitTask,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ //每次查询必须是单标准的
+ var criterionType = await _repository.Where(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
+
+ var query = _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned)
+
+ //.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
+ //.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
+ //.WhereIf(queryVisitTask.IsSelfAnalysis != null, t => t.IsSelfAnalysis == queryVisitTask.IsSelfAnalysis)
+
+ .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
+ .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
+
+ .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
+ .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
+ .WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
+ .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
+ .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
+ .WhereIf(queryVisitTask.ArmEnum != null, t => t.ArmEnum == queryVisitTask.ArmEnum)
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode))
+ .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
+ .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1));
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+
+ if (criterionType == CriterionType.RECIST1Pointt1)
+ {
+ var list = await query.ProjectTo(_mapper.ConfigurationProvider, new { criterionType = criterionType }).ToListAsync();
+
+ exportInfo.List = list;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1EvaluationOfTumorEfficacyExport), criterionType);
+
+
+ }
+
+ else
+ {
+ throw new Exception("当前标准导出还未支持");
+ }
+
+
+ }
+
+
+ ///
+ /// 评估病灶明细表 ( 目前 RECIST1.1 PGW3 表都是不同的)
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task GetDetailedOfEvaluatedLesion_Export(VisitTaskQuery queryVisitTask,
+ [FromServices] IRepository _commonDocumentRepository,
+ [FromServices] IDictionaryService _dictionaryService,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ //每次查询必须是单标准的
+ var criterionType = await _repository.Where(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
+
+ var query = _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned)
+
+ //.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
+ //.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
+ //.WhereIf(queryVisitTask.IsSelfAnalysis != null, t => t.IsSelfAnalysis == queryVisitTask.IsSelfAnalysis)
+
+ .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
+ .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
+
+ .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
+ .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
+ .WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
+ .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
+ .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
+ .WhereIf(queryVisitTask.ArmEnum != null, t => t.ArmEnum == queryVisitTask.ArmEnum)
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
+ .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode))
+ .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
+ .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1));
+
+ var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
+
+
+ if (criterionType == CriterionType.RECIST1Pointt1)
+ {
+ var list = await query.ProjectTo(_mapper.ConfigurationProvider, new { criterionType = criterionType, isEn_Us = _userInfo.IsEn_Us }).ToListAsync();
+
+
+ var exportList = list.SelectMany(c =>
+ {
+
+ return c.LesionList.Select(u =>
+ {
+ var clone = c.Clone();
+ clone.LessionCode = u.LessionCode;
+ clone.LessionType = u.LessionType;
+
+ clone.IsLymph = u.IsLymph;
+
+ clone.LessionLocation = u.LessionLocation;
+ clone.LessionOrgan = u.LessionOrgan;
+ clone.BodyPartDescription = u.BodyPartDescription;
+
+ //clone.MeasurementResult = u.MeasurementResult;
+ clone.LongDiameter = u.LongDiameter;
+ clone.ShortDiameter = u.ShortDiameter;
+ clone.LessionState = u.LessionState;
+
+ return clone;
+ });
+ }).ToList();
+ exportInfo.List = exportList;
+
+ return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1DetailedOfEvaluatedLesionExport), criterionType);
+
+
+ }
+
+ else
+ {
+ throw new Exception("当前标准导出还未支持");
+ }
+
+
+ }
+
+
+
+
+ #endregion
+ }
+}
diff --git a/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs b/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs
index 97b2810c7..a789b269e 100644
--- a/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs
@@ -117,6 +117,8 @@ namespace IRaCIS.Core.Application.ViewModel
public string Code { get; set; } = string.Empty;
+ public Guid? TrialReadingCriterionId { get; set; }
+
public Guid TrialId { get; set; }
public string AuthorizationCode { get; set; } = string.Empty;
diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
index f5f98fb96..6e474003d 100644
--- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
+++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
@@ -587,7 +587,7 @@ namespace IRaCIS.Core.Application.Contracts
}
- public class SelftAnalysisExport
+ public class AnalysisExortCommon
{
public Guid Id { get; set; }
public string TaskName { get; set; }
@@ -596,12 +596,6 @@ namespace IRaCIS.Core.Application.Contracts
public decimal VisitTaskNum { get; set; }
public bool? IsSelfAnalysis { get; set; }
- //自身一致性分析任务特有
-
- [DictionaryTranslateAttribute("YesOrNo")]
- public bool? IsAnalysisDiffToOriginalData { get; set; }
-
-
public string TrialReadingCriterionName { get; set; }
public CriterionType CriterionType { get; set; }
@@ -614,12 +608,12 @@ namespace IRaCIS.Core.Application.Contracts
public Arm ArmEnum { get; set; }
public string UserName { get; set; }
-
-
+
+
public bool IsBaseline { get; set; }
- [DictionaryTranslateAttribute("ExistDisease", nameof(SelftAnalysisExport.IsBaseline),"true")]
+ [DictionaryTranslateAttribute("ExistDisease", nameof(SelftAnalysisExport.IsBaseline), "true")]
[DictionaryTranslateAttribute("OverallAssessment", nameof(SelftAnalysisExport.IsBaseline), "false")]
public string EvaluateResult { get; set; }
@@ -628,6 +622,21 @@ namespace IRaCIS.Core.Application.Contracts
public string AgainEvaluateResult { get; set; } = String.Empty;
}
+ public class GroupAnalysisExport: AnalysisExortCommon
+ {
+
+ }
+
+ public class SelftAnalysisExport: AnalysisExortCommon
+ {
+ //自身一致性分析任务特有
+
+ [DictionaryTranslateAttribute("YesOrNo")]
+ public bool? IsAnalysisDiffToOriginalData { get; set; }
+
+
+ }
+
public class OverallTumorEvaluationExport
{
public String TrialSiteCode { get; set; } = String.Empty;
@@ -695,7 +704,7 @@ namespace IRaCIS.Core.Application.Contracts
//病灶编号
public string LessionCode { get; set; }
-
+
[DictionaryTranslateAttribute("LesionType")]
//病灶类型
public string LessionType { get; set; }
@@ -725,7 +734,7 @@ namespace IRaCIS.Core.Application.Contracts
//短径
public string ShortDiameter { get; set; }
- [DictionaryTranslateAttribute("TargetState")]
+ [DictionaryTranslateAttribute("TargetState")]
//病灶状态
public string LessionState { get; set; }
diff --git a/IRaCIS.Core.Application/Service/QC/QCListService.cs b/IRaCIS.Core.Application/Service/QC/QCListService.cs
index 73c908566..31197ac84 100644
--- a/IRaCIS.Core.Application/Service/QC/QCListService.cs
+++ b/IRaCIS.Core.Application/Service/QC/QCListService.cs
@@ -40,758 +40,6 @@ namespace IRaCIS.Core.Application.Image.QA
- #region 导表查询
-
-
- ///
- /// 影像上传列表 只导出已上传状态的访视记录
- ///
- ///
- ///
- ///
- ///
- [HttpPost]
- [AllowAnonymous]
- public async Task CRCVisitListExport(CRCVisitSearchDTO visitSearchDTO,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
- var svExpression = QCCommon.GetSubjectVisitFilter(visitSearchDTO.VisitPlanArray);
-
- var list = await _subjectVisitRepository.Where(x => x.TrialId == visitSearchDTO.TrialId)
- .Where(t => t.Subject.FinalSubjectVisitId != null ? t.VisitNum <= t.Subject.FinalSubjectVisit.VisitNum : true)
- .WhereIf(visitSearchDTO.SiteId != null, t => t.SiteId == visitSearchDTO.SiteId)
- .WhereIf(visitSearchDTO.SubjectId != null, t => t.Subject.Id == visitSearchDTO.SubjectId)
- .WhereIf(!string.IsNullOrEmpty(visitSearchDTO.SubjectInfo), t => t.Subject.Code.Contains(visitSearchDTO.SubjectInfo))
-
- .WhereIf(visitSearchDTO.VisitPlanArray != null && visitSearchDTO.VisitPlanArray?.Length > 0, svExpression)
- //.WhereIf(!string.IsNullOrEmpty(visitSearchDTO.VisitPlanInfo), visitSearchDTO.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(visitSearchDTO.VisitPlanInfo))
- .WhereIf(visitSearchDTO.AuditStateArray != null && visitSearchDTO.AuditStateArray?.Length > 0, t => visitSearchDTO.AuditStateArray!.Contains(t.AuditState))
- .WhereIf(visitSearchDTO.SubmitState != null, t => t.SubmitState == visitSearchDTO.SubmitState)
- .WhereIf(visitSearchDTO.ChallengeState != null, t => t.ChallengeState == visitSearchDTO.ChallengeState)
- .WhereIf(visitSearchDTO.IsUrgent != null, t => t.IsUrgent == visitSearchDTO.IsUrgent)
- .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
-
- list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.BlindName).ToList();
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == visitSearchDTO.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
-
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialCRCUploadImageList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CRCVisitExportDTO));
-
- }
-
-
-
-
- ///
- /// 质疑列表
- ///
- ///
- ///
- [HttpPost]
- [AllowAnonymous]
- public async Task GetQCChallengeList_Export(ChallengeQuery challengeQuery,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
-
- {
-
- var svExpression = QCCommon.GetQCChallengeFilter(challengeQuery.VisitPlanArray);
-
- var list = await _repository.Where(x => x.TrialId == challengeQuery.TrialId)
- //.WhereIf(challengeQuery.ChallengeState != null, t => t.SubjectVisit.ChallengeState == challengeQuery.ChallengeState)
- .WhereIf(challengeQuery.ReuploadEnum != null, t => t.ReuploadEnum == challengeQuery.ReuploadEnum)
- .WhereIf(challengeQuery.IsClosed != null, t => t.IsClosed == challengeQuery.IsClosed)
- .WhereIf(challengeQuery.SiteId != null, t => t.SubjectVisit.SiteId == challengeQuery.SiteId)
- .WhereIf(challengeQuery.SubjectId != null, t => t.SubjectVisit.SubjectId == challengeQuery.SubjectId)
- .WhereIf(challengeQuery.CreateUserId != null, t => t.CreateUserId == challengeQuery.CreateUserId)
- .WhereIf(!string.IsNullOrEmpty(challengeQuery.SubjectCode), t => t.SubjectVisit.Subject.Code.Contains(challengeQuery.SubjectCode))
- .WhereIf(challengeQuery.VisitPlanArray != null && challengeQuery.VisitPlanArray?.Length > 0, svExpression)
- //.WhereIf(!string.IsNullOrEmpty(challengeQuery.VisitPlanInfo), challengeQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.InPlan == false : t => t.SubjectVisit.VisitNum == decimal.Parse(challengeQuery.VisitPlanInfo))
- .WhereIf(challengeQuery.IsUrgent != null, t => t.SubjectVisit.IsUrgent == challengeQuery.IsUrgent)
- .WhereIf(challengeQuery.IsOverTime != null && challengeQuery.IsOverTime==true, t => t.IsClosed ? t.ClosedTime > t.DeadlineTime : DateTime.Now > t.DeadlineTime)
- .WhereIf(challengeQuery.IsOverTime != null && challengeQuery.IsOverTime == false, t => t.IsClosed ? t.ClosedTime < t.DeadlineTime : DateTime.Now < t.DeadlineTime)
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
-
- list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.ChallengeCode).ToList();
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == challengeQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialQCImageChanllengeList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(QCChanllengeExportDto));
- }
-
-
- ///
- /// 受试者信息导出表
- ///
- ///
- ///
- [HttpPost]
- public async Task GetSubjectList_Export(SubjectQueryParam param,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
- var list = await _repository.Where(u => u.TrialId == param.TrialId)
- .WhereIf(!string.IsNullOrWhiteSpace(param.Code), t => t.Code.Contains(param.Code))
- .WhereIf(!string.IsNullOrWhiteSpace(param.Name), t => t.ShortName.Contains(param.Name))
- .WhereIf(!string.IsNullOrWhiteSpace(param.Sex), t => t.Sex.Contains(param.Sex))
- .WhereIf(param.Status != null, t => t.Status == param.Status)
- .WhereIf(param.SiteId != null, t => t.SiteId == param.SiteId)
- // CRC 只负责他管理site的受试者
- .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
-
-
- list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.Code).ToList();
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == param.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SubjectExportDTO));
-
- }
-
-
-
- ///
- /// 受试者 阅片期 进度表 导出
- ///
- ///
- ///
- ///
- ///
- public async Task GetSubjectReadingPeriod_Export(GetReadModuleDto dto,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
-
- var list = await _repository.Where(u => u.TrialId == dto.TrialId)
- .WhereIf(dto.SubjectId != null, x => x.Id == dto.SubjectId)
- .WhereIf(dto.TrialSiteCode != null && dto.TrialSiteCode != string.Empty, x => x.TrialSite.TrialSiteCode == dto.TrialSiteCode)
- .WhereIf(dto.SubjectCode != null && dto.SubjectCode != string.Empty, x => x.Code == dto.SubjectCode)
- //.WhereIf(dto.ReadingStatus != null, x => x.ReadingStatus == dto.ReadingStatus)
-
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
-
-
- list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.Code).ToList();
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == dto.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SubjectExportDTO));
- }
-
-
- ///
- /// 阅片期信息表
- ///
- ///
- ///
- public async Task GetReadingPeriodList_Export(ReadPeriodQuery param,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
- var list = await _repository.Where(u => u.TrialId == param.TrialId)
-
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
-
- list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ToList();
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == param.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectReadingPeriodList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadPeriodExportDto));
-
- }
-
- ///
- /// 一致性核查 检查信息表
- ///
- ///
- ///
-
- [HttpPost]
- public async Task GetDicomAndNoneDicomStudyList_Export(StudyQuery studyQuery,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
- var svExpression = QCCommon.GetDicomStudySubjectVisitFilter(studyQuery.VisitPlanArray);
-
- var dicomStudyQuery = _repository.Where(t => t.TrialId == studyQuery.TrialId)
- .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
- .WhereIf(studyQuery.VisitPlanArray != null && studyQuery.VisitPlanArray?.Length > 0, svExpression)
- .WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo))
- .Select(t => new UnionStudyExportDTO()
- {
- VisitName = t.SubjectVisit.VisitName,
- VisitNum = t.SubjectVisit.VisitNum,
- IsDicom = true,
- SubjectCode = t.Subject.Code,
- Modality = t.Modalities,
- StudyCode = t.StudyCode,
- StudyTime = t.StudyTime,
-
- TrialSiteAliasName = t.TrialSite.TrialSiteAliasName,
-
- TrialSiteCode = t.TrialSite.TrialSiteCode,
-
- CheckState = t.SubjectVisit.CheckState,
- //Uploader = t.Uploader.UserName,
- //UploadTime = t.CreateTime
-
- });
-
- var svExpression2 = QCCommon.GetNoneDicomStudySubjectVisitFilter(studyQuery.VisitPlanArray);
-
-
- var nodeDicomStudyQuery = _repository.Where(t => t.TrialId == studyQuery.TrialId)
- .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
- .WhereIf(studyQuery.VisitPlanArray != null && studyQuery.VisitPlanArray?.Length > 0, svExpression2)
- .WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo))
-
- .Select(t => new UnionStudyExportDTO()
- {
-
- VisitName = t.SubjectVisit.VisitName,
- VisitNum = t.SubjectVisit.VisitNum,
- IsDicom = false,
- SubjectCode = t.Subject.Code,
- Modality = t.Modality,
- StudyCode = t.StudyCode,
- StudyTime = t.ImageDate,
-
- TrialSiteAliasName = t.TrialSite.TrialSiteAliasName,
-
- TrialSiteCode = t.TrialSite.TrialSiteCode,
-
- CheckState = t.SubjectVisit.CheckState,
-
- //Uploader = t.CreateUser.UserName,
- //UploadTime = t.CreateTime
-
- });
-
-
-
- var list = await dicomStudyQuery.Union(nodeDicomStudyQuery)
- .ToListAsync();
-
- list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitNum).ToList();
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == studyQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialStudyList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(UnionStudyExportDTO));
- }
-
-
- ///
- /// 一致性核查记录表
- ///
- ///
- ///
- [HttpPost]
- public async Task GetConsistencyVerificationList_Export(CheckQuery checkQuery,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
- var svExpression = QCCommon.GetSubjectVisitFilter(checkQuery.VisitPlanArray);
-
- var list = await _subjectVisitRepository.Where(x => x.TrialId == checkQuery.TrialId)
- .Where(x => x.AuditState == AuditStateEnum.QCPassed) //一致性核查中的,或者还没一致性核查的
- .WhereIf(checkQuery.CheckState != null, t => t.CheckState == checkQuery.CheckState)
- .WhereIf(checkQuery.SiteId != null, t => t.SiteId == checkQuery.SiteId)
- .WhereIf(!string.IsNullOrEmpty(checkQuery.SubjectInfo), t => t.Subject.Code.Contains(checkQuery.SubjectInfo))
- .WhereIf(checkQuery.VisitPlanArray != null && checkQuery.VisitPlanArray?.Length > 0, svExpression)
- .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//CRC 过滤负责的site
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
-
- list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitNum).ToList();
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == checkQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectVisitCheckList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(PMKCheckEXportDTO));
- }
-
-
-
-
- ///
- /// PM阅片跟踪
- ///
- ///
- ///
- [HttpPost]
- public async Task GetReadingTaskList_Export(VisitTaskQuery queryVisitTask,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
- var list = await _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.IsAnalysisCreate == false)
- //.Where(t => t.IsAnalysisCreate == false && t.DoctorUserId != null)
-
- .WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
- .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
- .WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
- .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
- .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
- .WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
- .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
- .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
- .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
-
-
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode) || t.BlindSubjectCode.Contains(queryVisitTask.SubjectCode))
- .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
- .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
-
- //var defalutSortArray = new string[] { nameof(VisitTask.IsUrgent) + " desc", nameof(VisitTask.SubjectId), nameof(VisitTask.VisitTaskNum) };
-
- list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
-
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialReadingTaskList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadingTaskExportDto));
- }
-
-
-
-
- ///
- /// PM 重阅追踪
- ///
- ///
- ///
- [HttpPost]
- public async Task GetReReadingTaskList_Export(VisitTaskQuery queryVisitTask,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
-
- var list = await _repository.Where(t => t.OriginalReReadingTask.TrialId == queryVisitTask.TrialId /*&& t.OriginalReReadingTask.IsAnalysisCreate == false*/)
- .WhereIf(queryVisitTask.RootReReadingTaskId != null, t => t.RootReReadingTaskId == queryVisitTask.RootReReadingTaskId || t.OriginalReReadingTaskId == queryVisitTask.RootReReadingTaskId)
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskCode), t => t.OriginalReReadingTask.TaskCode.Contains(queryVisitTask.TaskCode!) || t.RootReReadingTask.TaskCode.Contains(queryVisitTask.TaskCode!))
- .WhereIf(queryVisitTask.SiteId != null, t => t.OriginalReReadingTask.Subject.SiteId == queryVisitTask.SiteId)
- .WhereIf(queryVisitTask.TaskState != null, t => t.OriginalReReadingTask.TaskState == queryVisitTask.TaskState)
- .WhereIf(queryVisitTask.ReReadingApplyState != null, t => t.OriginalReReadingTask.ReReadingApplyState == queryVisitTask.ReReadingApplyState)
- .WhereIf(queryVisitTask.SubjectId != null, t => t.OriginalReReadingTask.SubjectId == queryVisitTask.SubjectId)
- .WhereIf(queryVisitTask.IsUrgent != null, t => t.OriginalReReadingTask.IsUrgent == queryVisitTask.IsUrgent)
- .WhereIf(queryVisitTask.DoctorUserId != null, t => t.OriginalReReadingTask.DoctorUserId == queryVisitTask.DoctorUserId)
- .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.OriginalReReadingTask.ReadingTaskState == queryVisitTask.ReadingTaskState)
- .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.OriginalReReadingTask.TaskAllocationState == queryVisitTask.TaskAllocationState)
- .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.OriginalReReadingTask.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
-
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.OriginalReReadingTask.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate) || (t.OriginalReReadingTask.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate == false))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.OriginalReReadingTask.TaskName.Contains(queryVisitTask.TaskName) || t.OriginalReReadingTask.TaskBlindName.Contains(queryVisitTask.TaskName))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.OriginalReReadingTask.Subject.Code.Contains(queryVisitTask.SubjectCode) || t.OriginalReReadingTask.BlindSubjectCode.Contains(queryVisitTask.SubjectCode))
- .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime > queryVisitTask.BeginAllocateDate)
- .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
-
- //var defalutSortArray = new string[] { nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.IsUrgent) + " desc", nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.SubjectId), nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.VisitTaskNum) };
-
- list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialReReadingTaskList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReReadingTaskExportDto));
- }
-
-
-
- ///
- /// PM 医学审核(挑选任务生成后的列表)
- ///
- ///
- ///
- [HttpPost]
- public async Task GetMedicalReviewTaskList_Export(TaskMedicalReviewQuery inQuery,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
- var list = await _repository.Where(t => t.VisitTask.TrialId == inQuery.TrialId)
- .WhereIf(inQuery.SiteId != null, t => t.VisitTask.Subject.SiteId == inQuery.SiteId)
- .WhereIf(inQuery.SubjectId != null, t => t.VisitTask.SubjectId == inQuery.SubjectId)
- .WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => t.VisitTask.Subject.Code.Contains(inQuery.SubjectCode))
- .WhereIf(!string.IsNullOrEmpty(inQuery.TaskName), t => t.VisitTask.TaskName.Contains(inQuery.TaskName) || t.VisitTask.TaskBlindName.Contains(inQuery.TaskName))
- .WhereIf(inQuery.IsUrgent != null, t => t.VisitTask.IsUrgent == inQuery.IsUrgent)
- .WhereIf(inQuery.DoctorUserId != null, t => t.VisitTask.DoctorUserId == inQuery.DoctorUserId)
- .WhereIf(!string.IsNullOrEmpty(inQuery.TrialSiteCode), t => (t.VisitTask.BlindTrialSiteCode.Contains(inQuery.TrialSiteCode) && t.VisitTask.IsAnalysisCreate) || (t.VisitTask.Subject.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode) && t.VisitTask.IsAnalysisCreate == false))
- .WhereIf(inQuery.ReadingCategory != null, t => t.VisitTask.ReadingCategory == inQuery.ReadingCategory)
- .WhereIf(inQuery.ReadingTaskState != null, t => t.VisitTask.ReadingTaskState == inQuery.ReadingTaskState)
-
- .WhereIf(inQuery.TrialReadingCriterionId != null, t => t.VisitTask.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
-
- list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
-
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TaskMedicalReviewExportDto));
- }
-
-
-
- ///
- /// 自身一致性分析
- ///
- ///
- ///
- [HttpPost]
- public async Task GetSelfAnalysisTaskList_Export(VisitTaskQuery queryVisitTask,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
- //产生一致性分析的Subject
-
- var subjectQuerybal= _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsSelfAnalysis == true).Select(t => t.SubjectId).Distinct();
-
- var allList = await _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && subjectQuerybal.Contains(t.SubjectId) && t.ReadingCategory == ReadingCategory.Visit)
- .Where(t => t.IsSelfAnalysis == true || t.IsSelfAnalysis == null) //一致性分析的结果 + 正常任务的结果 + 仅仅访视的结果
-
- //.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
- //.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
- //.WhereIf(queryVisitTask.IsSelfAnalysis != null, t => t.IsSelfAnalysis == queryVisitTask.IsSelfAnalysis)
-
- .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
- .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
-
- .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
- .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
- .WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
- .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
- .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
- .WhereIf(queryVisitTask.ArmEnum != null, t => t.ArmEnum == queryVisitTask.ArmEnum)
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode))
- .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
- .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
-
-
-
- var list = allList.Where(t => t.IsSelfAnalysis == null).OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
-
- //To do 根据任务Id 找对评估结果,这里需要考虑标准 以及对应的翻译
-
- //基线和访视的评估结果翻译枚举 分别对应着
-
- foreach (var item in list)
- {
- //找到一致性分析的结果
- var selfAnalysisTask = allList.Where(t => t.IsSelfAnalysis == true && t.SubjectCode == item.SubjectCode && t.VisitTaskNum == item.VisitTaskNum && t.TaskName == t.TaskName).FirstOrDefault();
-
-
- //因为基线的评估结果是 是否存在疾病 而 其他访视的结果是 整体肿瘤评估结果 是用不同的枚举翻译的 所以这里手动翻译 不把翻译逻辑耦合到通用的翻译代码里面 在此特殊处理
-
- item.AgainEvaluateResult = selfAnalysisTask?.EvaluateResult ?? String.Empty ;
-
- //将自身一致性分析的字段 赋值到访视任务这个字段
- item.IsAnalysisDiffToOriginalData = selfAnalysisTask.IsAnalysisDiffToOriginalData;
-
- }
-
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(SelftAnalysisExport));
- }
-
-
- ///
- /// 组件一致性分析
- ///
- ///
- ///
- [HttpPost]
- public async Task GetGroupAnalysisTaskList_Export(VisitTaskQuery queryVisitTask,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
- //产生组间一致性分析的Subject
-
- var subjectQuerybal = _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsSelfAnalysis == false).Select(t => t.SubjectId).Distinct();
-
- var allList = await _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && subjectQuerybal.Contains(t.SubjectId) &&t.ReadingCategory==ReadingCategory.Visit)
- .Where(t => t.IsSelfAnalysis == false || t.IsSelfAnalysis == null) //一致性分析的结果 + 正常任务的结果 +仅仅访视的结果
-
- //.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
- //.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
- //.WhereIf(queryVisitTask.IsSelfAnalysis != null, t => t.IsSelfAnalysis == queryVisitTask.IsSelfAnalysis)
-
- .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
- .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
-
- .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
- .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
- .WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
- .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
- .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
- .WhereIf(queryVisitTask.ArmEnum != null, t => t.ArmEnum == queryVisitTask.ArmEnum)
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode))
- .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
- .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
-
-
-
- var list = allList.Where(t => t.IsSelfAnalysis == null).OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
-
- //To do 根据任务Id 找对评估结果,这里需要考虑标准 以及对应的翻译
-
-
-
- foreach (var item in list)
- {
- //找到一致性分析的结果
- var origenalTask = allList.Where(t => t.IsSelfAnalysis == false && t.SubjectCode == item.SubjectCode && t.VisitTaskNum == item.VisitTaskNum && t.TaskName == t.TaskName).FirstOrDefault();
-
- item.AgainEvaluateResult = origenalTask?.EvaluateResult ?? String.Empty;
-
- }
-
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TaskMedicalReviewExportDto));
- }
-
-
-
-
-
- ///
- /// 整体肿瘤评估 多个标准一个接口 Excel 列是一样的
- ///
- ///
- ///
- [HttpPost]
- public async Task GetOverallTumorEvaluationList_Export(VisitTaskQuery queryVisitTask,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
- //每次查询必须是单标准的
- var criterionType = await _repository.Where(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
-
- var list = await _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate==false && t.ReadingTaskState==ReadingTaskState.HaveSigned)
-
- //.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
- //.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
- //.WhereIf(queryVisitTask.IsSelfAnalysis != null, t => t.IsSelfAnalysis == queryVisitTask.IsSelfAnalysis)
-
- .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
- .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
-
- .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
- .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
- .WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
- .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
- .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
- .WhereIf(queryVisitTask.ArmEnum != null, t => t.ArmEnum == queryVisitTask.ArmEnum)
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode))
- .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
- .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
- .ProjectTo(_mapper.ConfigurationProvider,new { criterionType = criterionType }).ToListAsync();
-
-
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
- exportInfo.List = list;
-
-
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(OverallTumorEvaluationExport), criterionType);
- }
-
- ///
- /// 肿瘤疗效评估表 ( 目前 RECIST1.1)
- ///
- ///
- ///
- [HttpPost]
- public async Task GetEvaluationOfTumorEfficacy_Export(VisitTaskQuery queryVisitTask,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
- //每次查询必须是单标准的
- var criterionType = await _repository.Where(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
-
- var query = _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned)
-
- //.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
- //.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
- //.WhereIf(queryVisitTask.IsSelfAnalysis != null, t => t.IsSelfAnalysis == queryVisitTask.IsSelfAnalysis)
-
- .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
- .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
-
- .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
- .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
- .WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
- .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
- .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
- .WhereIf(queryVisitTask.ArmEnum != null, t => t.ArmEnum == queryVisitTask.ArmEnum)
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode))
- .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
- .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1));
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
-
- if (criterionType == CriterionType.RECIST1Pointt1)
- {
- var list = await query.ProjectTo(_mapper.ConfigurationProvider, new { criterionType = criterionType }).ToListAsync();
-
- exportInfo.List = list;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1EvaluationOfTumorEfficacyExport), criterionType);
-
-
- }
-
- else
- {
- throw new Exception("当前标准导出还未支持");
- }
-
-
- }
-
-
- ///
- /// 评估病灶明细表 ( 目前 RECIST1.1 PGW3 表都是不同的)
- ///
- ///
- ///
- [HttpPost]
- public async Task GetDetailedOfEvaluatedLesion_Export(VisitTaskQuery queryVisitTask,
- [FromServices] IRepository _commonDocumentRepository,
- [FromServices] IDictionaryService _dictionaryService)
- {
-
- //每次查询必须是单标准的
- var criterionType = await _repository.Where(t => t.Id == queryVisitTask.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
-
- var query = _repository.Where(t => t.TrialId == queryVisitTask.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned)
-
- //.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
- //.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
- //.WhereIf(queryVisitTask.IsSelfAnalysis != null, t => t.IsSelfAnalysis == queryVisitTask.IsSelfAnalysis)
-
- .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
- .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
-
- .WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
- .WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
- .WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
- .WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
- .WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
- .WhereIf(queryVisitTask.ArmEnum != null, t => t.ArmEnum == queryVisitTask.ArmEnum)
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
- .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => t.Subject.Code.Contains(queryVisitTask.SubjectCode))
- .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
- .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1));
-
- var exportInfo = (await _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
-
-
- if (criterionType == CriterionType.RECIST1Pointt1)
- {
- var list = await query.ProjectTo(_mapper.ConfigurationProvider, new { criterionType = criterionType, isEn_Us=_userInfo.IsEn_Us }).ToListAsync();
-
-
- var exportList = list.SelectMany(c =>
- {
-
- return c.LesionList.Select(u =>
- {
- var clone = c.Clone();
- clone.LessionCode = u.LessionCode;
- clone.LessionType = u.LessionType;
-
- clone.IsLymph = u.IsLymph;
-
- clone.LessionLocation = u.LessionLocation;
- clone.LessionOrgan = u.LessionOrgan;
- clone.BodyPartDescription = u.BodyPartDescription;
-
- //clone.MeasurementResult = u.MeasurementResult;
- clone.LongDiameter = u.LongDiameter;
- clone.ShortDiameter = u.ShortDiameter;
- clone.LessionState = u.LessionState;
-
- return clone;
- });
- }).ToList();
- exportInfo.List = exportList;
-
- return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1DetailedOfEvaluatedLesionExport), criterionType);
-
-
- }
-
- else
- {
- throw new Exception("当前标准导出还未支持");
- }
-
-
- }
-
-
-
-
- #endregion
-
#region CRC上传、质疑页面
diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
index 52c296998..3b2961c58 100644
--- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
@@ -127,7 +127,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code));
- CreateMap()
+ CreateMap()
.ForMember(o => o.TrialReadingCriterionName, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionName))
.ForMember(o => o.CriterionType, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionType))
@@ -139,7 +139,11 @@ namespace IRaCIS.Core.Application.Service
: u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstOrDefault().Answer ))
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName));
-
+
+ CreateMap().IncludeBase();
+ CreateMap().IncludeBase();
+
+
CriterionType? criterionType = null;
CreateMap()