From 3d92ccf83a9b1bd2212466b38a36c0a796434750 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 2 Jun 2022 19:04:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingPeriodSetViewModel.cs | 2 +- .../Reading/ReadingPeriodSetService.cs | 148 ++++++++++++++---- IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 2 + .../Reading/ReadingPeriodPlan.cs | 54 +++++++ .../Reading/ReadingPeriodSet.cs | 4 +- .../Context/IRaCISDBContext.cs | 3 + 6 files changed, 183 insertions(+), 30 deletions(-) create mode 100644 IRaCIS.Core.Domain/Reading/ReadingPeriodPlan.cs diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingPeriodSetViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingPeriodSetViewModel.cs index ddd015c7..030822c5 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingPeriodSetViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingPeriodSetViewModel.cs @@ -213,7 +213,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// /// 设置阅片是否生效 /// - public int IsTakeEffect { get; set; } + public ReadingPeriodStatus IsTakeEffect { get; set; } } public class ReadingPeriodSetQuery diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs index 7bced679..e88ae9c4 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs @@ -23,17 +23,20 @@ namespace IRaCIS.Application.Services public IRepository _subjectVisitRepository; private readonly IRepository _readingPeriodSetRepository; private readonly IRepository _readModuleRepository; + private readonly IRepository _readingPeriodPlanRepository; private readonly IRepository _siteSetRepository; public ReadingPeriodSetService(IRepository subjectVisitRepository, IRepository ReadingPeriodSetRepository, IRepository readModuleRepository, + IRepository readingPeriodPlanRepository, IRepository SiteSetRepository ) { _subjectVisitRepository = subjectVisitRepository; _readingPeriodSetRepository = ReadingPeriodSetRepository; this._readModuleRepository = readModuleRepository; + this._readingPeriodPlanRepository = readingPeriodPlanRepository; _siteSetRepository = SiteSetRepository; } @@ -91,12 +94,34 @@ namespace IRaCIS.Application.Services visitquery = visitquery.WhereIf(readset.ExpirationDate != null, x => x.LatestScanDate <= readset.ExpirationDate.Value) .WhereIf(readset.ExpirationVisitNum != null, x => x.VisitNum <= readset.ExpirationVisitNum); - var visits = (await visitquery.Include(x=>x.Subject).Include(x=>x.TrialSite).GroupBy(x => x.SubjectId).Select(x => new + var subjectVisits = await visitquery.Include(x => x.Subject).Include(x => x.TrialSite).GroupBy(x => x.SubjectId).Select(x => new { SubjectId = x.Key, - visit = x.OrderByDescending(x => x.VisitNum).FirstOrDefault() - }).ToListAsync()).Select(x => x.visit).ToList(); + Visit = x.ToList() + }).ToListAsync(); + List visits = new List(); + subjectVisits.ForEach(x => + { + var finalVisit = x.Visit.Where(x => x.IsFinalVisit).FirstOrDefault(); + if (finalVisit != null) + { + var visit = x.Visit.Where(x => x.VisitNum < finalVisit.VisitNum).OrderByDescending(x=>x.VisitNum).FirstOrDefault(); + if(visit!=null) + { + visits.Add(visit); + } + } + else + { + var visit = x.Visit.OrderByDescending(x => x.VisitNum).FirstOrDefault(); + if (visit != null) + { + visits.Add(visit); + } + } + + }); return visits.Where(x => _readModuleRepository.Where(y => y.ReadingSetType == readset.ReadingSetType && x.Id == y.SubjectVisitId).Count() == 0) .Select(x => new PreviewTheReadingListOutDto @@ -121,35 +146,72 @@ namespace IRaCIS.Application.Services /// public async Task ReadingToGenerate(ReadingToGenerateInDto inDto) { - var readset = (await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).Include(x => x.ReadingPeriodSites).FirstOrDefaultAsync()).IfNullThrowConvertException(); - var visits = await _subjectVisitRepository.Where(x => inDto.SubjectVisitIds.Contains(x.Id)).ToListAsync(); + //var readset = (await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).Include(x => x.ReadingPeriodSites).FirstOrDefaultAsync()).IfNullThrowConvertException(); + //var visits = await _subjectVisitRepository.Where(x => inDto.SubjectVisitIds.Contains(x.Id)).ToListAsync(); - List readModules = new List(); + //List readModules = new List(); - foreach (var item in visits) + //foreach (var item in visits) + //{ + // readModules.Add(new ReadModule() + // { + // Id = NewId.NextGuid(), + // SubjectId = item.SubjectId, + // ModuleType = readset.ReadingSetType == ReadingSetType.ImageReading ? ModuleTypeEnum.Read : ModuleTypeEnum.Oncology, + // IsUrgent = item.IsUrgent, + // ModuleName = readset.ReadingPeriodName, + // SubjectVisitId = item.Id, + // ReadingSetType = readset.ReadingSetType, + // Status = ReadingCommon.GetVisitSubmitStateEnum(item), + // }); + //}; + + //await _readModuleRepository.AddRangeAsync(readModules); + + + //var res = await _subjectVisitRepository.SaveChangesAsync(); + + List plans = new List(); + inDto.SubjectVisitIds.ForEach(x => { - readModules.Add(new ReadModule() + plans.Add(new ReadingPeriodPlan() { - Id = NewId.NextGuid(), - SubjectId = item.SubjectId, - ModuleType = readset.ReadingSetType == ReadingSetType.ImageReading ? ModuleTypeEnum.Read : ModuleTypeEnum.Oncology, - IsUrgent = item.IsUrgent, - ModuleName = readset.ReadingPeriodName, - SubjectVisitId = item.Id, - ReadingSetType = readset.ReadingSetType, - Status = ReadingCommon.GetVisitSubmitStateEnum(item), + SubjectVisitId = x, + ReadingPeriodSetId = inDto.ReadingPeriodSetId }); - }; - - await _readModuleRepository.AddRangeAsync(readModules); - - - var res = await _subjectVisitRepository.SaveChangesAsync(); - + }); + await _readingPeriodPlanRepository.AddRangeAsync(plans); + var res = await _readingPeriodPlanRepository.SaveChangesAsync(); return ResponseOutput.Result(res); } + /// + /// 获取选中的计划 + /// + /// + /// + public async Task> GetPreviewTheReadingPlanList(PreviewTheReadingListInDto inDto) + { + var plans =await _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == inDto.ReadingPeriodSetId).Include(x => x.SubjectVisit).Include(x => x.SubjectVisit.TrialSite).Include(x => x.SubjectVisit.Subject) + .Include(x => x.ReadingPeriodSet).ToListAsync(); + + return plans.Select(x => new PreviewTheReadingListOutDto + { + ExpirationDate = x.ReadingPeriodSet.ExpirationDate, + SubjectVisitId = x.Id, + TrialSiteCode = x.SubjectVisit.TrialSite.TrialSiteCode, + LatestScanDate =x.SubjectVisit.LatestScanDate, + ReadingPeriodName = x.ReadingPeriodSet.ReadingPeriodName, + ReadingPeriodSetId = x.ReadingPeriodSet.Id, + SubjectCode = x.SubjectVisit.Subject.Code, + SubjectId = x.SubjectVisit.SubjectId, + SubjectVisitName = x.SubjectVisit.VisitName, + //Remark= readset.Remark + }).ToList(); + } + + /// /// 分页获取 /// @@ -164,10 +226,11 @@ namespace IRaCIS.Application.Services .ProjectTo(_mapper.ConfigurationProvider); var pageList= await readquery.ToPagedListAsync(query.PageIndex, query.PageSize, query.SortField == null ? "CreateTime" : query.SortField, query.SortAsc); - return pageList; } + + /// /// 获取单条 /// @@ -177,7 +240,6 @@ namespace IRaCIS.Application.Services public async Task GetReadingPeriodSet(Guid id) { var data = await _readingPeriodSetRepository.AsQueryable().Include(x => x.ReadingPeriodSites).Where(x => x.Id == id).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); - return data; } @@ -191,11 +253,40 @@ namespace IRaCIS.Application.Services [HttpPut] public async Task SetReadingPeriodSetEffect(SetReadingPeriodSetEffect indto) { + if (indto.IsTakeEffect == ReadingPeriodStatus.TakeEffect) + { + var plans = _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == indto.Id).Include(x=>x.SubjectVisit) + .Include(x => x.ReadingPeriodSet).ToList(); + + List readModules = new List(); + foreach (var item in plans) + { + readModules.Add(new ReadModule() + { + Id = NewId.NextGuid(), + SubjectId = item.SubjectVisit.SubjectId, + ModuleType = item.ReadingPeriodSet.ReadingSetType == ReadingSetType.ImageReading ? ModuleTypeEnum.Read : ModuleTypeEnum.Oncology, + IsUrgent = item.SubjectVisit.IsUrgent, + ModuleName = item.ReadingPeriodSet.ReadingPeriodName, + SubjectVisitId = item.Id, + ReadingSetType = item.ReadingPeriodSet.ReadingSetType, + ReadingPeriodSetId= item.ReadingPeriodSet.Id, + Status = ReadingCommon.GetVisitSubmitStateEnum(item.SubjectVisit), + }); + }; + + await _readModuleRepository.AddRangeAsync(readModules); + } else + { + await _readModuleRepository.DeleteFromQueryAsync(x => x.ReadingPeriodSetId == indto.Id); + } + var readquery =await _readingPeriodSetRepository.UpdatePartialFromQueryAsync(indto.Id, x => new ReadingPeriodSet() { IsTakeEffect = indto.IsTakeEffect - },true); - - return ResponseOutput.Result(true); + }); + + var res=await _readingPeriodSetRepository.SaveChangesAsync(); + return ResponseOutput.Result(res); } @@ -208,6 +299,7 @@ namespace IRaCIS.Application.Services [HttpDelete("{readingPeriodSetId:guid}")] public async Task DeleteReadingPeriodSet(Guid readingPeriodSetId) { + var success = await _repository.BatchDeleteAsync(t => t.Id == readingPeriodSetId); return ResponseOutput.Result(success); } diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index fd8b7b4b..387ce19c 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -67,6 +67,8 @@ namespace IRaCIS.Core.Domain.Share.Reading } + + /// /// 状态 /// diff --git a/IRaCIS.Core.Domain/Reading/ReadingPeriodPlan.cs b/IRaCIS.Core.Domain/Reading/ReadingPeriodPlan.cs new file mode 100644 index 00000000..6fc1dcd0 --- /dev/null +++ b/IRaCIS.Core.Domain/Reading/ReadingPeriodPlan.cs @@ -0,0 +1,54 @@ + + +using System; +using IRaCIS.Core.Domain.Share; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using IRaCIS.Core.Domain.Share.Reading; + +namespace IRaCIS.Core.Domain.Models +{ + /// + /// 阅片计划 + /// + [Table("ReadingPeriodPlan")] + public class ReadingPeriodPlan : Entity, IAuditAdd + { + + /// + /// 阅片期配置ID + /// + public Guid ReadingPeriodSetId { get; set; } + + /// + /// 访视 + /// + public Guid SubjectVisitId { get; set; } + + /// + /// 访视 + /// + [ForeignKey("SubjectVisitId")] + public SubjectVisit SubjectVisit { get; set; } + + /// + /// 阅片期配置 + /// + [ForeignKey("ReadingPeriodSetId")] + public ReadingPeriodSet ReadingPeriodSet { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } + + /// + /// 创建人 + /// + public Guid CreateUserId { get; set; } + + } + + + +} diff --git a/IRaCIS.Core.Domain/Reading/ReadingPeriodSet.cs b/IRaCIS.Core.Domain/Reading/ReadingPeriodSet.cs index 1bb5e950..8aba2ba1 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingPeriodSet.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingPeriodSet.cs @@ -55,7 +55,7 @@ namespace IRaCIS.Core.Domain.Models /// /// 是否生效 /// - public int? IsTakeEffect { get; set; } + public ReadingPeriodStatus IsTakeEffect { get; set; } /// /// 创建时间 @@ -75,4 +75,6 @@ namespace IRaCIS.Core.Domain.Models public List ReadingPeriodSites { get; set; } = new List(); } + + } diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs index 73b7861c..09fcf705 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs @@ -176,6 +176,9 @@ namespace IRaCIS.Core.Infra.EFCore #region Reading public virtual DbSet ReadingPeriodSet { get; set; } + public virtual DbSet ReadingPeriodPlan { get; set; } + + public virtual DbSet ReadModule { get; set; } public virtual DbSet ClinicalData { get; set; }