diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index f4e8c5515..f1b633343 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -7017,6 +7017,13 @@ + + + 一致性核查表 + + + + CRC 访视上传列表 diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index a5593b1a9..04d33e922 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -102,7 +102,7 @@ namespace IRaCIS.Core.Application.Service.Allocation - var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == querySubjectAssign.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder, x.ReadingType,x.IsArbitrationReading,x.IsOncologyReading }).FirstOrDefaultAsync()).IfNullThrowException(); + var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == querySubjectAssign.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder, x.ReadingType,x.IsArbitrationReading,x.IsOncologyReading ,x.IsGlobalReading}).FirstOrDefaultAsync()).IfNullThrowException(); return (pageList, criterionConfig); } diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs index c3eb93690..bef7a96b2 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs @@ -322,6 +322,34 @@ namespace IRaCIS.Core.Application.Contracts } + + public class UnionStudyExportDTO + { + + public string Modalities { get; set; } = string.Empty; + + + public DateTime? StudyTime { get; set; } + + public string SubjectCode { get; set; } = String.Empty; + + public string VisitName { get; set; } = string.Empty; + + public decimal VisitNum { get; set; } + + public string TrialSiteCode { get; set; } = string.Empty; + + public string TrialSiteAliasName { get; set; } = string.Empty; + + //public string Uploader { get; set; } = string.Empty; + + //public DateTime UploadTime { get; set; } + + public string StudyCode { get; set; } + + [DictionaryTranslateAttribute("YesOrNo")] + public bool IsDicom { get; set; } + } #endregion diff --git a/IRaCIS.Core.Application/Service/QC/QCListService.cs b/IRaCIS.Core.Application/Service/QC/QCListService.cs index c1f59bc1b..75044331e 100644 --- a/IRaCIS.Core.Application/Service/QC/QCListService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCListService.cs @@ -174,10 +174,89 @@ namespace IRaCIS.Core.Application.Image.QA exportInfo.List = list; - return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialSubjectList_Export, exportInfo, "", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ReadPeriodExportDto)); + 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, + Modalities = t.Modalities, + StudyCode = t.StudyCode, + StudyTime = t.StudyTime, + + TrialSiteAliasName = t.TrialSite.TrialSiteAliasName, + + TrialSiteCode = t.TrialSite.TrialSiteCode, + + //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, + Modalities = t.Modality, + StudyCode = t.StudyCode, + StudyTime = t.ImageDate, + + TrialSiteAliasName = t.TrialSite.TrialSiteAliasName, + + TrialSiteCode = t.TrialSite.TrialSiteCode, + + //Uploader = t.CreateUser.UserName, + //UploadTime = t.CreateTime + + }); + + + + var list = await dicomStudyQuery.Union(nodeDicomStudyQuery) + .ToListAsync(); + + 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)); + } + + + #endregion diff --git a/IRaCIS.Core.Domain/_Config/_StaticData.cs b/IRaCIS.Core.Domain/_Config/_StaticData.cs index b21ba019b..0236b4fe5 100644 --- a/IRaCIS.Core.Domain/_Config/_StaticData.cs +++ b/IRaCIS.Core.Domain/_Config/_StaticData.cs @@ -128,6 +128,12 @@ public static class StaticData public const string TrialQCImageChanllengeList_Export = "TrialQCImageChanllengeList_Export"; public const string TrialSubjectList_Export = "TrialSubjectList_Export"; + + public const string TrialSubjectReadingPeriodList_Export = "TrialSubjectReadingPeriodList_Export"; + + public const string TrialStudyList_Export = "TrialStudyList_Export"; + + }