Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
This commit is contained in:
@@ -349,15 +349,17 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
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)
|
||||
{
|
||||
//未防止脏数据 这里也多判断一次
|
||||
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? task2 = null;
|
||||
VisitTask? task1 = existCurrentVisitTaskList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm1);
|
||||
VisitTask? task2 = existCurrentVisitTaskList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm2);
|
||||
|
||||
if (!existCurrentVisitTaskList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1))
|
||||
{
|
||||
@@ -449,29 +451,37 @@ namespace IRaCIS.Core.Application.Service
|
||||
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,
|
||||
SubjectId = subjectVisit.SubjectId,
|
||||
IsUrgent = subjectVisit.IsUrgent,
|
||||
TaskBlindName = blindTaskName,
|
||||
TaskName = subjectVisit.VisitName,
|
||||
VisitTaskNum = subjectVisit.VisitNum,
|
||||
TaskUrgentType = taskUrgentType,
|
||||
IsCanEditUrgentState = isCanEditUrgentState,
|
||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||
ArmEnum = Arm.SingleReadingArm, //特殊
|
||||
Code = currentMaxCodeInt + 1,
|
||||
SourceSubjectVisitId = subjectVisit.Id,
|
||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
||||
ReadingCategory = ReadingCategory.Visit,
|
||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
||||
IsClinicalDataSign = isClinicalDataSign
|
||||
});
|
||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||
|
||||
singleTask = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||
{
|
||||
TrialId = trialId,
|
||||
SubjectId = subjectVisit.SubjectId,
|
||||
IsUrgent = subjectVisit.IsUrgent,
|
||||
TaskBlindName = blindTaskName,
|
||||
TaskName = subjectVisit.VisitName,
|
||||
VisitTaskNum = subjectVisit.VisitNum,
|
||||
TaskUrgentType = taskUrgentType,
|
||||
IsCanEditUrgentState = isCanEditUrgentState,
|
||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||
ArmEnum = Arm.SingleReadingArm, //特殊
|
||||
Code = currentMaxCodeInt + 1,
|
||||
SourceSubjectVisitId = subjectVisit.Id,
|
||||
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));
|
||||
|
||||
@@ -726,9 +736,9 @@ namespace IRaCIS.Core.Application.Service
|
||||
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;
|
||||
|
||||
var critrion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId);
|
||||
|
||||
var visitGroupQuery = _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.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.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.TrialReadingCriterion.IsAutoCreate == false && 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.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))
|
||||
@@ -1541,7 +1549,6 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||
//执行类似一致性核查回退流程
|
||||
await VisitBackAsync(origenalTask.SourceSubjectVisitId);
|
||||
|
||||
await InfluenceAddtioncalEvaluationCritrionAsync(origenalTask);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1579,6 +1586,8 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||
// 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 SetMedicalReviewInvalidAsync(influenceTaskList);
|
||||
@@ -1785,7 +1794,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||
|
||||
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 });
|
||||
}
|
||||
@@ -2213,6 +2222,8 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||
// 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 SetMedicalReviewInvalidAsync(influenceTaskList);
|
||||
@@ -2339,7 +2350,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||
|
||||
|
||||
|
||||
await InfluenceAddtioncalEvaluationCritrionAsync(task);
|
||||
|
||||
|
||||
|
||||
await _visitTaskRepository.SaveChangesAsync();
|
||||
@@ -2352,7 +2363,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||
/// 如果是基线退回 影响附加评估标准 是否参与评估
|
||||
/// </summary>
|
||||
/// <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))
|
||||
@@ -2368,6 +2379,32 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||
//删除筛选的序列数据
|
||||
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
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//包括临床数据签名状态
|
||||
|
||||
Reference in New Issue
Block a user