diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 3b5e60af4..77c318f85 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -537,9 +537,19 @@ 访视名称 - + - 干系人 + 干系人Id + + + + + 干系人姓名 + + + + + 状态 @@ -642,6 +652,11 @@ 是否为访视 + + + 访视Num + + 是否为PD进展 @@ -3067,7 +3082,7 @@ - 获取影像阅片的预览 + 获取影像阅片的预览 // 需要清除之前已经选中的 @@ -3118,14 +3133,14 @@ 生成的阅片模块(在大列表上展示的) 阅片期 - + 获取读片模块 - 获取单条信息 + 获取单条详情信息 diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/GetReadModuleDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/GetReadModuleDto.cs index 2a7b499f5..57797a266 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/GetReadModuleDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/GetReadModuleDto.cs @@ -13,6 +13,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid? TrialId { get; set; } public Guid? SubjectId { get; set; } + + } public class GetSubjectReadVisitsOutDto @@ -131,9 +133,19 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string SubjectVisitName { get; set; } /// - /// 干系人 + /// 干系人Id /// - public string Stakeholders { get; set; } + public List StakeholderIds { get; set; } + + /// + /// 干系人姓名 + /// + public List StakeholderNames { get; set; } + + /// + /// 状态 + /// + public ReadModuleEnum? Status { get; set; } } public class GetReadModuleOutDto @@ -242,6 +254,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public bool IsVisit { get; set; } + /// + /// 访视Num + /// + public decimal? VisitNum { get; set; } + /// /// 是否为PD进展 /// diff --git a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs index 837da754b..49bbd1685 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs @@ -25,20 +25,29 @@ namespace IRaCIS.Application.Services public IRepository _subjectVisitRepository; private readonly IRepository _subjectRepository; private readonly IRepository _visitstageRepository; + private readonly IRepository _userRepository; + private readonly IRepository _dicomInstanceRepository; + private readonly IRepository _noneDicomStudyFileRepository; private readonly IRepository _readingPeriodSetRepository; private readonly IRepository _readModuleRepository; public ReadModuleService(IRepository subjectVisitRepository, IRepository subjectRepository, - IRepository visitstageRepository, - IRepository readingPeriodSetRepository, - IRepository readModuleRepository + IRepository visitstageRepository, + IRepository UserRepository, + IRepository dicomInstanceRepository, + IRepository noneDicomStudyFileRepository, + IRepository readingPeriodSetRepository, + IRepository readModuleRepository ) { - _subjectVisitRepository = subjectVisitRepository; + this._subjectVisitRepository = subjectVisitRepository; this._subjectRepository = subjectRepository; this._visitstageRepository = visitstageRepository; + this._userRepository = UserRepository; + this._dicomInstanceRepository = dicomInstanceRepository; + this._noneDicomStudyFileRepository = noneDicomStudyFileRepository; this._readingPeriodSetRepository = readingPeriodSetRepository; this._readModuleRepository = readModuleRepository; } @@ -48,7 +57,7 @@ namespace IRaCIS.Application.Services /// 获取读片模块 /// [HttpPost] - public async Task<(PageOutput,object)> GetReadModule(GetReadModuleDto dto) + public async Task<(PageOutput,object)> GetReadModuleList(GetReadModuleDto dto) { var subjectquery = _subjectRepository.WhereIf(dto.TrialId!=null, x => x.TrialId == dto.TrialId) .WhereIf(dto.SubjectId != null, x => x.Id == dto.SubjectId) @@ -59,7 +68,7 @@ namespace IRaCIS.Application.Services SiteId = x.SiteId, SubjectCode = x.Code, SubjectId = x.Id, - Data=x.SubjectVisitList.OrderByDescending(y=>y.InPlan).Select(y=>new GetReadModuleOutDto() + Data=x.SubjectVisitList.OrderByDescending(y=>y.VisitNum).Select(y=>new GetReadModuleOutDto() { Id = y.Id, //id Name=y.VisitName, @@ -71,6 +80,7 @@ namespace IRaCIS.Application.Services CreateTime = y.CreateTime, // 创建时间 SubjectCode = y.Subject.Code, // 受试者code SiteCode = x.TrialSite.TrialSiteCode, // 中心Code + VisitNum=y.VisitNum, IsFinalVisit=y.IsFinalVisit, // 是否为末次评估 OutPlanPreviousVisitId = y.OutPlanPreviousVisitId, // 上一访视 @@ -89,6 +99,16 @@ namespace IRaCIS.Application.Services var pageList = await subjectquery.ToPagedListAsync(dto.PageIndex, dto.PageSize, dto.SortField == null|| dto.SortField==string.Empty ? "SiteCode" : dto.SortField, dto.Asc); + + pageList.CurrentPageData.ForEach(x => + { + var outplan = x.Data.FirstOrDefault(x => x.IsFinalVisit); + if (outplan != null) + { + x.Data = x.Data.Where(y => y.VisitNum >= outplan.VisitNum).ToList(); + } + }); + var subjectisd = pageList.CurrentPageData.Select(x => x.SubjectId).ToList(); var readModules =await _readModuleRepository.Where(x => subjectisd.Contains(x.SubjectId)).Include(x=>x.SubjectVisit) @@ -139,40 +159,54 @@ namespace IRaCIS.Application.Services //} /// - /// 获取单条信息 + /// 获取单条详情信息 /// /// /// [HttpPost] public async Task GetReadModuleSingle(GetReadModuleSingleIndto dto) { - var data = await GetReadModule(new GetReadModuleDto() + var data = await GetReadModuleList(new GetReadModuleDto() { SubjectId = dto.SubjectId, }); - var GetReadModuleOutDto = data.Item1.CurrentPageData.FirstOrDefault().Data.Where(x => x.Id == dto.Id).Select(x => new GetReadModuleSingleOutdto() + GetReadModuleSingleOutdto? readModule = data.Item1.CurrentPageData.FirstOrDefault().Data.Where(x => x.Id == dto.Id).Select(x => new GetReadModuleSingleOutdto() { Id = x.Id, ModuleType = x.ModuleType, SubjectVisitId = x.SubjectVisitId, SubjectVisitName = x.SubjectVisitName, - Stakeholders = string.Empty + + Status = x.Status, }).FirstOrDefault(); - SubjectVisit visit = (await _subjectVisitRepository.Where(x => x.Id == GetReadModuleOutDto.SubjectVisitId).FirstOrDefaultAsync()).IfNullThrowConvertException(); + var stakeholderIds = new List(); - //switch (GetVisitSubmitStateEnum(visit)) - //{ - // case ReadModuleEnum.ImageUpload: - // case - // break; - //}; + var subjectVisit =await _subjectVisitRepository.FirstOrDefaultAsync(x => x.Id == readModule.SubjectVisitId); + switch (readModule.Status) + { + case ReadModuleEnum.ImageUpload: + stakeholderIds.AddRange(await _dicomInstanceRepository.Where(x => x.SubjectVisitId == readModule.SubjectVisitId).Select(x => x.CreateUserId).Distinct().ToListAsync()); + stakeholderIds.AddRange(await _noneDicomStudyFileRepository.Where(x => x.NoneDicomStudy.SubjectVisitId == readModule.SubjectVisitId).Select(x => x.CreateUserId).Distinct().ToListAsync()); + break; + case ReadModuleEnum.ImageQuality: + if (subjectVisit.PreliminaryAuditUserId != null) + { + stakeholderIds.Add(subjectVisit.PreliminaryAuditUserId.Value); + } + if (subjectVisit.ReviewAuditUserId != null) + { + stakeholderIds.Add(subjectVisit.ReviewAuditUserId.Value); + } + break; + }; + readModule.StakeholderIds = stakeholderIds.Distinct().ToList(); + readModule.StakeholderNames = await _userRepository.Where(x => readModule.StakeholderIds.Contains(x.Id)).Select(x => x.FirstName + "/" + x.LastName).ToListAsync(); - - return GetReadModuleOutDto; + return readModule; } /// @@ -212,8 +246,6 @@ namespace IRaCIS.Application.Services .WhereIf(dto.ExpirationVisitNum != null, x => x.VisitNum <= dto.ExpirationVisitNum.Value); - - var visit = visitquery.OrderByDescending(x => x.VisitNum).FirstOrDefault(); if (visit != null) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs index 6ac11916a..18f6e4173 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs @@ -58,7 +58,6 @@ namespace IRaCIS.Application.Services TrialId =entity.TrialId, SiteId = x, }).ToList(); - await _readingPeriodSetRepository.AddAsync(entity, true); return ResponseOutput.Ok(entity.Id); } @@ -79,17 +78,18 @@ namespace IRaCIS.Application.Services } /// - /// 获取影像阅片的预览 + /// 获取影像阅片的预览 // 需要清除之前已经选中的 /// /// public async Task> GetPreviewTheReadingList(PreviewTheReadingListInDto inDto) { if (await _readingPeriodPlanRepository.AnyAsync(x => x.ReadingPeriodSetId == inDto.ReadingPeriodSetId)) { - return await GetPreviewTheReadingPlanList(inDto); + await _readingPeriodPlanRepository.DeleteFromQueryAsync(x => x.ReadingPeriodSetId == inDto.ReadingPeriodSetId); + await _readingPeriodPlanRepository.SaveChangesAsync(); } - var readset = (await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).Include(x => x.ReadingPeriodSites).FirstOrDefaultAsync()).IfNullThrowConvertException(); - var visitquery = _subjectVisitRepository.Where(x => x.TrialId == readset.TrialId && x.SubmitState != SubmitStateEnum.None && x.InPlan); + var readset = (await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).Include(x => x.ReadingPeriodSites).FirstOrDefaultAsync()).IfNullThrowException(); + var visitquery = _subjectVisitRepository.Where(x => x.TrialId == readset.TrialId && x.InPlan); if (readset.ReadingScope == ReadingScopeEnum.Site) { var siteids = readset.ReadingPeriodSites.Select(x => x.SiteId); @@ -264,7 +264,16 @@ namespace IRaCIS.Application.Services var plans = _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == indto.Id).Include(x=>x.SubjectVisit) .Include(x => x.ReadingPeriodSet).ToList(); - plans = plans.Where(x => _readModuleRepository.Where(y => x.SubjectVisitId == y.SubjectVisitId && x.ReadingPeriodSet.ReadingSetType == y.ReadingSetType).Count() == 0).ToList(); + var needAddVisitIds = plans.Select(x => x.SubjectVisitId).ToList(); + + var repeatVisitNames = _readModuleRepository.Where(x => x.ReadingSetType == ReadingSetType.ImageReading && needAddVisitIds.Contains(x.SubjectVisitId)).Select(x => x.SubjectVisit.VisitName).ToList(); + + if(repeatVisitNames.Count!=0) + { + return ResponseOutput.NotOk($"{string.Join(",", repeatVisitNames)}已经添加过阅片期,无法设置生效"); + } + + List readModules = new List(); foreach (var item in plans) diff --git a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs index e0163b989..6754ad28a 100644 --- a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs +++ b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs @@ -62,8 +62,15 @@ namespace IRaCIS.Core.Domain.Models //审核状态 public AuditStateEnum AuditState { get; set; } public ForwardStateEnum ForwardState { get; set; } + + /// + /// 单审通过人 + /// public Guid? PreliminaryAuditUserId { get; set; } + /// + /// 双审通过人 + /// public Guid? ReviewAuditUserId { get; set; } public DateTime? ReviewAuditTime { get; set; } public DateTime? PreliminaryAuditTime { get; set; }