From f9183dc6f46316ff12d29c42a7eb8a460a4284b5 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 6 May 2022 15:08:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/StudyController.cs | 2 + .../Service/ImageAndDoc/StudyListService.cs | 243 +++++++++++------- .../QC/DTO/QCQuestionConfigureViewModel.cs | 2 + .../Service/QC/NoneDicomStudyService.cs | 17 +- .../Service/QC/QCQuestionService.cs | 1 + IRaCIS.Core.Domain/Image/DicomStudyMonitor.cs | 1 + 6 files changed, 165 insertions(+), 101 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/StudyController.cs b/IRaCIS.Core.API/Controllers/StudyController.cs index abe758c64..1e7e34816 100644 --- a/IRaCIS.Core.API/Controllers/StudyController.cs +++ b/IRaCIS.Core.API/Controllers/StudyController.cs @@ -206,6 +206,8 @@ namespace IRaCIS.Api.Controllers SubjectId = savedInfo.SubjectId, SubjectVisitId = savedInfo.SubjectVisitId, StudyId = archivedStudyIds[0], + + StudyCode= studycode, UploadStartTime = startTime, UploadFinishedTime = DateTime.Now, //TotalMillisecondsInterval = (DateTime.Now- startTime).TotalMilliseconds, diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyListService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyListService.cs index 6fc8be56a..7b87553ab 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyListService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyListService.cs @@ -132,103 +132,160 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc public async Task> GetDicomAndNoneDicomStudyMonitorList(StudyQuery studyQuery) { - var dicomStudyQuery = _repository.Where(t => t.TrialId == studyQuery.TrialId && t.IsDicom) - .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id)) - .WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo)) - .WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo)) - .Select(t => new UnionStudyMonitorModel() - { - TrialId = t.TrialId, - SiteId = t.SiteId, - SubjectId = t.SubjectId, - SubjectVisitId = t.SubjectVisitId, - VisitName = t.SubjectVisit.VisitName, - VisitNum = t.SubjectVisit.VisitNum, - - - - SubjectCode = t.Subject.Code, - - - TrialSiteAliasName = t.TrialSite.TrialSiteAliasName, - - TrialSiteCode = t.TrialSite.TrialSiteCode, - - Uploader = t.Uploader.FullName, - - UploadTime = t.CreateTime, - - - IP = t.IP, - FileCount = t.FileCount, - FileSize = t.FileSize, - UploadFinishedTime = t.UploadFinishedTime, - UploadStartTime = t.UploadStartTime, - - TotalMillisecondsInterval = t.TotalMillisecondsInterval, - - IsDicomReUpload = t.IsDicomReUpload, - StudyId = t.Id, - IsDicom = t.IsDicom, - - StudyCode = t.DicomStudy.StudyCode - //DicomStudyCode = t.DicomStudy.StudyCode, - //NoneDicomCode = 0, - - }); - - //.ProjectTo(_mapper.ConfigurationProvider); - - - - var nodeDicomStudyQuery = _repository.Where(t => t.TrialId == studyQuery.TrialId && t.IsDicom == false) - .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id)) - .WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo)) - .WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo)) - + var StudyMonitorQuery = _repository.Where(t => t.TrialId == studyQuery.TrialId && t.IsDicom) + .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id)) + .WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo)) + .WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo)) + .WhereIf(studyQuery.SubjectId != null, t => t.SubjectId == studyQuery.SubjectId) + .WhereIf(studyQuery.SubjectVisitId != null, t => t.SubjectId == studyQuery.SubjectVisitId) + .WhereIf(studyQuery.SiteId != null, t => t.SiteId == studyQuery.SiteId) .Select(t => new UnionStudyMonitorModel() - { - - TrialId = t.TrialId, - SiteId = t.SiteId, - SubjectId = t.SubjectId, - SubjectVisitId = t.SubjectVisitId, - VisitName = t.SubjectVisit.VisitName, - VisitNum = t.SubjectVisit.VisitNum, - SubjectCode = t.Subject.Code, - TrialSiteAliasName = t.TrialSite.TrialSiteAliasName, - TrialSiteCode = t.TrialSite.TrialSiteCode, - Uploader = t.Uploader.FullName, - UploadTime = t.CreateTime, - - IP = t.IP, - FileCount = t.FileCount, - FileSize = t.FileSize, - UploadFinishedTime = t.UploadFinishedTime, - UploadStartTime = t.UploadStartTime, - - TotalMillisecondsInterval = t.TotalMillisecondsInterval, - - IsDicomReUpload = t.IsDicomReUpload, - StudyId = t.Id, - IsDicom = t.IsDicom, - - StudyCode = t.NoneDicomStudy.StudyCode - - //DicomStudyCode = string.Empty, - //NoneDicomCode = t.NoneDicomStudy.Code, - - }); - - //.ProjectTo(_mapper.ConfigurationProvider); + { + TrialId = t.TrialId, + SiteId = t.SiteId, + SubjectId = t.SubjectId, + SubjectVisitId = t.SubjectVisitId, + VisitName = t.SubjectVisit.VisitName, + VisitNum = t.SubjectVisit.VisitNum, + + + + SubjectCode = t.Subject.Code, + + + TrialSiteAliasName = t.TrialSite.TrialSiteAliasName, + + TrialSiteCode = t.TrialSite.TrialSiteCode, + + Uploader = t.Uploader.FullName, + + UploadTime = t.CreateTime, + + + IP = t.IP, + FileCount = t.FileCount, + FileSize = t.FileSize, + UploadFinishedTime = t.UploadFinishedTime, + UploadStartTime = t.UploadStartTime, + + TotalMillisecondsInterval = t.TotalMillisecondsInterval, + + IsDicomReUpload = t.IsDicomReUpload, + StudyId = t.Id, + IsDicom = t.IsDicom, + + StudyCode = t.StudyCode + + + }); + + return await StudyMonitorQuery.ToPagedListAsync(studyQuery.PageIndex, studyQuery.PageSize, string.IsNullOrEmpty(studyQuery.SortField) ? "UploadTime" : studyQuery.SortField, studyQuery.Asc); + + + + #region 冗余查询 + //var dicomStudyQuery = _repository.Where(t => t.TrialId == studyQuery.TrialId && t.IsDicom) + // .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id)) + // .WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo)) + // .WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo)) + // .Select(t => new UnionStudyMonitorModel() + // { + // TrialId = t.TrialId, + // SiteId = t.SiteId, + // SubjectId = t.SubjectId, + // SubjectVisitId = t.SubjectVisitId, + // VisitName = t.SubjectVisit.VisitName, + // VisitNum = t.SubjectVisit.VisitNum, + + + + // SubjectCode = t.Subject.Code, + + + // TrialSiteAliasName = t.TrialSite.TrialSiteAliasName, + + // TrialSiteCode = t.TrialSite.TrialSiteCode, + + // Uploader = t.Uploader.FullName, + + // UploadTime = t.CreateTime, + + + // IP = t.IP, + // FileCount = t.FileCount, + // FileSize = t.FileSize, + // UploadFinishedTime = t.UploadFinishedTime, + // UploadStartTime = t.UploadStartTime, + + // TotalMillisecondsInterval = t.TotalMillisecondsInterval, + + // IsDicomReUpload = t.IsDicomReUpload, + // StudyId = t.Id, + // IsDicom = t.IsDicom, + + // StudyCode = t.DicomStudy.StudyCode + // //DicomStudyCode = t.DicomStudy.StudyCode, + // //NoneDicomCode = 0, + + // }); + + ////.ProjectTo(_mapper.ConfigurationProvider); + + + + //var nodeDicomStudyQuery = _repository.Where(t => t.TrialId == studyQuery.TrialId && t.IsDicom == false) + // .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id)) + // .WhereIf(!string.IsNullOrEmpty(studyQuery.VisitPlanInfo), studyQuery.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(studyQuery.VisitPlanInfo)) + // .WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo)) + + // .Select(t => new UnionStudyMonitorModel() + // { + + // TrialId = t.TrialId, + // SiteId = t.SiteId, + // SubjectId = t.SubjectId, + // SubjectVisitId = t.SubjectVisitId, + // VisitName = t.SubjectVisit.VisitName, + // VisitNum = t.SubjectVisit.VisitNum, + // SubjectCode = t.Subject.Code, + // TrialSiteAliasName = t.TrialSite.TrialSiteAliasName, + // TrialSiteCode = t.TrialSite.TrialSiteCode, + // Uploader = t.Uploader.FullName, + // UploadTime = t.CreateTime, + + // IP = t.IP, + // FileCount = t.FileCount, + // FileSize = t.FileSize, + // UploadFinishedTime = t.UploadFinishedTime, + // UploadStartTime = t.UploadStartTime, + + // TotalMillisecondsInterval = t.TotalMillisecondsInterval, + + // IsDicomReUpload = t.IsDicomReUpload, + // StudyId = t.Id, + // IsDicom = t.IsDicom, + + // StudyCode = t.NoneDicomStudy.StudyCode + + // //DicomStudyCode = string.Empty, + // //NoneDicomCode = t.NoneDicomStudy.Code, + + // }); + + ////.ProjectTo(_mapper.ConfigurationProvider); + + + //var unionQuery = dicomStudyQuery.Union(nodeDicomStudyQuery) + // .WhereIf(studyQuery.SubjectId != null, t => t.SubjectId == studyQuery.SubjectId) + // .WhereIf(studyQuery.SubjectVisitId != null, t => t.SubjectId == studyQuery.SubjectVisitId) + // .WhereIf(studyQuery.SiteId != null, t => t.SiteId == studyQuery.SiteId); + + //return await unionQuery.ToPagedListAsync(studyQuery.PageIndex, studyQuery.PageSize, string.IsNullOrEmpty(studyQuery.SortField) ? "UploadTime" : studyQuery.SortField, studyQuery.Asc); + + #endregion - var unionQuery = dicomStudyQuery.Union(nodeDicomStudyQuery) - .WhereIf(studyQuery.SubjectId != null, t => t.SubjectId == studyQuery.SubjectId) - .WhereIf(studyQuery.SubjectVisitId != null, t => t.SubjectId == studyQuery.SubjectVisitId) - .WhereIf(studyQuery.SiteId != null, t => t.SiteId == studyQuery.SiteId); - return await unionQuery.ToPagedListAsync(studyQuery.PageIndex, studyQuery.PageSize, string.IsNullOrEmpty(studyQuery.SortField) ? "UploadTime" : studyQuery.SortField, studyQuery.Asc); } diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCQuestionConfigureViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCQuestionConfigureViewModel.cs index b38368021..6d2a7b8c7 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QCQuestionConfigureViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QCQuestionConfigureViewModel.cs @@ -36,6 +36,8 @@ namespace IRaCIS.Core.Application.Contracts /// TypeValue public string Type { get; set; } = String.Empty; + public bool? IsEnable { get; set; } + } /// QCQuestionAddOrEdit 列表查询参数模型 diff --git a/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs index c1b77630a..74f44a351 100644 --- a/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs +++ b/IRaCIS.Core.Application/Service/QC/NoneDicomStudyService.cs @@ -119,17 +119,17 @@ namespace IRaCIS.Core.Application.Contracts } [TypeFilter(typeof(TrialResourceFilter))] - [HttpDelete("{noneDicomStudyId:guid}/{trialId:guid}")] + [HttpDelete("{trialId:guid}/{noneDicomStudyId:guid}")] public async Task DeleteNoneDicomStudy(Guid noneDicomStudyId) { - var noneDicomStudy = (await _noneDicomStudyRepository.FirstOrDefaultAsync(t => t.Id == noneDicomStudyId)).IfNullThrowException(); - await _noneDicomStudyRepository.DeleteAsync(noneDicomStudy); + await _noneDicomStudyRepository.DeleteFromQueryAsync( noneDicomStudyId); await _noneDicomStudyFileRepository.BatchDeleteNoTrackingAsync(t => t.NoneDicomStudyId == noneDicomStudyId); - await _studyMonitorRepository.BatchDeleteNoTrackingAsync(t => t.StudyId == noneDicomStudyId); + //确认需求 不删除 + //await _studyMonitorRepository.BatchDeleteNoTrackingAsync(t => t.StudyId == noneDicomStudyId); await _noneDicomStudyRepository.SaveChangesAsync(); @@ -137,14 +137,13 @@ namespace IRaCIS.Core.Application.Contracts } - [HttpDelete("{noneDicomStudyFileId:guid}")] + [HttpDelete("{trialId:guid}/{noneDicomStudyFileId:guid}")] public async Task DeleteNoneDicomStudyFile(Guid noneDicomStudyFileId) { - var subjectVisitId = await _noneDicomStudyFileRepository.Where(t => t.Id == noneDicomStudyFileId).Select(t => t.NoneDicomStudy.SubjectVisitId).FirstOrDefaultAsync(); + //var subjectVisitId = await _noneDicomStudyFileRepository.Where(t => t.Id == noneDicomStudyFileId).Select(t => t.NoneDicomStudy.SubjectVisitId).FirstOrDefaultAsync(); var success = await _noneDicomStudyFileRepository.BatchDeleteNoTrackingAsync(t => t.Id == noneDicomStudyFileId); - return ResponseOutput.Ok(); } @@ -231,6 +230,8 @@ namespace IRaCIS.Core.Application.Contracts // 上传非Dicom 后 将状态改为待提交 分为普通上传 和QC后重传 普通上传时才改为待提交 await _repository.BatchUpdateAsync(t => t.Id == subjectVisitId && t.SubmitState == SubmitStateEnum.None, u => new SubjectVisit() { SubmitState = SubmitStateEnum.ToSubmit }); + var studyCode= await _noneDicomStudyRepository.Where(t=>t.Id== noneDicomStudyId).Select(t => t.StudyCode).FirstOrDefaultAsync(); + await _studyMonitorRepository.AddAsync(new StudyMonitor() { FileCount = formCollection.Files.Count, @@ -238,7 +239,7 @@ namespace IRaCIS.Core.Application.Contracts IsDicom = false, IsDicomReUpload = false, StudyId = noneDicomStudyId, - + StudyCode= studyCode, UploadStartTime = startTime, UploadFinishedTime = DateTime.Now, IP = _userInfo.IP, diff --git a/IRaCIS.Core.Application/Service/QC/QCQuestionService.cs b/IRaCIS.Core.Application/Service/QC/QCQuestionService.cs index 701fb596c..606d288e4 100644 --- a/IRaCIS.Core.Application/Service/QC/QCQuestionService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCQuestionService.cs @@ -30,6 +30,7 @@ namespace IRaCIS.Core.Application.Contracts var QCQuestionQueryable = _qcQuestionRepository .WhereIf(!string.IsNullOrWhiteSpace(queryQCQuestionConfigure.QuestionName), t => t.QuestionName.Contains(queryQCQuestionConfigure.QuestionName)) .WhereIf(!string.IsNullOrWhiteSpace(queryQCQuestionConfigure.Type), t => t.Type.Contains(queryQCQuestionConfigure.Type)) + .WhereIf(queryQCQuestionConfigure.IsEnable!=null, t => t.IsEnable==queryQCQuestionConfigure.IsEnable) .ProjectTo(_mapper.ConfigurationProvider); return await QCQuestionQueryable.ToListAsync(); diff --git a/IRaCIS.Core.Domain/Image/DicomStudyMonitor.cs b/IRaCIS.Core.Domain/Image/DicomStudyMonitor.cs index 2616aa23b..cd4f014e9 100644 --- a/IRaCIS.Core.Domain/Image/DicomStudyMonitor.cs +++ b/IRaCIS.Core.Domain/Image/DicomStudyMonitor.cs @@ -50,6 +50,7 @@ namespace IRaCIS.Core.Domain.Models public int FileCount { get; set; } + public string StudyCode { get; set; } = string.Empty; public Guid TrialId { get; set; }