修改BM退回
parent
3e3fc13602
commit
1dae1834a4
|
@ -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>
|
||||||
|
|
|
@ -332,15 +332,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))
|
||||||
{
|
{
|
||||||
|
@ -432,29 +434,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));
|
||||||
|
|
||||||
|
@ -709,9 +719,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)*/)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -1008,11 +1008,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))
|
||||||
|
@ -1485,7 +1493,6 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
//执行类似一致性核查回退流程
|
//执行类似一致性核查回退流程
|
||||||
await VisitBackAsync(origenalTask.SourceSubjectVisitId);
|
await VisitBackAsync(origenalTask.SourceSubjectVisitId);
|
||||||
|
|
||||||
await InfluenceAddtioncalEvaluationCritrionAsync(origenalTask);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1523,6 +1530,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);
|
||||||
|
@ -1729,7 +1738,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 });
|
||||||
}
|
}
|
||||||
|
@ -2157,6 +2166,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);
|
||||||
|
@ -2283,7 +2294,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await InfluenceAddtioncalEvaluationCritrionAsync(task);
|
|
||||||
|
|
||||||
|
|
||||||
await _visitTaskRepository.SaveChangesAsync();
|
await _visitTaskRepository.SaveChangesAsync();
|
||||||
|
@ -2296,7 +2307,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))
|
||||||
|
@ -2312,6 +2323,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