Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
						commit
						4566d8ebcf
					
				| 
						 | 
					@ -441,7 +441,7 @@
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.InfluenceAddtioncalEvaluationCritrionAsync(IRaCIS.Core.Domain.Models.VisitTask)">
 | 
					        <member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.InfluenceAddtioncalEvaluationCritrionAsync(IRaCIS.Core.Domain.Models.VisitTask,System.Collections.Generic.List{System.Guid})">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
             如果是基线退回   影响附加评估标准  是否参与评估
 | 
					             如果是基线退回   影响附加评估标准  是否参与评估
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -349,15 +349,17 @@ namespace IRaCIS.Core.Application.Service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    bool isCanEditUrgentState = taskUrgentType == TaskUrgentType.EnrollmentConfirm || taskUrgentType == TaskUrgentType.PDProgress ? false : true;
 | 
					                    bool isCanEditUrgentState = taskUrgentType == TaskUrgentType.EnrollmentConfirm || taskUrgentType == TaskUrgentType.PDProgress ? false : true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    //为防止脏数据 这里也多判断一次  
 | 
				
			||||||
 | 
					                    var existCurrentVisitTaskList = _visitTaskRepository.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId
 | 
				
			||||||
 | 
					                                && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.TaskState == TaskState.Effect
 | 
				
			||||||
 | 
					                                && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.SourceSubjectVisitId == subjectVisit.Id).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
 | 
					                    if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        //未防止脏数据 这里也多判断一次  
 | 
					                       
 | 
				
			||||||
                        var existCurrentVisitTaskList = _visitTaskRepository.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId
 | 
					 | 
				
			||||||
                                    && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.TaskState == TaskState.Effect
 | 
					 | 
				
			||||||
                                    && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.SourceSubjectVisitId == subjectVisit.Id).ToList();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        VisitTask? task1 = null;
 | 
					                        VisitTask? task1 = existCurrentVisitTaskList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm1);
 | 
				
			||||||
                        VisitTask? task2 = null;
 | 
					                        VisitTask? task2 = existCurrentVisitTaskList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        if (!existCurrentVisitTaskList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1))
 | 
					                        if (!existCurrentVisitTaskList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1))
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					@ -449,29 +451,37 @@ namespace IRaCIS.Core.Application.Service
 | 
				
			||||||
                    else if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Single)
 | 
					                    else if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Single)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        var singleTask = await _visitTaskRepository.AddAsync(new VisitTask()
 | 
					                        VisitTask? singleTask = existCurrentVisitTaskList.FirstOrDefault(t => t.ArmEnum == Arm.SingleReadingArm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (!existCurrentVisitTaskList.Any(t => t.ArmEnum == Arm.SingleReadingArm))
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            TrialId = trialId,
 | 
					                            currentMaxCodeInt = currentMaxCodeInt + 1;
 | 
				
			||||||
                            SubjectId = subjectVisit.SubjectId,
 | 
					
 | 
				
			||||||
                            IsUrgent = subjectVisit.IsUrgent,
 | 
					                             singleTask = await _visitTaskRepository.AddAsync(new VisitTask()
 | 
				
			||||||
                            TaskBlindName = blindTaskName,
 | 
					                            {
 | 
				
			||||||
                            TaskName = subjectVisit.VisitName,
 | 
					                                TrialId = trialId,
 | 
				
			||||||
                            VisitTaskNum = subjectVisit.VisitNum,
 | 
					                                SubjectId = subjectVisit.SubjectId,
 | 
				
			||||||
                            TaskUrgentType = taskUrgentType,
 | 
					                                IsUrgent = subjectVisit.IsUrgent,
 | 
				
			||||||
                            IsCanEditUrgentState = isCanEditUrgentState,
 | 
					                                TaskBlindName = blindTaskName,
 | 
				
			||||||
                            //CheckPassedTime = subjectVisit.CheckPassedTime,
 | 
					                                TaskName = subjectVisit.VisitName,
 | 
				
			||||||
                            ArmEnum = Arm.SingleReadingArm, //特殊
 | 
					                                VisitTaskNum = subjectVisit.VisitNum,
 | 
				
			||||||
                            Code = currentMaxCodeInt + 1,
 | 
					                                TaskUrgentType = taskUrgentType,
 | 
				
			||||||
                            SourceSubjectVisitId = subjectVisit.Id,
 | 
					                                IsCanEditUrgentState = isCanEditUrgentState,
 | 
				
			||||||
                            TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
 | 
					                                //CheckPassedTime = subjectVisit.CheckPassedTime,
 | 
				
			||||||
                            ReadingCategory = ReadingCategory.Visit,
 | 
					                                ArmEnum = Arm.SingleReadingArm, //特殊
 | 
				
			||||||
                            TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
 | 
					                                Code = currentMaxCodeInt + 1,
 | 
				
			||||||
                            IsNeedClinicalDataSign = isNeedClinicalDataSign,
 | 
					                                SourceSubjectVisitId = subjectVisit.Id,
 | 
				
			||||||
                            IsClinicalDataSign = isClinicalDataSign
 | 
					                                TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
 | 
				
			||||||
                        });
 | 
					                                ReadingCategory = ReadingCategory.Visit,
 | 
				
			||||||
 | 
					                                TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
 | 
				
			||||||
 | 
					                                IsNeedClinicalDataSign = isNeedClinicalDataSign,
 | 
				
			||||||
 | 
					                                IsClinicalDataSign = isClinicalDataSign
 | 
				
			||||||
 | 
					                            });
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                       
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        currentMaxCodeInt = currentMaxCodeInt + 1;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        _provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
 | 
					                        _provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -726,9 +736,9 @@ namespace IRaCIS.Core.Application.Service
 | 
				
			||||||
                            foreach (var trialReadingCriterionConfig in trialReadingCriterionConfigList)
 | 
					                            foreach (var trialReadingCriterionConfig in trialReadingCriterionConfigList)
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                var subjectCriteriaEvaluation = _subjectCriteriaEvaluationRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.IsJoinEvaluation && t.SubjectId == subjectVisit.SubjectId).FirstOrDefault();
 | 
					                                //var subjectCriteriaEvaluation = _subjectCriteriaEvaluationRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.IsJoinEvaluation && t.SubjectId == subjectVisit.SubjectId).FirstOrDefault();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                if (trialReadingCriterionConfig.IsAutoCreate == true || (trialReadingCriterionConfig.IsAutoCreate == false && subjectCriteriaEvaluation != null && subjectCriteriaEvaluation?.IsJoinEvaluation == true))
 | 
					                                if (trialReadingCriterionConfig.IsAutoCreate == true /*|| (trialReadingCriterionConfig.IsAutoCreate == false && subjectCriteriaEvaluation != null && subjectCriteriaEvaluation?.IsJoinEvaluation == true)*/)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1064,11 +1064,19 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //Expression<Func<VisitTask, bool>> visitTaskLambda = x => x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect && x.TrialReadingCriterionId == inDto.TrialReadingCriterionId;
 | 
					            //Expression<Func<VisitTask, bool>> visitTaskLambda = x => x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect && x.TrialReadingCriterionId == inDto.TrialReadingCriterionId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var critrion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var visitGroupQuery = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.DoctorUserId == _userInfo.Id
 | 
					            var visitGroupQuery = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.DoctorUserId == _userInfo.Id
 | 
				
			||||||
            && x.TaskState == TaskState.Effect /*&& x.TrialReadingCriterionId== inDto.TrialReadingCriterionId*/)
 | 
					            && x.TaskState == TaskState.Effect /*&& x.TrialReadingCriterionId== inDto.TrialReadingCriterionId*/)
 | 
				
			||||||
 | 
					                .WhereIf(critrion.IsAutoCreate==false, t=>t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(t => t.ImageFilterState != ImageFilterState.Finished) ?
 | 
				
			||||||
 | 
					                t.VisitTaskNum <= t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Min(t => t.SubjectVisit.VisitNum) : true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //.Where(t => t.VisitTaskNum < t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) )
 | 
					                .Where(t => t.TrialReadingCriterion.IsAutoCreate == false && t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(t => t.ImageFilterState != ImageFilterState.Finished) ?
 | 
				
			||||||
                .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)
 | 
					                t.VisitTaskNum <= t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).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  
 | 
					                //满足前序访视不存在 需要签署但是未签署  sql  相当复杂    同时想查询所有未读的统计数字 就无法统计   byzhouhang  
 | 
				
			||||||
                //但是加字段 IsFrontTaskNeedSignButNotSign   那么签名临床数据的时候,要对该subject 该标准的有效的任务  这个字段需要在签名的时候维护   采取这种方式   统计数字灵活
 | 
					                //但是加字段 IsFrontTaskNeedSignButNotSign   那么签名临床数据的时候,要对该subject 该标准的有效的任务  这个字段需要在签名的时候维护   采取这种方式   统计数字灵活
 | 
				
			||||||
                //.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum))
 | 
					                //.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum))
 | 
				
			||||||
| 
						 | 
					@ -1541,7 +1549,6 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
				
			||||||
                            //执行类似一致性核查回退流程
 | 
					                            //执行类似一致性核查回退流程
 | 
				
			||||||
                            await VisitBackAsync(origenalTask.SourceSubjectVisitId);
 | 
					                            await VisitBackAsync(origenalTask.SourceSubjectVisitId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            await InfluenceAddtioncalEvaluationCritrionAsync(origenalTask);
 | 
					 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					@ -1579,6 +1586,8 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
				
			||||||
                                    //    influenceTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = t.Id });
 | 
					                                    //    influenceTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = t.Id });
 | 
				
			||||||
                                    //});
 | 
					                                    //});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                    await InfluenceAddtioncalEvaluationCritrionAsync(origenalTask, influenceTaskList.Where(t => t.Id != origenalTask.Id).Where(t => t.SourceSubjectVisitId != null).Select(t => (Guid)t.SourceSubjectVisitId).Distinct().ToList());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                    await SetReReadingOrBackInfluenceAnalysisAsync(origenalTask.SubjectId);
 | 
					                                    await SetReReadingOrBackInfluenceAnalysisAsync(origenalTask.SubjectId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                    await SetMedicalReviewInvalidAsync(influenceTaskList);
 | 
					                                    await SetMedicalReviewInvalidAsync(influenceTaskList);
 | 
				
			||||||
| 
						 | 
					@ -1785,7 +1794,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                    await SetMedicalReviewInvalidAsync(influenceTaskList, false);
 | 
					                                    await SetMedicalReviewInvalidAsync(influenceTaskList, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                    await InfluenceAddtioncalEvaluationCritrionAsync(origenalTask);
 | 
					                                    await InfluenceAddtioncalEvaluationCritrionAsync(origenalTask ,influenceTaskList.Where(t => t.Id != origenalTask.Id).Where(t => t.SourceSubjectVisitId != null).Select(t => (Guid)t.SourceSubjectVisitId).Distinct().ToList());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                    trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Return });
 | 
					                                    trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Return });
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
| 
						 | 
					@ -2213,6 +2222,8 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
				
			||||||
                            //    influenceTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = t.Id });
 | 
					                            //    influenceTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = t.Id });
 | 
				
			||||||
                            //});
 | 
					                            //});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            await InfluenceAddtioncalEvaluationCritrionAsync(task, influenceTaskList.Where(t => t.Id != task.Id).Where(t => t.SourceSubjectVisitId != null).Select(t => (Guid)t.SourceSubjectVisitId).Distinct().ToList());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            await SetReReadingOrBackInfluenceAnalysisAsync(influenceTask.SubjectId);
 | 
					                            await SetReReadingOrBackInfluenceAnalysisAsync(influenceTask.SubjectId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            await SetMedicalReviewInvalidAsync(influenceTaskList);
 | 
					                            await SetMedicalReviewInvalidAsync(influenceTaskList);
 | 
				
			||||||
| 
						 | 
					@ -2339,7 +2350,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            await InfluenceAddtioncalEvaluationCritrionAsync(task);
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            await _visitTaskRepository.SaveChangesAsync();
 | 
					            await _visitTaskRepository.SaveChangesAsync();
 | 
				
			||||||
| 
						 | 
					@ -2352,7 +2363,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
				
			||||||
        ///  如果是基线退回   影响附加评估标准  是否参与评估
 | 
					        ///  如果是基线退回   影响附加评估标准  是否参与评估
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        private async Task InfluenceAddtioncalEvaluationCritrionAsync(VisitTask task)
 | 
					        private async Task InfluenceAddtioncalEvaluationCritrionAsync(VisitTask task,List<Guid> otherVisitIdList)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
           
 | 
					           
 | 
				
			||||||
            if (_subjectVisitRepository.Any(t => t.Id == task.SourceSubjectVisitId && t.IsBaseLine))
 | 
					            if (_subjectVisitRepository.Any(t => t.Id == task.SourceSubjectVisitId && t.IsBaseLine))
 | 
				
			||||||
| 
						 | 
					@ -2368,6 +2379,32 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
				
			||||||
                //删除筛选的序列数据
 | 
					                //删除筛选的序列数据
 | 
				
			||||||
                await _subjectCriteriaEvaluationVisitStudyFilterRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterion.IsAutoCreate == false && t.SubjectVisit.SubjectId == task.SubjectId);
 | 
					                await _subjectCriteriaEvaluationVisitStudyFilterRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterion.IsAutoCreate == false && t.SubjectVisit.SubjectId == task.SubjectId);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                //当前访视筛选状态重置,任务生成状态重置
 | 
				
			||||||
 | 
					                if(task.SourceSubjectVisitId != null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                            await _subjectCriteriaEvaluationVisitFilterRepository.UpdatePartialFromQueryAsync(t => t.TrialReadingCriterion.IsAutoCreate == false && t.SubjectVisit.SubjectId == task.SubjectId && t.SubjectVisitId == task.SourceSubjectVisitId,
 | 
				
			||||||
 | 
					                      t => new SubjectCriteriaEvaluationVisitFilter()
 | 
				
			||||||
 | 
					                      {
 | 
				
			||||||
 | 
					                          ImageFilterState = ImageFilterState.None,
 | 
				
			||||||
 | 
					                          ImageDeterminationResultState = ImageDeterminationResultState.None,
 | 
				
			||||||
 | 
					                          IsGeneratedTask = false
 | 
				
			||||||
 | 
					                      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    //删除序列数据
 | 
				
			||||||
 | 
					                    await _subjectCriteriaEvaluationVisitStudyFilterRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterion.IsAutoCreate == false && t.SubjectVisit.SubjectId == task.SubjectId && t.SubjectVisitId == task.SourceSubjectVisitId);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //BM后续访视 ,筛选状态不变,任务生成状态重置(实际该访视任务状态 可能是重阅重置了或者失效了,需要后续生成,或者取消分配了,需要后续重新分配)
 | 
				
			||||||
 | 
					                await _subjectCriteriaEvaluationVisitFilterRepository.BatchUpdateNoTrackingAsync(t => t.TrialReadingCriterion.IsAutoCreate == false && t.SubjectVisit.SubjectId == task.SubjectId && otherVisitIdList.Contains(t.SubjectVisitId),
 | 
				
			||||||
 | 
					                    t => new SubjectCriteriaEvaluationVisitFilter()
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        IsGeneratedTask = false
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //包括临床数据签名状态
 | 
					        //包括临床数据签名状态
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -135,7 +135,7 @@ namespace IRaCIS.Core.Application.Service
 | 
				
			||||||
                                                         {
 | 
					                                                         {
 | 
				
			||||||
                                                             QuestionId = u.ReadingQuestionTrialId,
 | 
					                                                             QuestionId = u.ReadingQuestionTrialId,
 | 
				
			||||||
                                                             Answer = u.Answer,
 | 
					                                                             Answer = u.Answer,
 | 
				
			||||||
                                                             ArmEnum=u.VisitTask.ArmEnum,
 | 
					                                                             ArmEnum = u.VisitTask.ArmEnum,
 | 
				
			||||||
                                                             FinalTranslateDictionaryCode = u.ReadingQuestionTrial.DictionaryCode
 | 
					                                                             FinalTranslateDictionaryCode = u.ReadingQuestionTrial.DictionaryCode
 | 
				
			||||||
                                                         }).ToList()
 | 
					                                                         }).ToList()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -376,18 +376,14 @@ namespace IRaCIS.Core.Application.Service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    foreach (var item in list)
 | 
					                    foreach (var item in list)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        await _subjectCriteriaEvaluationVisitStudyFilterRepository.AddAsync(new SubjectCriteriaEvaluationVisitStudyFilter { SubjectVisitId = subjectVisitId, SeriesId = item.SeriesId, TrialReadingCriterionId = trialReadingCriterionId, StudyId = item.StudyId, IsConfirmed = true,IsReading=true });
 | 
					                        await _subjectCriteriaEvaluationVisitStudyFilterRepository.AddAsync(new SubjectCriteriaEvaluationVisitStudyFilter { SubjectVisitId = subjectVisitId, SeriesId = item.SeriesId, TrialReadingCriterionId = trialReadingCriterionId, StudyId = item.StudyId, IsConfirmed = true, IsReading = true });
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    //自动生成任务
 | 
					                    //自动生成任务
 | 
				
			||||||
                    if (!await _repository.AnyAsync<VisitTask>(t => t.SourceSubjectVisitId == subjectVisitId && t.TrialReadingCriterionId == trialReadingCriterionId && t.TaskState == TaskState.Effect))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        var trialId = _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t => t.TrialId).FirstOrDefault();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        await _IVisitTaskHelpeService.BaseCritrionGenerateVisitTask(trialId, trialReadingCriterionId, true, new List<Guid>() { subjectVisitId });
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    var trialId = _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t => t.TrialId).FirstOrDefault();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    await _IVisitTaskHelpeService.BaseCritrionGenerateVisitTask(trialId, trialReadingCriterionId, true, new List<Guid>() { subjectVisitId });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -430,7 +426,7 @@ namespace IRaCIS.Core.Application.Service
 | 
				
			||||||
                                                                    TrialId = subjectVisit.TrialId,
 | 
					                                                                    TrialId = subjectVisit.TrialId,
 | 
				
			||||||
                                                                    SubjectId = subjectVisit.SubjectId,
 | 
					                                                                    SubjectId = subjectVisit.SubjectId,
 | 
				
			||||||
                                                                    SubjectCode = subjectVisit.Subject.Code,
 | 
					                                                                    SubjectCode = subjectVisit.Subject.Code,
 | 
				
			||||||
                                                                    SiteId=subjectVisit.SiteId,
 | 
					                                                                    SiteId = subjectVisit.SiteId,
 | 
				
			||||||
                                                                    TrialReadingCriterionId = inQuery.TrialReadingCriterionId,
 | 
					                                                                    TrialReadingCriterionId = inQuery.TrialReadingCriterionId,
 | 
				
			||||||
                                                                    LatestScanDate = subjectVisit.LatestScanDate,
 | 
					                                                                    LatestScanDate = subjectVisit.LatestScanDate,
 | 
				
			||||||
                                                                    EarliestScanDate = subjectVisit.LatestScanDate,
 | 
					                                                                    EarliestScanDate = subjectVisit.LatestScanDate,
 | 
				
			||||||
| 
						 | 
					@ -647,7 +643,7 @@ namespace IRaCIS.Core.Application.Service
 | 
				
			||||||
                    influenceTask.OptType = influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned ? ReReadingOrBackOptType.Return : ReReadingOrBackOptType.Abandon;
 | 
					                    influenceTask.OptType = influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned ? ReReadingOrBackOptType.Return : ReReadingOrBackOptType.Abandon;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
               
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return (list, new { IsIRAppyTaskInfluenced = isIRAppyTaskInfluenced });
 | 
					            return (list, new { IsIRAppyTaskInfluenced = isIRAppyTaskInfluenced });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -752,17 +748,32 @@ namespace IRaCIS.Core.Application.Service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //将筛选的访视 序列状态重置
 | 
					            //将筛选的访视 序列状态重置
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //重置访视数据
 | 
					
 | 
				
			||||||
            await _subjectCriteriaEvaluationVisitFilterRepository.BatchUpdateNoTrackingAsync(t => t.TrialReadingCriterionId == command.TrialReadingCriterionId && t.SubjectId == command.SubjectId && subjectVisitIdLsit.Contains(t.SubjectVisitId),
 | 
					            //当前申请影像回退的访视  筛选状态重置,任务生成状态重置
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var otherVisitIdList = subjectVisitIdLsit.Where(t => t != command.SubjectVisitId).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            await _subjectCriteriaEvaluationVisitFilterRepository.UpdatePartialFromQueryAsync(t => t.TrialReadingCriterionId == command.TrialReadingCriterionId && t.SubjectId == command.SubjectId && t.SubjectVisitId == command.SubjectVisitId,
 | 
				
			||||||
                t => new SubjectCriteriaEvaluationVisitFilter()
 | 
					                t => new SubjectCriteriaEvaluationVisitFilter()
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    ImageFilterState = ImageFilterState.None,
 | 
					                    ImageFilterState = ImageFilterState.None,
 | 
				
			||||||
                    ImageDeterminationResultState = ImageDeterminationResultState.None,
 | 
					                    ImageDeterminationResultState = ImageDeterminationResultState.None,
 | 
				
			||||||
                    IsGeneratedTask=false
 | 
					                    IsGeneratedTask = false
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //删除序列数据
 | 
					            //删除序列数据
 | 
				
			||||||
            await _subjectCriteriaEvaluationVisitStudyFilterRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == command.TrialReadingCriterionId && subjectVisitIdLsit.Contains(t.SubjectVisitId));
 | 
					            await _subjectCriteriaEvaluationVisitStudyFilterRepository.BatchDeleteNoTrackingAsync(t => t.TrialReadingCriterionId == command.TrialReadingCriterionId && t.SubjectVisitId == command.SubjectVisitId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //BM后续访视 ,筛选状态不变,任务生成状态重置(实际该访视任务状态 可能是重阅重置了或者失效了,需要后续生成,或者取消分配了,需要后续重新分配)
 | 
				
			||||||
 | 
					            await _subjectCriteriaEvaluationVisitFilterRepository.BatchUpdateNoTrackingAsync(t => t.TrialReadingCriterionId == command.TrialReadingCriterionId && t.SubjectId == command.SubjectId && otherVisitIdList.Contains(t.SubjectVisitId),
 | 
				
			||||||
 | 
					                t => new SubjectCriteriaEvaluationVisitFilter()
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    IsGeneratedTask = false
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            await _visitTaskRepository.SaveChangesAsync();
 | 
					            await _visitTaskRepository.SaveChangesAsync();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,15 +25,20 @@ namespace IRaCIS.Core.Application.Triggers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private readonly IRepository<SubjectCriteriaEvaluationVisitFilter> _SubjectCriteriaEvaluationVisitFilterRepository;
 | 
					        private readonly IRepository<SubjectCriteriaEvaluationVisitFilter> _SubjectCriteriaEvaluationVisitFilterRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private readonly ISubjectCriteriaEvaluationService _subjectCriteriaEvaluationService;
 | 
					        private readonly ISubjectCriteriaEvaluationService _subjectCriteriaEvaluationService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private readonly IRepository<SubjectCriteriaEvaluation> _subjectCriteriaEvaluationRepository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public SubjectVisitCheckPassedTrigger(IRepository<Subject> subjectRepository,
 | 
					        public SubjectVisitCheckPassedTrigger(IRepository<Subject> subjectRepository,
 | 
				
			||||||
             IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository,
 | 
					             IRepository<ClinicalDataTrialSet> clinicalDataTrialSetRepository,
 | 
				
			||||||
            IRepository<ReadingClinicalData> readingClinicalDataRepository,
 | 
					            IRepository<ReadingClinicalData> readingClinicalDataRepository,
 | 
				
			||||||
            IVisitTaskHelpeService visitTaskHelpeService, IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository,
 | 
					            IVisitTaskHelpeService visitTaskHelpeService, IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository,
 | 
				
			||||||
            IRepository<SubjectCriteriaEvaluationVisitFilter> subjectCriteriaEvaluationVisitFilterRepository, ISubjectCriteriaEvaluationService subjectCriteriaEvaluationService)
 | 
					            IRepository<SubjectCriteriaEvaluationVisitFilter> subjectCriteriaEvaluationVisitFilterRepository, ISubjectCriteriaEvaluationService subjectCriteriaEvaluationService 
 | 
				
			||||||
 | 
					            , IRepository<SubjectCriteriaEvaluation> subjectCriteriaEvaluationRepository)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            _subjectCriteriaEvaluationRepository= subjectCriteriaEvaluationRepository;
 | 
				
			||||||
            _subjectRepository = subjectRepository;
 | 
					            _subjectRepository = subjectRepository;
 | 
				
			||||||
            _clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
 | 
					            _clinicalDataTrialSetRepository = clinicalDataTrialSetRepository;
 | 
				
			||||||
            _readingClinicalDataRepository = readingClinicalDataRepository;
 | 
					            _readingClinicalDataRepository = readingClinicalDataRepository;
 | 
				
			||||||
| 
						 | 
					@ -66,7 +71,7 @@ namespace IRaCIS.Core.Application.Triggers
 | 
				
			||||||
                    context.Entity.IsPMBackOrReReading = false;
 | 
					                    context.Entity.IsPMBackOrReReading = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    //找到手动生成任务的标准
 | 
					                    //找到手动生成任务的标准
 | 
				
			||||||
                    var criterionList = await _trialReadingCriterionRepository.Where(t => t.IsAutoCreate == false && t.IsSigned == true).Select(t => new { t.Id, t.TrialId }).ToListAsync();
 | 
					                    var criterionList = await _trialReadingCriterionRepository.Where(t => t.IsAutoCreate == false && t.IsSigned == true).Select(t => new { t.Id, t.TrialId,t.IsReadingTaskViewInOrder }).ToListAsync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    foreach (var criterion in criterionList)
 | 
					                    foreach (var criterion in criterionList)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
| 
						 | 
					@ -75,7 +80,16 @@ namespace IRaCIS.Core.Application.Triggers
 | 
				
			||||||
                        //    await _SubjectCriteriaEvaluationVisitFilterRepository.AddAsync(new SubjectCriteriaEvaluationVisitFilter() { SubjectId = subjectVisit.SubjectId, SubjectVisitId = subjectVisit.Id, TrialReadingCriterionId = criterion.Id });
 | 
					                        //    await _SubjectCriteriaEvaluationVisitFilterRepository.AddAsync(new SubjectCriteriaEvaluationVisitFilter() { SubjectId = subjectVisit.SubjectId, SubjectVisitId = subjectVisit.Id, TrialReadingCriterionId = criterion.Id });
 | 
				
			||||||
                        //}
 | 
					                        //}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        await _subjectCriteriaEvaluationService.AutoSubjectCriteriaEvaluationVisitFilter(subjectVisit.SubjectId, subjectVisit.Id, criterion.Id);
 | 
					                        //如果参与评估,那么久对当前访视进行自动筛选
 | 
				
			||||||
 | 
					                        if( await _subjectCriteriaEvaluationRepository.AnyAsync(t=>t.SubjectId==subjectVisit.SubjectId && t.TrialReadingCriterionId==criterion.Id && t.IsJoinEvaluation))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            await _subjectCriteriaEvaluationService.AutoSubjectCriteriaEvaluationVisitFilter(subjectVisit.SubjectId, subjectVisit.Id, criterion.Id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    await _visitTaskHelpeService.GenerateVisitTaskAsync(subjectVisit.TrialId, new List<Guid>() { subjectVisit.Id }, true);
 | 
					                    await _visitTaskHelpeService.GenerateVisitTaskAsync(subjectVisit.TrialId, new List<Guid>() { subjectVisit.Id }, true);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -120,6 +120,9 @@ namespace IRaCIS.Core.Domain.Models
 | 
				
			||||||
        public Subject Subject { get; set; }
 | 
					        public Subject Subject { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [JsonIgnore]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public SubjectCriteriaEvaluationVisitFilter SubjectCriteriaEvaluationVisitFilter { get; set;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [JsonIgnore]
 | 
					        [JsonIgnore]
 | 
				
			||||||
        public List<TaskMedicalReview> TaskMedicalReviewList { get; set; }
 | 
					        public List<TaskMedicalReview> TaskMedicalReviewList { get; set; }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,8 @@ using System;
 | 
				
			||||||
using IRaCIS.Core.Domain.Share;
 | 
					using IRaCIS.Core.Domain.Share;
 | 
				
			||||||
using System.ComponentModel.DataAnnotations;
 | 
					using System.ComponentModel.DataAnnotations;
 | 
				
			||||||
using System.ComponentModel.DataAnnotations.Schema;
 | 
					using System.ComponentModel.DataAnnotations.Schema;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace IRaCIS.Core.Domain.Models
 | 
					namespace IRaCIS.Core.Domain.Models
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ///<summary>
 | 
					    ///<summary>
 | 
				
			||||||
| 
						 | 
					@ -17,6 +19,9 @@ namespace IRaCIS.Core.Domain.Models
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [JsonIgnore]
 | 
					        [JsonIgnore]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public List<VisitTask> SubjectCriterionTaskList { get; set; }
 | 
				
			||||||
 | 
					        [JsonIgnore]
 | 
				
			||||||
        [ForeignKey("TrialReadingCriterionId")]
 | 
					        [ForeignKey("TrialReadingCriterionId")]
 | 
				
			||||||
        public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
 | 
					        public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }
 | 
				
			||||||
        [JsonIgnore]
 | 
					        [JsonIgnore]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,6 +29,10 @@ namespace IRaCIS.Core.Domain.Models
 | 
				
			||||||
        [JsonIgnore]
 | 
					        [JsonIgnore]
 | 
				
			||||||
        public List<SubjectCriteriaEvaluation> SubjectCriteriaEvaluationList { get; set; }
 | 
					        public List<SubjectCriteriaEvaluation> SubjectCriteriaEvaluationList { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [JsonIgnore]
 | 
				
			||||||
 | 
					        public List<SubjectCriteriaEvaluationVisitFilter> SubjectCriteriaEvaluationVisitFilterList { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [JsonIgnore]
 | 
					        [JsonIgnore]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public List<SubjectAdditionalEvaluationResult> SubjectAdditionalEvaluationResult { get; set; }
 | 
					        public List<SubjectAdditionalEvaluationResult> SubjectAdditionalEvaluationResult { get; set; }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,4 +35,19 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public class SubjectCriteriaEvaluationVisitFilterConfigration : IEntityTypeConfiguration<SubjectCriteriaEvaluationVisitFilter>
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void Configure(EntityTypeBuilder<SubjectCriteriaEvaluationVisitFilter> builder)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            builder
 | 
				
			||||||
 | 
					           .HasMany(s => s.SubjectCriterionTaskList)
 | 
				
			||||||
 | 
					            .WithOne(c => c.SubjectCriteriaEvaluationVisitFilter)
 | 
				
			||||||
 | 
					            .HasForeignKey(s => new { s.SubjectId, s.TrialReadingCriterionId })
 | 
				
			||||||
 | 
					            .HasPrincipalKey(c => new { c.SubjectId, c.TrialReadingCriterionId });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue