diff --git a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs index 02893de6..006a6ee7 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs @@ -377,6 +377,9 @@ namespace IRaCIS.Application.Services /// public async Task> GetSubjectReadVisitList(GetSubjectReadVisitsInDto inDto) { + + var maxReadVisitNum = await _readModuleRepository.Where(x => x.SubjectId == inDto.SubjectId && x.ModuleType != ModuleTypeEnum.Global).MaxAsync(x => x.VisitNum); + var visitQuery = _subjectVisitRepository.Where(x => x.SubjectId == inDto.SubjectId && x.LatestScanDate != null); var finalVisitNum = await visitQuery.Where(x => x.IsFinalVisit).Select(x => x.VisitNum).FirstOrDefaultAsync(); @@ -384,6 +387,7 @@ namespace IRaCIS.Application.Services 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() { @@ -421,7 +425,8 @@ namespace IRaCIS.Application.Services SubjectVisitId = visit.Id, ReadingSetType= dto.ReadingSetType, TrialId= dto.TrialId, - Status = ReadingCommon.GetVisitSubmitStateEnum(visit), + VisitNum= visit.VisitNum, + Status = ReadModuleEnum.TaskAllocation, }); var res = await _readModuleRepository.SaveChangesAsync(); @@ -432,6 +437,7 @@ namespace IRaCIS.Application.Services return ResponseOutput.NotOk("No qualified visit was found "); } + } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs index 17f985ed..7cec8a29 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs @@ -288,8 +288,12 @@ namespace IRaCIS.Application.Services [HttpPost] public async Task> GetReadingVisitList(GetReadingVisitListInDto inDto) { - var visitStageIdList = await _readingPeriodSetRepository.Where(x => x.TrialId == inDto.TrialId && x.Id != inDto.ReadingPeriodSetId&&x.VisitStageId!=null&&x.ReadingSetType==inDto.ReadingSetType).Select(x => x.VisitStageId).ToListAsync(); - List result = await _visitStageRepository.Where(x => x.TrialId == inDto.TrialId && !visitStageIdList.Contains(x.Id)).Select(x => new GetReadingVisitListOutDto() + var maxVisitnum = await _readingPeriodSetRepository.Where(x => x.TrialId == inDto.TrialId && x.ReadingSetType == inDto.ReadingSetType&&(x.IsTakeEffect== ReadingPeriodStatus.TakeEffect||x.IsTakeEffect==ReadingPeriodStatus.Revocation)).MaxAsync(x => x.ExpirationVisitNum)??0; + + var thisVisitnum = await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).Select(x => x.ExpirationVisitNum).FirstOrDefaultAsync() ?? -1; + + //var visitStageIdList = await _readingPeriodSetRepository.Where(x => x.TrialId == inDto.TrialId && x.Id != inDto.ReadingPeriodSetId&&x.VisitStageId!=null&&x.ReadingSetType==inDto.ReadingSetType).Select(x => x.VisitStageId).ToListAsync(); + List result = await _visitStageRepository.Where(x => x.TrialId == inDto.TrialId ).Where(x=>x.VisitNum== thisVisitnum|| x.VisitNum >= maxVisitnum).Select(x => new GetReadingVisitListOutDto() { VisitName = x.VisitName, @@ -312,7 +316,7 @@ namespace IRaCIS.Application.Services { var readingPeriodSet =await _readingPeriodSetRepository.Where(x => x.Id == indto.Id).FirstOrDefaultAsync(); var plans = _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == indto.Id).Include(x=>x.SubjectVisit) - .Include(x => x.ReadingPeriodSet).ToList(); + .Include(x => x.ReadingPeriodSet).Include(x=>x.SubjectVisit).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.Subject.Code+"的"+ x.SubjectVisit.VisitName).ToList(); @@ -336,6 +340,7 @@ namespace IRaCIS.Application.Services ReadingPeriodSetId= item.ReadingPeriodSet.Id, Status = ReadModuleEnum.TaskAllocation, TrialId = readingPeriodSet.TrialId, + VisitNum= item.SubjectVisit.VisitNum, }); }; diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 71842db2..3fce9aba 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -163,6 +163,7 @@ namespace IRaCIS.Core.Application.Services ReadingSetType = ReadingSetType.ImageReading, ModuleType = ModuleTypeEnum.Global, TrialId= dbBeforeEntity.TrialId, + VisitNum= dbBeforeEntity.VisitNum, }); } } diff --git a/IRaCIS.Core.Domain/Reading/ReadModule.cs b/IRaCIS.Core.Domain/Reading/ReadModule.cs index 971ec63d..b2c4956a 100644 --- a/IRaCIS.Core.Domain/Reading/ReadModule.cs +++ b/IRaCIS.Core.Domain/Reading/ReadModule.cs @@ -75,6 +75,11 @@ namespace IRaCIS.Core.Domain.Models /// public Guid TrialId { get; set; } + /// + /// + /// + public decimal VisitNum { get; set; } + /// /// 对应 ///