修改退回逻辑
parent
2bde5d1309
commit
9bfca25044
|
@ -669,6 +669,111 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#region 重阅/退回的时候,需要后续任务生成
|
||||||
|
|
||||||
|
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
|
||||||
|
{
|
||||||
|
//之前有回退到影像上传的访视 那么当前访视一致性核查通过的时候,当前访视生成但是不分配出去(排除失访的)
|
||||||
|
var beforeBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum < subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
|
if (beforeBackVisitTask == null)
|
||||||
|
{
|
||||||
|
|
||||||
|
singleTask.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget);
|
||||||
|
|
||||||
|
|
||||||
|
var followBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.ReadingCategory == ReadingCategory.Visit && t.SourceSubjectVisit.CheckState != CheckStateEnum.CVPassed && t.SourceSubjectVisit.IsLostVisit == false).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
//存在退回访视1 又退回基线 这种情况 生成任务 考虑基线先一致性核查通过,但是访视1还未通过时 生成任务
|
||||||
|
var followVisitTaskList = await _visitTaskRepository
|
||||||
|
.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId && t.VisitTaskNum > subjectVisit.VisitNum && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed && t.ReadingCategory == ReadingCategory.Visit && t.IsAnalysisCreate == false, true)
|
||||||
|
.WhereIf(followBackVisitTask != null, t => t.VisitTaskNum < followBackVisitTask.VisitTaskNum)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
var followVisitGroup = followVisitTaskList.GroupBy(t => t.VisitTaskNum);
|
||||||
|
|
||||||
|
//每个访视去判断 是分配还是生成
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var visitGroup in followVisitGroup)
|
||||||
|
{
|
||||||
|
//如果后续访视已分配有效 就不用处理
|
||||||
|
if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.ArmEnum == Arm.SingleReadingArm))
|
||||||
|
{
|
||||||
|
//不做处理
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var arm = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.DoctorUserId == null && t.ArmEnum == Arm.SingleReadingArm);
|
||||||
|
if (arm != null)
|
||||||
|
{
|
||||||
|
|
||||||
|
arm.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var latestTask = visitGroup.Where(t => t.ArmEnum == Arm.SingleReadingArm).OrderByDescending(t => t.CreateTime).First();
|
||||||
|
|
||||||
|
var taskOne = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||||
|
{
|
||||||
|
TrialId = trialId,
|
||||||
|
SubjectId = subjectVisit.SubjectId,
|
||||||
|
IsUrgent = subjectVisit.IsUrgent,
|
||||||
|
ArmEnum = Arm.SingleReadingArm,//特殊
|
||||||
|
Code = currentMaxCodeInt + 1,
|
||||||
|
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
||||||
|
ReadingCategory = ReadingCategory.Visit,
|
||||||
|
TaskUrgentType = latestTask.TaskUrgentType,
|
||||||
|
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
||||||
|
VisitTaskNum = latestTask.VisitTaskNum,
|
||||||
|
TaskBlindName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(latestTask.VisitTaskNum),
|
||||||
|
TaskName = latestTask.TaskName,
|
||||||
|
|
||||||
|
BlindSubjectCode = latestTask.BlindSubjectCode,
|
||||||
|
BlindTrialSiteCode = latestTask.BlindTrialSiteCode,
|
||||||
|
IsAnalysisCreate = latestTask.IsAnalysisCreate,
|
||||||
|
IsSelfAnalysis = latestTask.IsSelfAnalysis,
|
||||||
|
|
||||||
|
|
||||||
|
SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget),
|
||||||
|
|
||||||
|
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
|
||||||
|
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
|
||||||
|
IsClinicalDataSign = latestTask.IsClinicalDataSign
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||||
|
|
||||||
|
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue