479 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			479 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C#
		
	
	
| using IRaCIS.Application.Interfaces;
 | |
| using IRaCIS.Core.Infra.EFCore;
 | |
| using IRaCIS.Core.Domain.Share;
 | |
| using IRaCIS.Core.Application.Filter;
 | |
| using Microsoft.AspNetCore.Mvc;
 | |
| using IRaCIS.Core.Application.Service.WorkLoad.DTO;
 | |
| using Microsoft.AspNetCore.Authorization;
 | |
| using IRaCIS.Core.Application.Auth;
 | |
| using IRaCIS.Core.Application.Service.Reading.Dto;
 | |
| using IRaCIS.Core.Domain.Share.Reading;
 | |
| using MassTransit;
 | |
| using Panda.DynamicWebApi.Attributes;
 | |
| using IRaCIS.Core.Application.Contracts;
 | |
| using IRaCIS.Core.Infra.EFCore.Common;
 | |
| 
 | |
| namespace IRaCIS.Application.Services
 | |
| {
 | |
|     /// <summary>
 | |
|     /// 生成的阅片模块(在大列表上展示的) 阅片期
 | |
|     /// </summary>
 | |
|     [ApiExplorerSettings(GroupName = "Reading")]
 | |
|     public class ReadModuleService :  BaseService
 | |
|     {
 | |
| 
 | |
|         public IRepository<SubjectVisit> _subjectVisitRepository;
 | |
|         private readonly IRepository<Subject> _subjectRepository;
 | |
|         private readonly IRepository<VisitStage> _visitstageRepository;
 | |
|         private readonly IRepository<User> _userRepository;
 | |
|         private readonly IRepository<Trial> _trialRepository;
 | |
|         private readonly IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository;
 | |
|         private readonly IRepository<ReadModuleView> _readModuleViewRepository;
 | |
|         private readonly IRepository<DicomInstance> _dicomInstanceRepository;
 | |
|         private readonly IRepository<NoneDicomStudyFile> _noneDicomStudyFileRepository;
 | |
|         private readonly IRepository<ReadingPeriodSet> _readingPeriodSetRepository;
 | |
|         private readonly IRepository<ReadModule> _readModuleRepository;
 | |
| 
 | |
| 
 | |
|         public ReadModuleService(IRepository<SubjectVisit> subjectVisitRepository,
 | |
|             IRepository<Subject> subjectRepository,
 | |
|             IRepository<VisitStage> visitstageRepository,
 | |
|             IRepository<User> UserRepository,
 | |
|             IRepository<Trial> trialRepository,
 | |
|             IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository,
 | |
|             IRepository<ReadModuleView> readModuleViewRepository,
 | |
|             IRepository<DicomInstance> dicomInstanceRepository,
 | |
|             IRepository<NoneDicomStudyFile> noneDicomStudyFileRepository,
 | |
|             IRepository<ReadingPeriodSet> readingPeriodSetRepository,
 | |
|             IRepository<ReadModule> readModuleRepository
 | |
|           )
 | |
|         {
 | |
|             this._subjectVisitRepository = subjectVisitRepository;
 | |
|             this._subjectRepository = subjectRepository;
 | |
|             this._visitstageRepository = visitstageRepository;
 | |
|             this._userRepository = UserRepository;
 | |
|             this._trialRepository = trialRepository;
 | |
|             this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
 | |
|             this._readModuleViewRepository = readModuleViewRepository;
 | |
|             this._dicomInstanceRepository = dicomInstanceRepository;
 | |
|             this._noneDicomStudyFileRepository = noneDicomStudyFileRepository;
 | |
|             this._readingPeriodSetRepository = readingPeriodSetRepository;
 | |
|             this._readModuleRepository = readModuleRepository;
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取读片计划列表  byZhouhang 
 | |
|         /// </summary>
 | |
|         /// <param name="dto"></param>
 | |
|         /// <returns></returns>
 | |
|         public async Task<(PageOutput<ReadPlanView>, object)> GetReadPlanList(GetReadModuleDto dto)
 | |
|         {
 | |
|             var subjectQuery = _subjectRepository
 | |
|                .WhereIf(dto.TrialId != null, x => x.TrialId == dto.TrialId)
 | |
|                .WhereIf(dto.SubjectId != null, x => x.Id == dto.SubjectId)
 | |
|                .WhereIf(dto.TrialSiteCode != null, x => x.TrialSite.TrialSiteCode == dto.TrialSiteCode)
 | |
|                .WhereIf(dto.SubjectCode != null, x => x.Code == dto.SubjectCode)
 | |
|              
 | |
|                
 | |
|                
 | |
|                .Select(x => new ReadPlanView
 | |
|               {
 | |
|                   TrialSiteCode = x.TrialSite.TrialSiteCode,
 | |
|                   SiteCode = x.TrialSite.TrialSiteCode,
 | |
|                   SiteId = x.SiteId,
 | |
|                   SubjectCode = x.Code,
 | |
|                   SubjectId = x.Id,
 | |
| 
 | |
|                   //Data = x.SubjectVisitList.OrderByDescending(y => y.VisitNum).Select(y => new GetReadModuleOutDto()
 | |
|                   //{
 | |
|                   //    Id = y.Id,  //id
 | |
|                   //    Name = y.VisitName,
 | |
|                   //    ModuleType = y.InPlan ? ModuleTypeEnum.InPlanSubjectVisit : ModuleTypeEnum.OutPlanSubjectVisit, // 模块类型
 | |
|                   //    IsUrgent = x.IsUrgent, // 是否加急
 | |
|                   //    SubjectVisitId = y.Id, // 访视ID
 | |
|                   //    SubjectVisitName = y.VisitName, //  访视名称
 | |
|                   //    Status = ReadingCommon.GetVisitSubmitStateEnum(y), // 状态
 | |
|                   //    CreateTime = y.CreateTime, // 创建时间
 | |
|                   //    SubjectCode = y.Subject.Code, // 受试者code
 | |
|                   //    TrialSiteCode = x.TrialSite.TrialSiteCode, // 中心Code
 | |
|                   //    VisitNum = y.VisitNum,
 | |
| 
 | |
|                   //    IsFinalVisit = y.IsFinalVisit, // 是否为末次评估
 | |
|                   //    OutPlanPreviousVisitId = y.OutPlanPreviousVisitId, // 上一访视
 | |
|                   //    OutPlanPreviousVisitName = y.OutPlanPreviousVisit.VisitName, // 上一访视名称
 | |
|                   //    SiteId = x.Site.Id,  // 中心ID
 | |
|                   //    IsVisit = true,  // 是否为访视
 | |
|                   //    PDState = y.PDState, // PD 进展
 | |
|                   //    IsEnrollmentConfirm = y.IsEnrollmentConfirm, // 入组
 | |
|                   //    SubjectId = x.Id,
 | |
|                   //}).ToList(),
 | |
| 
 | |
|                   //ReadModuleData = x.ReadModuleList.Select(
 | |
|                   // z => new GetReadModuleOutDto()
 | |
|                   // {
 | |
|                   //     CreateTime = z.CreateTime,
 | |
|                   //     Id = z.Id,
 | |
|                   //     Name = z.ModuleName,
 | |
|                   //     SubjectId = x.Id,
 | |
|                   //     ModuleType = z.ModuleType,
 | |
|                   //     Status = ReadingCommon.GetVisitSubmitStateEnum(z.SubjectVisit),
 | |
|                   //     SubjectCode = x.Code,
 | |
|                   //     TrialSiteCode = x.TrialSite.TrialSiteCode,
 | |
|                   //     SubjectVisitId = z.SubjectVisitId,
 | |
|                   //     SubjectVisitName = z.SubjectVisit.VisitName,  // 截止访视名称
 | |
|                   //     CutOffVisitId = z.SubjectVisitId,  // 截止访视
 | |
|                   //     CutOffVisitName = z.SubjectVisit.VisitName,  // 截止访视名称
 | |
|                   //     ReadModuleId = z.ReadModuleId,
 | |
|                   //     ReadModuleName = z.ReadModuleModel.ModuleName,
 | |
|                   //     IsUrgent = z.IsUrgent
 | |
|                   // }).ToList(),
 | |
| 
 | |
|               });
 | |
| 
 | |
|             var pageList = await subjectQuery.ToPagedListAsync(dto.PageIndex, dto.PageSize, dto.SortField == null || dto.SortField == string.Empty ? "SiteCode" : dto.SortField,
 | |
|                 dto.Asc);
 | |
| 
 | |
|             return (pageList, new
 | |
|             {
 | |
|                 MaxLength = pageList.CurrentPageData.ToList().Count()
 | |
|             });
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取读片模块
 | |
|         /// </summary>
 | |
|         [HttpPost]
 | |
|         public async Task<(PageOutput<GetReadModuleDtoOut>,object)> GetReadModuleList(GetReadModuleDto dto)
 | |
|         {
 | |
| 
 | |
|             #region MyRegion
 | |
| 
 | |
|             var subjectQuery = _readModuleViewRepository.WhereIf(dto.TrialId != null, x => x.TrialId == dto.TrialId)
 | |
|             .WhereIf(dto.SubjectId != null, x => x.SubjectId == dto.SubjectId)
 | |
|             .WhereIf(dto.TrialSiteCode != null && dto.TrialSiteCode != String.Empty, x => x.TrialSiteCode == dto.TrialSiteCode)
 | |
|             .WhereIf(dto.SubjectCode != null && dto.SubjectCode != String.Empty, x => x.SubjectCode == dto.SubjectCode)
 | |
|             .WhereIf(dto.ModuleType != null, x => x.ModuleType == dto.ModuleType)
 | |
|             .WhereIf(dto.Status != null, x => x.Status == dto.Status)
 | |
|             .WhereIf(dto.Name != null, x => x.Name.Contains(dto.Name)).OrderBy(x => x.SiteCode);
 | |
| 
 | |
|             var subjectIds = await subjectQuery.Select(x => x.SubjectId).Distinct().Skip((dto.PageIndex - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync();
 | |
|             List<ReadModuleView> ReadModuleViewList = await subjectQuery.Where(x => subjectIds.Contains(x.SubjectId)).ToListAsync();
 | |
|             List<GetReadModuleDtoOut> getReadList = ReadModuleViewList.GroupBy(x => new { x.SubjectId, x.SiteId, x.TrialSiteCode, x.SubjectCode })
 | |
|                 .Select(x => new GetReadModuleDtoOut()
 | |
|                 {
 | |
|                     TrialSiteCode = x.Key.TrialSiteCode,
 | |
|                     SiteId = x.Key.SiteId,
 | |
|                     SubjectCode = x.Key.SubjectCode,
 | |
|                     SubjectId = x.Key.SubjectId,
 | |
|                     Data = x.OrderBy(x=>x.ModuleType).ThenBy(x=>x.VisitNum).ToList(),
 | |
|                 }).ToList();
 | |
|             PageOutput<GetReadModuleDtoOut> pageOutput = new PageOutput<GetReadModuleDtoOut>()
 | |
|             {
 | |
| 
 | |
|                 PageSize = dto.PageSize,
 | |
|                 CurrentPageData = getReadList,
 | |
|                 PageIndex = dto.PageIndex,
 | |
|                 TotalCount = await subjectQuery.Select(x => x.SubjectId).Distinct().CountAsync(),
 | |
|             };
 | |
|             var maxcount = 0;
 | |
|             pageOutput.CurrentPageData.ForEach(x =>
 | |
|             {
 | |
|                 maxcount = maxcount < x.Data.Count ? x.Data.Count : maxcount;
 | |
|             });
 | |
|             return (pageOutput, new
 | |
|             {
 | |
|                 MaxLength = maxcount,
 | |
|                 IsClinicalReading = await _trialRepository.Where(x => x.Id == dto.TrialId).Select(x => x.IsClinicalReading).FirstOrDefaultAsync(),
 | |
|                 OnlyExistsMedicalHistory = !(await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataSetName != "既往局部治疗史" && x.IsConfirm))
 | |
|             }) ;
 | |
| 
 | |
|             #endregion
 | |
| 
 | |
|             #region 用导航属性写的 有问题
 | |
|             //var subjectQuery = _subjectRepository.WhereIf(dto.TrialId != null, x => x.TrialId == dto.TrialId)
 | |
|             //   .WhereIf(dto.SubjectId != null, x => x.Id == dto.SubjectId).Include(x => x.SubjectVisitList).Include(x => x.Site).Include(x => x.TrialSite)
 | |
|             //   .WhereIf(dto.TrialSiteCode != null, x => x.TrialSite.TrialSiteCode == dto.TrialSiteCode)
 | |
|             //   .WhereIf(dto.SubjectCode != null, x => x.Code == dto.SubjectCode)
 | |
| 
 | |
|             //  .Select(x => new GetReadModuleDtoOut
 | |
|             //  {
 | |
|             //      TrialSiteCode = x.TrialSite.TrialSiteCode,
 | |
|             //      SiteCode = x.TrialSite.TrialSiteCode,
 | |
|             //      SiteId = x.SiteId,
 | |
|             //      SubjectCode = x.Code,
 | |
|             //      SubjectId = x.Id,
 | |
|             //      Data = x.SubjectVisitList.OrderByDescending(y => y.VisitNum).Select(y => new GetReadModuleOutDto()
 | |
|             //      {
 | |
|             //          Id = y.Id,  //id
 | |
|             //          Name = y.VisitName,
 | |
|             //          ModuleType = y.InPlan ? ModuleTypeEnum.InPlanSubjectVisit : ModuleTypeEnum.OutPlanSubjectVisit, // 模块类型
 | |
|             //          IsUrgent = x.IsUrgent, // 是否加急
 | |
|             //          SubjectVisitId = y.Id, // 访视ID
 | |
|             //          SubjectVisitName = y.VisitName, //  访视名称
 | |
|             //          Status = ReadingCommon.GetVisitSubmitStateEnum(y), // 状态
 | |
|             //          CreateTime = y.CreateTime, // 创建时间
 | |
|             //          SubjectCode = y.Subject.Code, // 受试者code
 | |
|             //          TrialSiteCode = x.TrialSite.TrialSiteCode, // 中心Code
 | |
|             //          VisitNum = y.VisitNum,
 | |
| 
 | |
|             //          IsFinalVisit = y.IsFinalVisit, // 是否为末次评估
 | |
|             //          OutPlanPreviousVisitId = y.OutPlanPreviousVisitId, // 上一访视
 | |
|             //          OutPlanPreviousVisitName = y.OutPlanPreviousVisit.VisitName, // 上一访视名称
 | |
|             //          SiteId = x.Site.Id,  // 中心ID
 | |
|             //          IsVisit = true,  // 是否为访视
 | |
|             //          PDState = y.PDState, // PD 进展
 | |
|             //          IsEnrollmentConfirm = y.IsEnrollmentConfirm, // 入组
 | |
|             //          SubjectId = x.Id,
 | |
|             //      }).ToList(),
 | |
| 
 | |
|             //      ReadModuleData = x.ReadModuleList.Select(
 | |
|             //       z => new GetReadModuleOutDto()
 | |
|             //       {
 | |
|             //           CreateTime = z.CreateTime,
 | |
|             //           Id = z.Id,
 | |
|             //           Name = z.ModuleName,
 | |
|             //           SubjectId = x.Id,
 | |
|             //           ModuleType = z.ModuleType,
 | |
|             //           Status = ReadingCommon.GetVisitSubmitStateEnum(z.SubjectVisit),
 | |
|             //           SubjectCode = x.Code,
 | |
|             //           TrialSiteCode = x.TrialSite.TrialSiteCode,
 | |
|             //           SubjectVisitId = z.SubjectVisitId,
 | |
|             //           SubjectVisitName = z.SubjectVisit.VisitName,  // 截止访视名称
 | |
|             //           CutOffVisitId = z.SubjectVisitId,  // 截止访视
 | |
|             //           CutOffVisitName = z.SubjectVisit.VisitName,  // 截止访视名称
 | |
|             //           ReadModuleId = z.ReadModuleId,
 | |
|             //           ReadModuleName = z.ReadModuleModel.ModuleName,
 | |
|             //           IsUrgent = z.IsUrgent
 | |
|             //       }).ToList(),
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|             //  });
 | |
| 
 | |
| 
 | |
| 
 | |
|             //if (dto.ModuleType != null)
 | |
|             //{
 | |
|             //    subjectQuery.
 | |
|             //}
 | |
|             //if (dto.Status != null)
 | |
|             //{
 | |
|             //    x.Data = x.Data.Where(y => y.Status == dto.Status).ToList();
 | |
|             //}
 | |
| 
 | |
|             //if (dto.Name != null)
 | |
|             //{
 | |
|             //    x.Data = x.Data.Where(y => y.Name.Contains(y.Name)).ToList();
 | |
|             //}
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|             //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 subjectIds = pageList.CurrentPageData.Select(x => x.SubjectId).ToList();
 | |
| 
 | |
|             //var readModules = await _readModuleRepository.Where(x => subjectIds.Contains(x.SubjectId)).Include(x => x.SubjectVisit)
 | |
|             //    .Include(x => x.ReadModuleModel).ToListAsync();
 | |
| 
 | |
| 
 | |
|             //return (pageList, new
 | |
|             //{
 | |
|             //    MaxLength = pageList.CurrentPageData.ToList().Max(x => x.Data.Count)
 | |
|             //});
 | |
|             #endregion
 | |
| 
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|         ///// <summary>
 | |
|         ///// 访视阅片完成添加阅片期模块
 | |
|         ///// </summary>
 | |
|         ///// <returns></returns>
 | |
|         //public async Task<IResponseOutput> VisitFinishReadingAddReadModule(VisitFinishReadingAddReadModuleInDto inDto)
 | |
|         //{
 | |
|         //     var subjectVisit = await _subjectRepository.FirstOrDefaultNoTrackingAsync(x => x.Id == inDto.SubjectVisitId); 
 | |
|         //     List<ReadingPeriodSet> readingPeriodSets= _readingPeriodSetRepository.Where(x=>x.TrialId==inDto.TrialId&&x.IsTakeEffect=&&(x.ReadingScope==ReadingScopeEnum.All||(x.ReadingScope==ReadingScopeEnum.Site&&x.ReadingPeriodSites.Select(y=>y.SiteId).Contains(subjectVisit.SiteId))))
 | |
|         //}
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取单条详情信息
 | |
|         /// </summary>
 | |
|         /// <param name="dto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<GetReadModuleSingleOutdto> GetReadModule(GetReadModuleSingleIndto dto)
 | |
|         {
 | |
|             var data = await GetReadModuleList(new GetReadModuleDto()
 | |
|             {
 | |
|                 SubjectId = dto.SubjectId,
 | |
|             });
 | |
| 
 | |
|             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,
 | |
|              
 | |
|                 Status = x.Status,
 | |
|             }).FirstOrDefault();
 | |
| 
 | |
| 
 | |
|             var stakeholderIds = new List<Guid>();
 | |
| 
 | |
|             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;
 | |
|                 case ReadModuleEnum.ConsistencyCheck:
 | |
|                     if (subjectVisit.CheckUserId != null)
 | |
|                     {
 | |
|                         stakeholderIds.Add(subjectVisit.CheckUserId.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 readModule;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 添加阅片的时候 获取访视
 | |
|         /// </summary>
 | |
|         /// <param name="inDto"></param>
 | |
|         /// <returns></returns>
 | |
|         public async Task<List<GetSubjectReadVisitsOutDto>> GetSubjectReadVisitList(GetSubjectReadVisitsInDto inDto)
 | |
|         {
 | |
|             var maxReadVisit = await _readModuleRepository.Where(x => x.SubjectId == inDto.SubjectId&&x.ReadingSetType==inDto.ReadingSetType).OrderByDescending(x=>x.VisitNum).FirstOrDefaultAsync();
 | |
|             var maxReadVisitNum= maxReadVisit==null?-1:maxReadVisit.VisitNum;
 | |
|             var visitQuery = _subjectVisitRepository.Where(x => x.SubjectId == inDto.SubjectId && x.LatestScanDate != null&&!x.IsLostVisit);
 | |
|             var finalVisitNum = await visitQuery.Where(x => x.IsFinalVisit).Select(x => x.VisitNum).FirstOrDefaultAsync();
 | |
| 
 | |
| 
 | |
|             var readModulequery = _readModuleRepository.AsQueryable();
 | |
|            var resultlist= await visitQuery.WhereIf(finalVisitNum != null&& finalVisitNum!=0, x => x.VisitNum <= finalVisitNum)
 | |
|                 .Where(x=>x.VisitNum> maxReadVisitNum)
 | |
|                 .Where(x => readModulequery.Where(y => y.SubjectVisitId == x.Id && y.ReadingSetType == inDto.ReadingSetType).Count() == 0).OrderBy(x => finalVisitNum)
 | |
|                 .Select(x => new GetSubjectReadVisitsOutDto()
 | |
|                 {
 | |
|                     SubjectVisitId = x.Id,
 | |
|                     VisitName = x.VisitName,
 | |
|                     VisitNum = x.VisitNum,
 | |
|                 }).ToListAsync();
 | |
| 
 | |
|             return resultlist;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 添加阅片期
 | |
|         /// </summary>
 | |
|         /// <param name="dto"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<IResponseOutput> AddReadModule(ReadModuleAddDto dto)
 | |
|         {
 | |
|             var visitQuery =  _subjectVisitRepository.Where(x => x.SubjectId == dto.SubjectId);
 | |
| 
 | |
|             visitQuery = visitQuery
 | |
|                 //.WhereIf(dto.ExpirationDate != null, x => x.LatestScanDate <= dto.ExpirationDate.Value)
 | |
|                 .WhereIf(dto.ExpirationVisitNum != null, x => x.VisitNum == dto.ExpirationVisitNum.Value);
 | |
|             var visit = visitQuery.OrderByDescending(x => x.VisitNum).FirstOrDefault();
 | |
| 
 | |
|             if (visit != null)
 | |
|             {
 | |
|                 await _readModuleRepository.AddAsync(new ReadModule()
 | |
|                 {
 | |
|                     Id= NewId.NextGuid(),
 | |
|                     SubjectId = dto.SubjectId,
 | |
|                     ModuleType = dto.ReadingSetType==ReadingSetType.ImageReading? ModuleTypeEnum.Read: ModuleTypeEnum.Oncology,
 | |
|                     IsUrgent = visit.IsUrgent,
 | |
|                     ModuleName = dto.Name,
 | |
|                     SubjectVisitId = visit.Id,
 | |
|                     ReadingSetType= dto.ReadingSetType,
 | |
|                     TrialId= dto.TrialId,
 | |
|                     VisitNum= visit.VisitNum,
 | |
|                     Status = ReadModuleEnum.TaskAllocation,
 | |
|                    
 | |
|                 });
 | |
|                 var res = await _readModuleRepository.SaveChangesAsync();
 | |
|                 return ResponseOutput.Ok(res);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 return ResponseOutput.NotOk("No qualified visit was found ");
 | |
|             }
 | |
| 
 | |
|           
 | |
| 
 | |
|         }
 | |
| 
 | |
|         ///// <summary>
 | |
|         ///// 新增或者修改
 | |
|         ///// </summary>
 | |
|         ///// <param name="addOrEditReadModule"></param>
 | |
|         ///// <returns></returns>
 | |
|         //[HttpPost]
 | |
|         //public async Task<IResponseOutput> AddOrUpdateReadModuleService(ReadModuleAddOrEdit addOrEditReadModule)
 | |
|         //{
 | |
|         //    var entity = await _repository.InsertOrUpdateAsync<ReadModule, ReadModuleAddOrEdit>(addOrEditReadModule, true);
 | |
|         //    return ResponseOutput.Ok(entity.Id.ToString());
 | |
|         //}
 | |
| 
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 删除
 | |
|         /// </summary>
 | |
|         /// <param name="readModuleId"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpDelete("{readModuleId:guid}")]
 | |
|         public async Task<IResponseOutput> DeleteReadModule(Guid readModuleId)
 | |
|         {
 | |
|             await _readModuleRepository.DeleteFromQueryAsync(t => t.Id == readModuleId, true);
 | |
|             return ResponseOutput.Result(true);
 | |
|         }
 | |
| 
 | |
| 
 | |
|     }
 | |
| }
 |