diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index cd1501d3f..b1b3b5f63 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -21,6 +21,7 @@ using System.Linq; using DocumentFormat.OpenXml.Bibliography; using Org.BouncyCastle.Crypto; using IRaCIS.Core.Domain.Share.Reading; +using MassTransit; namespace IRaCIS.Core.Application.Service.Allocation { @@ -1082,11 +1083,11 @@ 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(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum) ) + //前序 不存在 未生成任务的访视 + .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(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum)) + .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) @@ -1416,7 +1417,7 @@ namespace IRaCIS.Core.Application.Service.Allocation //添加申请记录 var visitTaskReReading = await _visitTaskReReadingRepository.AddAsync(new VisitTaskReReading() { - TrialId=applyReReadingCommand.TrialId, + TrialId = applyReReadingCommand.TrialId, RootReReadingTaskId = rootReReadingTaskId == Guid.Empty ? task.Id : rootReReadingTaskId, OriginalReReadingTaskId = task.Id, RequestReReadingTime = DateTime.Now, @@ -1550,7 +1551,7 @@ namespace IRaCIS.Core.Application.Service.Allocation //1.1 有附加评估,会影响其他标准的任务 if (criterionConfig.CriterionType == CriterionType.RECIST1Point1 && criterionConfig.IsAdditionalAssessment) { - // PM申请 SPM / CPM审批 + // PM申请 SPM / CPM审批 if (visitTaskReReadingAppply.RequestReReadingType == RequestReReadingType.TrialGroupApply && (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM)) { filterExpression = filterExpression.And(t => t.TrialReadingCriterionId == origenalTask.TrialReadingCriterionId || t.TrialReadingCriterion.CriterionType == CriterionType.RECIST1Pointt1_MB); @@ -1976,29 +1977,9 @@ namespace IRaCIS.Core.Application.Service.Allocation { if (origenalTask.ReadingCategory == ReadingCategory.Visit) { - var list = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + CopyForms(newTask, origenalTask); - foreach (var item in list) - { - item.Id = Guid.Empty; - item.VisitTaskId = newTask.Id; - } - - _ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result; } - //else if (origenalTask.ReadingCategory == ReadingCategory.Global) - //{ - // var list = _repository.Where(t => t.GlobalTaskId == origenalTask.Id).ToList(); - - // foreach (var item in list) - // { - // item.Id = Guid.Empty; - // item.GlobalTaskId = newTask.Id; - // } - - // _ = _repository.AddRangeAsync(list).Result; - //} - } @@ -2007,28 +1988,10 @@ namespace IRaCIS.Core.Application.Service.Allocation { if (origenalTask.ReadingCategory == ReadingCategory.Visit) { - var list = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); - - foreach (var item in list) - { - item.Id = Guid.Empty; - item.VisitTaskId = newTask.Id; - } - - _ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result; + CopyForms(newTask, origenalTask); } - //else if (origenalTask.ReadingCategory == ReadingCategory.Global) - //{ - // var list = _repository.Where(t => t.GlobalTaskId == origenalTask.Id).ToList(); - // foreach (var item in list) - // { - // item.Id = Guid.Empty; - // item.GlobalTaskId = newTask.Id; - // } - // _ = _repository.AddRangeAsync(list).Result; - //} } } @@ -2124,15 +2087,8 @@ namespace IRaCIS.Core.Application.Service.Allocation { if (origenalTask.ReadingCategory == ReadingCategory.Visit) { - var list = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + CopyForms(newTask, origenalTask); - foreach (var item in list) - { - item.Id = Guid.Empty; - item.VisitTaskId = newTask.Id; - } - - _ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result; } } @@ -2142,15 +2098,8 @@ namespace IRaCIS.Core.Application.Service.Allocation { if (origenalTask.ReadingCategory == ReadingCategory.Visit) { - var list = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + CopyForms(newTask, origenalTask); - foreach (var item in list) - { - item.Id = Guid.Empty; - item.VisitTaskId = newTask.Id; - } - - _ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result; } } @@ -2209,6 +2158,74 @@ namespace IRaCIS.Core.Application.Service.Allocation return ResponseOutput.Ok(); } + private void CopyForms(VisitTask newTask, VisitTask origenalTask) + { + + //自定义 + var readingCustomTagList = _repository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + + foreach (var item in readingCustomTagList) + { + item.Id = Guid.Empty; + item.VisitTaskId = newTask.Id; + } + + _ = _repository.AddRangeAsync(readingCustomTagList).Result; + + + var readingTaskQuestionMarkList = _repository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + + foreach (var item in readingTaskQuestionMarkList) + { + item.Id = Guid.Empty; + item.VisitTaskId = newTask.Id; + } + + _ = _repository.AddRangeAsync(readingTaskQuestionMarkList).Result; + + var readingTaskQuestionAnswerList = _repository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + + foreach (var item in readingTaskQuestionAnswerList) + { + item.Id = Guid.Empty; + item.VisitTaskId = newTask.Id; + } + _ = _repository.AddRangeAsync(readingTaskQuestionAnswerList).Result; + + + + //ReadingTableAnswerRowInfo ReadingTableQuestionAnswer 一起加 + var readingTableAnswerRowInfoList = _repository.Where(t => t.VisitTaskId == origenalTask.Id).Include(t => t.LesionAnswerList).ToList(); + + foreach (var item in readingTableAnswerRowInfoList) + { + item.Id = NewId.NextSequentialGuid(); + item.VisitTaskId = newTask.Id; + + foreach (var item2 in item.LesionAnswerList) + { + item2.Id = Guid.Empty; + item2.RowId = item.Id; + item2.VisitTaskId = newTask.Id; + } + } + + _ = _repository.AddRangeAsync(readingTableAnswerRowInfoList).Result; + + + //var readingTableQuestionAnswerList = _repository.Where(t => t.VisitTaskId == origenalTask.Id).ToList(); + + //foreach (var item in readingTableQuestionAnswerList) + //{ + // item.Id = Guid.Empty; + // item.VisitTaskId = newTask.Id; + //} + + //_ = _repository.AddRangeAsync(readingTableQuestionAnswerList).Result; + + + } + /// /// PM 设置任务 退回 @@ -2256,7 +2273,7 @@ namespace IRaCIS.Core.Application.Service.Allocation Expression> filterExpression = t => t.TrialId == trialId && t.SubjectId == task.SubjectId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze) && t.TaskAllocationState == TaskAllocationState.Allocated; - + if (criterionConfig.CriterionType == CriterionType.RECIST1Point1 && criterionConfig.IsAdditionalAssessment) { //影像退回,必定影响两个标准的任务 @@ -2590,8 +2607,6 @@ namespace IRaCIS.Core.Application.Service.Allocation var filterObj = (await _visitTaskRepository.FirstOrDefaultNoTrackingAsync(t => t.Id == taskId)).IfNullThrowException(); var trialId = filterObj.TrialId; - //var trialConfig = (await _trialRepository.Where(t => t.Id == trialId).Select(t => new { TrialId = t.Id, t.IsReadingTaskViewInOrder, t.ReadingType }).FirstOrDefaultAsync()).IfNullThrowException(); - var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == filterObj.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.CriterionType, x.IsAdditionalAssessment, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException(); Expression> filterExpression = t => t.TrialId == trialId && t.SubjectId == filterObj.SubjectId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze) && t.TaskAllocationState == TaskAllocationState.Allocated; @@ -2613,10 +2628,10 @@ namespace IRaCIS.Core.Application.Service.Allocation { // 1.1 基线任务影响BM任务 - if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && _subjectVisitRepository.Any(t=>t.Id==filterObj.SourceSubjectVisitId && t.IsBaseLine==true)) + if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && _subjectVisitRepository.Any(t => t.Id == filterObj.SourceSubjectVisitId && t.IsBaseLine == true)) { - isIR1Point1AdditionalAssessmentBaseline=true; + isIR1Point1AdditionalAssessmentBaseline = true; //filterExpression = filterExpression.And(t => t.TrialReadingCriterionId == filterObj.TrialReadingCriterionId || t.TrialReadingCriterion.CriterionType == CriterionType.RECIST1Pointt1_MB); @@ -2632,7 +2647,7 @@ namespace IRaCIS.Core.Application.Service.Allocation else { filterExpression = filterExpression.And(t => t.TrialReadingCriterionId == filterObj.TrialReadingCriterionId || t.TrialReadingCriterion.CriterionType == CriterionType.RECIST1Pointt1_MB); - + } } else @@ -2655,10 +2670,10 @@ namespace IRaCIS.Core.Application.Service.Allocation || (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer && applyId == null)) { - //当前任务及其之后的所有访视任务、全局任务、裁判任务、肿瘤学阅片任务 + //当前任务及其之后的所有访视任务、全局任务、裁判任务、肿瘤学阅片任务 - //有序 - if (criterionConfig.IsReadingTaskViewInOrder) + //有序 + if (criterionConfig.IsReadingTaskViewInOrder) { switch (filterObj.ReadingCategory) @@ -2682,7 +2697,7 @@ namespace IRaCIS.Core.Application.Service.Allocation )) || t.Id == filterObj.Id) ; } - // IR 申请1.1 基线重阅,影响附加评估所有的任务 + // IR 申请1.1 基线重阅,影响附加评估所有的任务 else if (isIR1Point1AdditionalAssessmentBaseline) { filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum && @@ -2691,7 +2706,7 @@ namespace IRaCIS.Core.Application.Service.Allocation // 裁判 肿瘤学是另外的医生做 || t.ReadingCategory == ReadingCategory.Judge || t.ReadingCategory == ReadingCategory.Oncology - )&& t.TrialReadingCriterionId==filterObj.TrialReadingCriterionId )||( t.TrialReadingCriterion.CriterionType == CriterionType.RECIST1Pointt1_MB)) + ) && t.TrialReadingCriterionId == filterObj.TrialReadingCriterionId) || (t.TrialReadingCriterion.CriterionType == CriterionType.RECIST1Pointt1_MB)) ); } else