影响列表

Uat_Study
hang 2022-07-18 13:10:37 +08:00
parent 23c3797a3e
commit 5af9e4e206
2 changed files with 101 additions and 84 deletions

View File

@ -196,8 +196,13 @@ namespace IRaCIS.Core.Application.Service
#region 后续访视 未分配的进行再次分配,重置的或者失效的 需要重新生成新的任务 (PM 有序退回 或者PM 有序 申请重阅)
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).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, true).ToListAsync();
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, true)
.WhereIf(followBackVisitTask !=null ,t=> t.VisitTaskNum < followBackVisitTask.VisitTaskNum)
.ToListAsync();
var followVisitGroup = followVisitTaskList.GroupBy(t => t.VisitTaskNum);

View File

@ -1731,117 +1731,129 @@ namespace IRaCIS.Core.Application.Service
if (isReReading)
{
//IR 申请 PM 同意 仅仅影响自己
//当前任务及其之后的所有访视任务、全局任务、裁判任务、肿瘤学阅片任务
if (await _visitTaskReReadingRepository.AnyAsync(t => t.Id == applyId && t.CreateUser.UserTypeEnum == UserTypeEnum.IndependentReviewer) && _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager)
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager)
{
//有序
if (trialConfig.IsReadingTaskViewInOrder)
//IR 申请 PM 同意 仅仅影响自己
//当前任务及其之后的所有访视任务、全局任务、裁判任务、肿瘤学阅片任务
if (await _visitTaskReReadingRepository.AnyAsync(t => t.Id == applyId && t.CreateUser.UserTypeEnum == UserTypeEnum.IndependentReviewer))
{
switch (filterObj.ReadingCategory)
//有序
if (trialConfig.IsReadingTaskViewInOrder)
{
case ReadingCategory.Visit:
//影响当前医生 以及当前医生之后的 1、访视任务 已经读完的,(未读完的或者未读的 不处理)
//2、后续任务如果是全局、肿瘤学阅片任务状态为阅片完成标记为重阅重置若在阅片中则标记为失效若为待阅片则标记为失效
//3、当前任务、后续访视任务或者全局任务触发了裁判任务若裁判任务状态为阅片完成则标记为重阅重置若在阅片中或待阅片则标记为失效
filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum && t.DoctorUserId == filterObj.DoctorUserId &&
((t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit) ||
t.ReadingCategory == ReadingCategory.Global ||
t.ReadingCategory == ReadingCategory.Oncology ||
t.ReadingCategory == ReadingCategory.Judge)
);
break;
case ReadingCategory.Global:
switch (filterObj.ReadingCategory)
{
case ReadingCategory.Visit:
//影响当前医生 以及当前医生之后的 1、访视任务 已经读完的,(未读完的或者未读的 不处理)
//2、后续任务如果是全局、肿瘤学阅片任务状态为阅片完成标记为重阅重置若在阅片中则标记为失效若为待阅片则标记为失效
//3、当前任务、后续访视任务或者全局任务触发了裁判任务若裁判任务状态为阅片完成则标记为重阅重置若在阅片中或待阅片则标记为失效
filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum && t.DoctorUserId == filterObj.DoctorUserId &&
((t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit) ||
t.ReadingCategory == ReadingCategory.Global ||
t.ReadingCategory == ReadingCategory.Oncology ||
t.ReadingCategory == ReadingCategory.Judge)
);
break;
// 1、后续任务如果是访视任务均不处理
//2、后续任务如果是全局、状态为阅片完成则标记为重阅重置若阅片中或待阅片则不处理
//3、当前任务或者全局任务触发了裁判任务若裁判任务状态为阅片完成则标记为重阅重置若在阅片中或待阅片则标记为失效
//4、后续任务为肿瘤学阅片任务状态为阅片完成标记为重阅重置若在阅片中则标记为失效若为待阅片则标记为失效
case ReadingCategory.Global:
//全局不影响后续访视任务
filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum && t.DoctorUserId == filterObj.DoctorUserId &&
(
t.ReadingCategory == ReadingCategory.Global ||
t.ReadingCategory == ReadingCategory.Oncology ||
t.ReadingCategory == ReadingCategory.Judge)
);
break;
// 1、后续任务如果是访视任务均不处理
//2、后续任务如果是全局、状态为阅片完成则标记为重阅重置若阅片中或待阅片则不处理
//3、当前任务或者全局任务触发了裁判任务若裁判任务状态为阅片完成则标记为重阅重置若在阅片中或待阅片则标记为失效
//4、后续任务为肿瘤学阅片任务状态为阅片完成标记为重阅重置若在阅片中则标记为失效若为待阅片则标记为失效
//1、后续任务如果是访视任务、全局任务或裁判任务均不处理
case ReadingCategory.Oncology:
//全局不影响后续访视任务
filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum && t.DoctorUserId == filterObj.DoctorUserId &&
(
t.ReadingCategory == ReadingCategory.Global ||
t.ReadingCategory == ReadingCategory.Oncology ||
t.ReadingCategory == ReadingCategory.Judge)
);
break;
//仅仅影响自己
filterExpression = filterExpression.And(t => (t.Id == filterObj.Id));
break;
//1、后续任务如果是访视任务、全局任务或裁判任务均不处理
case ReadingCategory.Oncology:
//(只允许申请该阅片人最后一次完成裁判的任务重阅)申请的时候做了限制
case ReadingCategory.Judge:
//仅仅影响自己
filterExpression = filterExpression.And(t => (t.Id == filterObj.Id));
break;
// 1、后续任务如果是访视任务、全局任务均不处理
//2、后续若有肿瘤学阅片若肿瘤学阅片任务状态为阅片完成则标记为重阅重置若为阅片中则标记为失效如为待阅片则取消分配
//(只允许申请该阅片人最后一次完成裁判的任务重阅)申请的时候做了限制
case ReadingCategory.Judge:
//裁判的影响自己 和后续肿瘤学阅片
filterExpression = filterExpression.And(t => (t.Id == filterObj.Id) || (t.VisitTaskNum > filterObj.VisitTaskNum && t.DoctorUserId == filterObj.DoctorUserId && t.ReadingCategory == ReadingCategory.Oncology));
// 1、后续任务如果是访视任务、全局任务均不处理
//2、后续若有肿瘤学阅片若肿瘤学阅片任务状态为阅片完成则标记为重阅重置若为阅片中则标记为失效如为待阅片则取消分配
break;
//裁判的影响自己 和后续肿瘤学阅片
filterExpression = filterExpression.And(t => (t.Id == filterObj.Id) || (t.VisitTaskNum > filterObj.VisitTaskNum && t.DoctorUserId == filterObj.DoctorUserId && t.ReadingCategory == ReadingCategory.Oncology));
break;
default:
throw new BusinessValidationFailedException("不支持重阅的任务类型");
default:
throw new BusinessValidationFailedException("不支持重阅的任务类型");
}
}
//无序
else
{
//1.当前任务及裁判任务
//2.影响当前阅片人的任务
filterExpression = filterExpression.And(t => t.Id == filterObj.Id || t.Id == filterObj.JudgeVisitTaskId);
}
}
//无序
else
{
//1.当前任务及裁判任务
//2.影响当前阅片人的任务
filterExpression = filterExpression.And(t => t.Id == filterObj.Id || t.Id == filterObj.JudgeVisitTaskId);
throw new BusinessValidationFailedException("仅允许PM 同意 IR 申请的任务");
}
}
else if(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM)
{
//PM 影响所有阅片人 仅仅针对访视 SPM CPM 掉用
if (await _visitTaskReReadingRepository.AnyAsync(t => t.Id == applyId && t.CreateUser.UserTypeEnum == UserTypeEnum.ProjectManager) && filterObj.IsAnalysisCreate == false && filterObj.ReadingCategory == ReadingCategory.Visit)
{
//有序
if (trialConfig.IsReadingTaskViewInOrder)
{
switch (filterObj.ReadingCategory)
{
case ReadingCategory.Visit:
//访视影响当前以及当前之后的 两个阅片人的
filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum);
break;
default:
throw new BusinessValidationFailedException("不支持重阅的任务类型");
}
}
//无序
else
{
// 1.当前任务及裁判任务
// 2.影响所有阅片人的任务
var judegTaskNum = filterObj.VisitTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge];
filterExpression = filterExpression.And(t => t.VisitTaskNum == filterObj.VisitTaskNum || t.VisitTaskNum == judegTaskNum);
}
}
else
{
throw new BusinessValidationFailedException("仅允许SPM CPM 同意 PM 申请的非 一致性分析的访视任务");
}
}
else
{
throw new BusinessValidationFailedException("仅允许PM 同意 IR 申请的任务");
throw new BusinessValidationFailedException("该用户类型查看何种列表未定义");
}
//PM 影响所有阅片人 仅仅针对访视 SPM CPM 掉用
if (await _visitTaskReReadingRepository.AnyAsync(t => t.Id == applyId && t.CreateUser.UserTypeEnum == UserTypeEnum.ProjectManager) && (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM) && filterObj.IsAnalysisCreate == false && filterObj.ReadingCategory == ReadingCategory.Visit)
{
//有序
if (trialConfig.IsReadingTaskViewInOrder)
{
switch (filterObj.ReadingCategory)
{
case ReadingCategory.Visit:
//访视影响当前以及当前之后的 两个阅片人的
filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum);
break;
default:
throw new BusinessValidationFailedException("不支持重阅的任务类型");
}
}
//无序
else
{
// 1.当前任务及裁判任务
// 2.影响所有阅片人的任务
var judegTaskNum = filterObj.VisitTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge];
filterExpression = filterExpression.And(t => t.VisitTaskNum == filterObj.VisitTaskNum || t.VisitTaskNum == judegTaskNum);
}
}
else
{
throw new BusinessValidationFailedException("仅允许SPM CPM 同意 PM 申请的非 一致性分析的访视任务");
}
}