修改稽查

Uat_Study
{872297557@qq.com} 2022-12-15 18:24:44 +08:00
parent ffa27cba35
commit f1d9f67b6e
5 changed files with 153 additions and 126 deletions

View File

@ -84,7 +84,7 @@ namespace IRaCIS.Core.Application.Service
{ {
//找到一致性核查通过且没有产生任务的访视 //找到一致性核查通过且没有产生任务的访视
var needGenerateVisit = await _subjectVisitRepository.Where(t => t.TrialId == trialId && t.CheckState == CheckStateEnum.CVPassed && var needGenerateVisit = await _subjectVisitRepository.Where(t => t.TrialId == trialId && t.CheckState == CheckStateEnum.CVPassed &&
!t.VisitTaskList.Any(u=>u.TrialReadingCriterionId== confirmedTrialReadingCriterionId &&u.SourceSubjectVisitId==t.Id)).ToListAsync(); !t.VisitTaskList.Any(u => u.TrialReadingCriterionId == confirmedTrialReadingCriterionId && u.SourceSubjectVisitId == t.Id)).ToListAsync();
var trialReadingCriterionConfig = await _trialReadingCriterionRepository.Where(t => t.Id == confirmedTrialReadingCriterionId).Select(t => new { TrialReadingCriterionId = t.Id, t.ReadingTool, t.ReadingType, t.IsReadingTaskViewInOrder, t.IsFollowVisitAutoAssign, t.IsFollowGlobalVisitAutoAssign, t.FollowGlobalVisitAutoAssignDefaultState, t.FollowVisitAutoAssignDefaultState, t.TaskAllocateObjEnum }).FirstOrDefaultAsync(); var trialReadingCriterionConfig = await _trialReadingCriterionRepository.Where(t => t.Id == confirmedTrialReadingCriterionId).Select(t => new { TrialReadingCriterionId = t.Id, t.ReadingTool, t.ReadingType, t.IsReadingTaskViewInOrder, t.IsFollowVisitAutoAssign, t.IsFollowGlobalVisitAutoAssign, t.FollowGlobalVisitAutoAssignDefaultState, t.FollowVisitAutoAssignDefaultState, t.TaskAllocateObjEnum }).FirstOrDefaultAsync();
@ -99,13 +99,13 @@ namespace IRaCIS.Core.Application.Service
foreach (var subjectGroup in needGenerateVisit.GroupBy(t=>t.SubjectId).Select(g=> new { SubjectId= g.Key, SubjectVisitList= g.ToList() })) foreach (var subjectGroup in needGenerateVisit.GroupBy(t => t.SubjectId).Select(g => new { SubjectId = g.Key, SubjectVisitList = g.ToList() }))
{ {
var assignConfigList = await _subjectUserRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectGroup.SubjectId && t.OrignalSubjectUserId == null && t.IsConfirmed).Select(u => new { u.DoctorUserId, u.ArmEnum }).ToListAsync(); var assignConfigList = await _subjectUserRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectGroup.SubjectId && t.OrignalSubjectUserId == null && t.IsConfirmed).Select(u => new { u.DoctorUserId, u.ArmEnum }).ToListAsync();
var visitNumList = _subjectVisitRepository.Where(t => t.SubjectId == subjectGroup.SubjectId && t.IsLostVisit == false ).OrderBy(t=>t.VisitNum).Select(t=>t.VisitNum).ToList(); var visitNumList = _subjectVisitRepository.Where(t => t.SubjectId == subjectGroup.SubjectId && t.IsLostVisit == false).OrderBy(t => t.VisitNum).Select(t => t.VisitNum).ToList();
foreach (var subjectVisit in subjectGroup.SubjectVisitList) foreach (var subjectVisit in subjectGroup.SubjectVisitList)
{ {
@ -121,7 +121,7 @@ namespace IRaCIS.Core.Application.Service
{ {
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder) if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
{ {
blindTaskName = visitBlindConfig.BlindFollowUpPrefix+" " + visitNumList.IndexOf(subjectVisit.VisitNum); blindTaskName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(subjectVisit.VisitNum);
} }
else else
{ {
@ -258,7 +258,7 @@ namespace IRaCIS.Core.Application.Service
var trialId = generateTaskCommand.TrialId; var trialId = generateTaskCommand.TrialId;
var isAssignSubjectToDoctor = generateTaskCommand.IsAssignSubjectToDoctor; var isAssignSubjectToDoctor = generateTaskCommand.IsAssignSubjectToDoctor;
var trialReadingCriterionConfigList = _trialReadingCriterionRepository.Where(t => t.TrialId == trialId && t.ReadingInfoSignTime !=null).Select(t => new { TrialReadingCriterionId= t.Id ,t.ReadingTool,t.ReadingType, t.IsReadingTaskViewInOrder, t.IsFollowVisitAutoAssign, t.IsFollowGlobalVisitAutoAssign, t.FollowGlobalVisitAutoAssignDefaultState, t.FollowVisitAutoAssignDefaultState,t.TaskAllocateObjEnum } ).ToList(); var trialReadingCriterionConfigList = _trialReadingCriterionRepository.Where(t => t.TrialId == trialId && t.ReadingInfoSignTime != null).Select(t => new { TrialReadingCriterionId = t.Id, t.ReadingTool, t.ReadingType, t.IsReadingTaskViewInOrder, t.IsFollowVisitAutoAssign, t.IsFollowGlobalVisitAutoAssign, t.FollowGlobalVisitAutoAssignDefaultState, t.FollowVisitAutoAssignDefaultState, t.TaskAllocateObjEnum }).ToList();
var visitBlindConfig = _trialRepository.Where(t => t.Id == trialId).Select(t => new { t.BlindBaseLineName, t.BlindFollowUpPrefix }).FirstOrDefault(); var visitBlindConfig = _trialRepository.Where(t => t.Id == trialId).Select(t => new { t.BlindBaseLineName, t.BlindFollowUpPrefix }).FirstOrDefault();
@ -275,13 +275,13 @@ namespace IRaCIS.Core.Application.Service
//每个Subject 的每个访视 都要根据每个标准进行任务的生成 和分配(考虑回退后 的分配) //每个Subject 的每个访视 都要根据每个标准进行任务的生成 和分配(考虑回退后 的分配)
foreach (var subjectGroup in generateTaskCommand.VisitGenerataTaskList.GroupBy(t=>t.SubjectId).Select(g=>new {SubjectId=g.Key,SubjectVisitList=g.ToList()})) foreach (var subjectGroup in generateTaskCommand.VisitGenerataTaskList.GroupBy(t => t.SubjectId).Select(g => new { SubjectId = g.Key, SubjectVisitList = g.ToList() }))
{ {
foreach (var subjectVisit in subjectGroup.SubjectVisitList) foreach (var subjectVisit in subjectGroup.SubjectVisitList)
{ {
var visitNumList = _subjectVisitRepository.Where(t => t.SubjectId == subjectGroup.SubjectId && t.IsLostVisit==false).OrderBy(t => t.VisitNum).Select(t => t.VisitNum).ToList(); var visitNumList = _subjectVisitRepository.Where(t => t.SubjectId == subjectGroup.SubjectId && t.IsLostVisit == false).OrderBy(t => t.VisitNum).Select(t => t.VisitNum).ToList();
foreach (var trialReadingCriterionConfig in trialReadingCriterionConfigList) foreach (var trialReadingCriterionConfig in trialReadingCriterionConfigList)
@ -301,7 +301,7 @@ namespace IRaCIS.Core.Application.Service
{ {
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder) if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
{ {
blindTaskName = visitBlindConfig.BlindFollowUpPrefix+" " + visitNumList.IndexOf(subjectVisit.VisitNum); blindTaskName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(subjectVisit.VisitNum);
} }
else else
{ {
@ -421,7 +421,7 @@ namespace IRaCIS.Core.Application.Service
} }
//后续最近的未一致性核查通过的访视任务 //后续最近的未一致性核查通过的访视任务
var followBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && 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(); var followBackVisitTask = await _visitTaskRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && 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();
//大于当前访视 同时小于最近的未一致性核查通过的访视任务分配 或者生成 //大于当前访视 同时小于最近的未一致性核查通过的访视任务分配 或者生成
@ -433,10 +433,16 @@ namespace IRaCIS.Core.Application.Service
var followVisitGroup = followVisitTaskList.GroupBy(t => t.VisitTaskNum); var followVisitGroup = followVisitTaskList.GroupBy(t => t.VisitTaskNum);
//每个访视去判断 是分配还是生成(因为影响哪里有些是取消分配,有些是重阅重置 //每个访视去判断 是分配还是生成(因为影响哪里有些是取消分配,有些是重阅重置需要重新生成
foreach (var visitGroup in followVisitGroup) foreach (var visitGroup in followVisitGroup)
{ {
//如果后续访视已分配有效 就不用处理
if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm1))
{
//不做处理
}
else
{
var arm1 = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.DoubleReadingArm1); var arm1 = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.DoubleReadingArm1);
if (arm1 != null) if (arm1 != null)
{ {
@ -461,7 +467,7 @@ namespace IRaCIS.Core.Application.Service
SourceSubjectVisitId = latestTask.SourceSubjectVisitId, SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
VisitTaskNum = latestTask.VisitTaskNum, VisitTaskNum = latestTask.VisitTaskNum,
TaskBlindName = visitBlindConfig.BlindFollowUpPrefix+" " + visitNumList.IndexOf(latestTask.VisitTaskNum) , TaskBlindName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(latestTask.VisitTaskNum),
TaskName = latestTask.TaskName, TaskName = latestTask.TaskName,
BlindSubjectCode = latestTask.BlindSubjectCode, BlindSubjectCode = latestTask.BlindSubjectCode,
@ -480,6 +486,15 @@ namespace IRaCIS.Core.Application.Service
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30)); _provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
} }
}
//如果后续访视已分配有效 就不用处理
if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm2))
{
//不做处理
}
else
{
var arm2 = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.DoubleReadingArm2); var arm2 = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.DoubleReadingArm2);
if (arm2 != null) if (arm2 != null)
{ {
@ -506,7 +521,7 @@ namespace IRaCIS.Core.Application.Service
SourceSubjectVisitId = latestTask.SourceSubjectVisitId, SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
VisitTaskNum = latestTask.VisitTaskNum, VisitTaskNum = latestTask.VisitTaskNum,
TaskBlindName = visitBlindConfig.BlindFollowUpPrefix+" " + visitNumList.IndexOf(latestTask.VisitTaskNum), TaskBlindName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(latestTask.VisitTaskNum),
TaskName = latestTask.TaskName, TaskName = latestTask.TaskName,
BlindSubjectCode = latestTask.BlindSubjectCode, BlindSubjectCode = latestTask.BlindSubjectCode,
@ -527,6 +542,8 @@ namespace IRaCIS.Core.Application.Service
} }
} }
}
} }
//无序的时候 生成任务并分配出去 //无序的时候 生成任务并分配出去
@ -634,7 +651,7 @@ namespace IRaCIS.Core.Application.Service
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder) 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(); 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) if (beforeBackVisitTask == null)
@ -674,7 +691,14 @@ namespace IRaCIS.Core.Application.Service
foreach (var visitGroup in followVisitGroup) foreach (var visitGroup in followVisitGroup)
{ {
//如果后续访视已分配有效 就不用处理
if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.SingleReadingArm))
{
//不做处理
}
else
{
var arm = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.SingleReadingArm); var arm = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.SingleReadingArm);
if (arm != null) if (arm != null)
{ {
@ -699,7 +723,7 @@ namespace IRaCIS.Core.Application.Service
SourceSubjectVisitId = latestTask.SourceSubjectVisitId, SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
VisitTaskNum = latestTask.VisitTaskNum, VisitTaskNum = latestTask.VisitTaskNum,
TaskBlindName = visitBlindConfig.BlindFollowUpPrefix+" " + visitNumList.IndexOf(latestTask.VisitTaskNum), TaskBlindName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(latestTask.VisitTaskNum),
TaskName = latestTask.TaskName, TaskName = latestTask.TaskName,
BlindSubjectCode = latestTask.BlindSubjectCode, BlindSubjectCode = latestTask.BlindSubjectCode,
@ -715,6 +739,8 @@ namespace IRaCIS.Core.Application.Service
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30)); _provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
} }
}
} }
@ -952,7 +978,7 @@ namespace IRaCIS.Core.Application.Service
case GenerateTaskCategory.Judge: case GenerateTaskCategory.Judge:
var firstTask = await _visitTaskRepository.Where(x => generateTaskCommand.JudgeVisitTaskIdList.Contains(x.Id)).FirstOrDefaultAsync(); var firstTask = await _visitTaskRepository.Where(x => generateTaskCommand.JudgeVisitTaskIdList.Contains(x.Id)).FirstOrDefaultAsync();
var subjectUser = await _subjectUserRepository.Where(x => x.SubjectId == firstTask.SubjectId && x.ArmEnum == Arm.JudgeArm && x.IsConfirmed &&x.TrialReadingCriterionId==firstTask.TrialReadingCriterionId).FirstOrDefaultAsync(); var subjectUser = await _subjectUserRepository.Where(x => x.SubjectId == firstTask.SubjectId && x.ArmEnum == Arm.JudgeArm && x.IsConfirmed && x.TrialReadingCriterionId == firstTask.TrialReadingCriterionId).FirstOrDefaultAsync();
VisitTask visitTask = new VisitTask() VisitTask visitTask = new VisitTask()
{ {
@ -1003,7 +1029,7 @@ namespace IRaCIS.Core.Application.Service
case GenerateTaskCategory.Global: case GenerateTaskCategory.Global:
var originalTaskInfo = await _visitTaskRepository.Where(x => x.Id == generateTaskCommand.OriginalVisitId).Include(x=>x.TrialReadingCriterion).FirstNotNullAsync(); var originalTaskInfo = await _visitTaskRepository.Where(x => x.Id == generateTaskCommand.OriginalVisitId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
// 需要添加全局任务再添加 // 需要添加全局任务再添加
if (originalTaskInfo.TrialReadingCriterion.IsGlobalTask) if (originalTaskInfo.TrialReadingCriterion.IsGlobalTask)
@ -1050,7 +1076,7 @@ namespace IRaCIS.Core.Application.Service
foreach (var item in generateTaskCommand.ReadingGenerataTaskList) foreach (var item in generateTaskCommand.ReadingGenerataTaskList)
{ {
//需要 根据标准筛选 //需要 根据标准筛选
var oncologySubjectUser = await _subjectUserRepository.Where(x => x.SubjectId == item.SubjectId && x.ArmEnum == Arm.TumorArm && x.IsConfirmed&&x.TrialReadingCriterionId== originalTaskInfo.TrialReadingCriterionId).FirstOrDefaultAsync(); var oncologySubjectUser = await _subjectUserRepository.Where(x => x.SubjectId == item.SubjectId && x.ArmEnum == Arm.TumorArm && x.IsConfirmed && x.TrialReadingCriterionId == originalTaskInfo.TrialReadingCriterionId).FirstOrDefaultAsync();
item.VisitNum = await _readModuleRepository.Where(x => x.Id == item.ReadModuleId).Select(x => x.SubjectVisit.VisitNum).FirstOrDefaultAsync(); item.VisitNum = await _readModuleRepository.Where(x => x.Id == item.ReadModuleId).Select(x => x.SubjectVisit.VisitNum).FirstOrDefaultAsync();

View File

@ -94,7 +94,7 @@ namespace IRaCIS.Core.Application.Service.Inspection
CreateTime = data.CreateTime, CreateTime = data.CreateTime,
CreateUserId = data.CreateUserId, CreateUserId = data.CreateUserId,
ModuleTypeId = leftmoduleTypec.Id, ModuleTypeId = leftmoduleTypec.Id,
BlindName = leftsubjectVisit.BlindName, BlindName = data.VisitTask.TaskBlindName,
TrialId = data.TrialId, TrialId = data.TrialId,
SiteId = data.SiteId, SiteId = data.SiteId,
SubjectId = data.SubjectId, SubjectId = data.SubjectId,

View File

@ -196,7 +196,7 @@ namespace IRaCIS.Application.Services
[HttpPost] [HttpPost]
public async Task<List<string>> GetSystemGroupNameList(GetTrialGroupNameListInDto inDto) public async Task<List<string>> GetSystemGroupNameList(GetTrialGroupNameListInDto inDto)
{ {
var result = await _readingQuestionSystemRepository.Where(x => x.ReadingQuestionCriterionSystemId == inDto.CriterionId && x.Type == ReadingQestionType.Group) var result = await _readingQuestionSystemRepository.Where(x => x.ReadingQuestionCriterionSystemId == inDto.CriterionId && x.Type == ReadingQestionType.Group).OrderBy(t=>t.ShowOrder)
.Select(x => x.GroupName).ToListAsync(); .Select(x => x.GroupName).ToListAsync();
return result; return result;
@ -576,7 +576,7 @@ namespace IRaCIS.Application.Services
public async Task<List<string>> GetTrialGroupNameList(GetTrialGroupNameListInDto inDto) public async Task<List<string>> GetTrialGroupNameList(GetTrialGroupNameListInDto inDto)
{ {
var result = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == inDto.CriterionId && x.Type == ReadingQestionType.Group) var result = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == inDto.CriterionId && x.Type == ReadingQestionType.Group)
.Where(x => x.ReadingCriterionPageId == inDto.ReadingCriterionPageId) .Where(x => x.ReadingCriterionPageId == inDto.ReadingCriterionPageId).OrderBy(t => t.ShowOrder)
.Select(x => x.GroupName).ToListAsync(); .Select(x => x.GroupName).ToListAsync();
return result; return result;

View File

@ -49,6 +49,9 @@ namespace IRaCIS.Core.Domain.Models
public Guid? SubjectVisitId { get; set; } public Guid? SubjectVisitId { get; set; }
public Guid? VisitTaskId { get; set; }
public VisitTask VisitTask { get; set; }
/// <summary> /// <summary>
/// IP地址 /// IP地址

View File

@ -150,8 +150,6 @@ namespace IRaCIS.Core.Infra.EFCore.Common.Dto
//标识操作 是否区分接口 //标识操作 是否区分接口
public bool IsDistinctionInterface=true; public bool IsDistinctionInterface=true;
public Guid? VisitTaskId { get; set; }
} }