优化未阅片数字统计查询
							parent
							
								
									1be72c87f2
								
							
						
					
					
						commit
						50ef2e83ce
					
				| 
						 | 
				
			
			@ -1081,11 +1081,15 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
 | 
			
		||||
            var visitQuery = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.DoctorUserId == _userInfo.Id
 | 
			
		||||
            && x.TaskState == TaskState.Effect /*&& x.TrialReadingCriterionId== inDto.TrialReadingCriterionId*/)
 | 
			
		||||
                .WhereIf(critrion.IsAutoCreate == false, t => t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(t => t.IsGeneratedTask == false) ?
 | 
			
		||||
                t.VisitTaskNum <= t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsGeneratedTask == false).Min(t => t.SubjectVisit.VisitNum) : true)
 | 
			
		||||
 | 
			
		||||
                //前序 不存在  未生成任务的访视
 | 
			
		||||
                 .WhereIf(critrion.IsAutoCreate == false, t => !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum)  )
 | 
			
		||||
 | 
			
		||||
                .Where(t => t.Subject.SubjectVisitList.Any(t => t.CheckState != CheckStateEnum.CVPassed) ? t.VisitTaskNum <= t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) : true)
 | 
			
		||||
                // 前序 不存在 未一致性核查未通过的
 | 
			
		||||
                .Where( t=>! t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum))
 | 
			
		||||
                //.WhereIf(critrion.IsAutoCreate == false, t => t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(t => t.IsGeneratedTask == false) ?
 | 
			
		||||
                //t.VisitTaskNum <= t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsGeneratedTask == false).Min(t => t.SubjectVisit.VisitNum) : true)
 | 
			
		||||
                //.Where(t => t.Subject.SubjectVisitList.Any(t => t.CheckState != CheckStateEnum.CVPassed) ? t.VisitTaskNum <= t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) : true)
 | 
			
		||||
                //满足前序访视不存在 需要签署但是未签署  sql  相当复杂    同时想查询所有未读的统计数字 就无法统计   byzhouhang  
 | 
			
		||||
                //但是加字段 IsFrontTaskNeedSignButNotSign   那么签名临床数据的时候,要对该subject 该标准的有效的任务  这个字段需要在签名的时候维护   采取这种方式   统计数字灵活
 | 
			
		||||
                //.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -394,8 +394,14 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
                //维护  IsFrontTaskNeedSignButNotSign   在添加任务哪里用触发器也维护了
 | 
			
		||||
                var visitTaskIdQueryable = _visitTaskRepository.Where(visitTaskLambda) //该Subject  该标准的任务
 | 
			
		||||
                                                                                       //小于自己任务号的任务  存在需要签名  但是没签名
 | 
			
		||||
                          .Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)
 | 
			
		||||
                              && t.IsFrontTaskNeedSignButNotSign == false)
 | 
			
		||||
                          .Where(t => t.IsFrontTaskNeedSignButNotSign == false &&
 | 
			
		||||
 | 
			
		||||
                         (t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)
 | 
			
		||||
 | 
			
		||||
                         // 前序存在 未一致性核查未通过的
 | 
			
		||||
                         || t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed  && t.VisitTaskNum>sv.VisitNum)
 | 
			
		||||
                         
 | 
			
		||||
                           ))
 | 
			
		||||
                          .Select(t => t.Id);
 | 
			
		||||
 | 
			
		||||
                await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable.Contains(t.Id), u => new VisitTask()
 | 
			
		||||
| 
						 | 
				
			
			@ -406,9 +412,15 @@ namespace IRaCIS.Application.Services
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
                var visitTaskIdQueryable2 = _visitTaskRepository.Where(visitTaskLambda) //该Subject  该标准的任务
 | 
			
		||||
                                                                                        //小于自己任务号的任务  存在需要签名  但是没签名
 | 
			
		||||
                          .Where(t => !t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)
 | 
			
		||||
                          && t.IsFrontTaskNeedSignButNotSign == true)
 | 
			
		||||
                                                                                       
 | 
			
		||||
                          .Where(t => t.IsFrontTaskNeedSignButNotSign == true &&
 | 
			
		||||
 | 
			
		||||
                          //前序任务  不存在需要签名  但是没签名
 | 
			
		||||
                          !t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)
 | 
			
		||||
 | 
			
		||||
                          // 前序  不存在 未一致性核查未通过的
 | 
			
		||||
                          && !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum)
 | 
			
		||||
                          )
 | 
			
		||||
                          .Select(t => t.Id);
 | 
			
		||||
 | 
			
		||||
                await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable2.Contains(t.Id), u => new VisitTask()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,33 +50,53 @@ namespace IRaCIS.Core.Application.Triggers
 | 
			
		|||
            Expression<Func<VisitTask, bool>> visitTaskLambda = x => x.TrialId == visitTask.TrialId && x.SubjectId == visitTask.SubjectId && x.TrialReadingCriterionId == visitTask.TrialReadingCriterionId;
 | 
			
		||||
            if (context.ChangeType == ChangeType.Added)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
               
 | 
			
		||||
                //判断是否需要临床数据签名  不需要 就不用维护
 | 
			
		||||
                if (visitTask.IsNeedClinicalDataSign)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    var visitTaskIdQueryable = _visitTaskRepository.Where(visitTaskLambda) //该Subject  该标准的任务
 | 
			
		||||
                                                                                           //小于自己任务号的任务  存在需要签名  但是没签名
 | 
			
		||||
                      .Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)
 | 
			
		||||
                          && t.IsFrontTaskNeedSignButNotSign == false)
 | 
			
		||||
                      .Select(t => t.Id);
 | 
			
		||||
 | 
			
		||||
                    await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable.Contains(t.Id), u => new VisitTask()
 | 
			
		||||
                    //有序阅片  IsFrontTaskNeedSignButNotSign  维护才有意义
 | 
			
		||||
                    if (_trialReadingCriterionRepository.Any(t => t.Id == visitTask.TrialReadingCriterionId && t.IsReadingTaskViewInOrder == true))
 | 
			
		||||
                    {
 | 
			
		||||
                        IsFrontTaskNeedSignButNotSign = true
 | 
			
		||||
                    });
 | 
			
		||||
                        var visitTaskIdQueryable = _visitTaskRepository.Where(visitTaskLambda) //该Subject  该标准的任务
 | 
			
		||||
                                                                                               //小于自己任务号的任务  存在需要签名  但是没签名
 | 
			
		||||
                        .Where(t => t.IsFrontTaskNeedSignButNotSign == false &&
 | 
			
		||||
 | 
			
		||||
                       (t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)
 | 
			
		||||
 | 
			
		||||
                       // 前序存在 未一致性核查未通过的
 | 
			
		||||
                       || t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum)
 | 
			
		||||
 | 
			
		||||
                         ))
 | 
			
		||||
                        .Select(t => t.Id);
 | 
			
		||||
 | 
			
		||||
                        await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable.Contains(t.Id), u => new VisitTask()
 | 
			
		||||
                        {
 | 
			
		||||
                            IsFrontTaskNeedSignButNotSign = true
 | 
			
		||||
                        });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    var visitTaskIdQueryable2 = _visitTaskRepository.Where(visitTaskLambda) //该Subject  该标准的任务
 | 
			
		||||
                                                                                            //小于自己任务号的任务  存在需要签名  但是没签名
 | 
			
		||||
                              .Where(t => !t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)
 | 
			
		||||
                              && t.IsFrontTaskNeedSignButNotSign == true)
 | 
			
		||||
                              .Select(t => t.Id);
 | 
			
		||||
                        var visitTaskIdQueryable2 = _visitTaskRepository.Where(visitTaskLambda) //该Subject  该标准的任务
 | 
			
		||||
 | 
			
		||||
                                  .Where(t => t.IsFrontTaskNeedSignButNotSign == true &&
 | 
			
		||||
 | 
			
		||||
                                  //前序任务  不存在需要签名  但是没签名
 | 
			
		||||
                                  !t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)
 | 
			
		||||
 | 
			
		||||
                                  // 前序  不存在 未一致性核查未通过的
 | 
			
		||||
                                  && !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum)
 | 
			
		||||
                                  )
 | 
			
		||||
                                  .Select(t => t.Id);
 | 
			
		||||
 | 
			
		||||
                        await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable2.Contains(t.Id), u => new VisitTask()
 | 
			
		||||
                        {
 | 
			
		||||
                            IsFrontTaskNeedSignButNotSign = false
 | 
			
		||||
                        });
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                   
 | 
			
		||||
 | 
			
		||||
                    await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable2.Contains(t.Id), u => new VisitTask()
 | 
			
		||||
                    {
 | 
			
		||||
                        IsFrontTaskNeedSignButNotSign = false
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue