修改稽查
parent
ffa27cba35
commit
f1d9f67b6e
|
@ -80,14 +80,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
//基于标准签名 产生任务
|
//基于标准签名 产生任务
|
||||||
public async Task BaseCritrionGenerateVisitTask(Guid trialId, Guid confirmedTrialReadingCriterionId)
|
public async Task BaseCritrionGenerateVisitTask(Guid trialId, Guid confirmedTrialReadingCriterionId)
|
||||||
{
|
{
|
||||||
//找到一致性核查通过且没有产生任务的访视
|
//找到一致性核查通过且没有产生任务的访视
|
||||||
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();
|
||||||
|
|
||||||
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();
|
||||||
|
|
||||||
|
@ -99,14 +99,14 @@ 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)
|
||||||
{
|
{
|
||||||
var blindTaskName = string.Empty;
|
var blindTaskName = string.Empty;
|
||||||
|
@ -121,14 +121,14 @@ 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
|
||||||
{
|
{
|
||||||
blindTaskName = visitBlindConfig.BlindFollowUpPrefix;
|
blindTaskName = visitBlindConfig.BlindFollowUpPrefix;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
||||||
{
|
{
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -309,7 +309,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
||||||
|
@ -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,98 +433,115 @@ 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)
|
||||||
{
|
{
|
||||||
|
//如果后续访视已分配有效 就不用处理
|
||||||
var arm1 = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.DoubleReadingArm1);
|
if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm1))
|
||||||
if (arm1 != null)
|
|
||||||
{
|
{
|
||||||
arm1.TaskAllocationState = TaskAllocationState.Allocated;
|
//不做处理
|
||||||
arm1.AllocateTime = DateTime.Now;
|
|
||||||
arm1.DoctorUserId = task1.DoctorUserId;
|
|
||||||
arm1.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var latestTask = visitGroup.Where(t => t.ArmEnum == Arm.DoubleReadingArm1).OrderByDescending(t => t.CreateTime).First();
|
var arm1 = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.DoubleReadingArm1);
|
||||||
|
if (arm1 != null)
|
||||||
var taskOne = await _visitTaskRepository.AddAsync(new VisitTask()
|
|
||||||
{
|
{
|
||||||
TrialId = trialId,
|
arm1.TaskAllocationState = TaskAllocationState.Allocated;
|
||||||
SubjectId = subjectVisit.SubjectId,
|
arm1.AllocateTime = DateTime.Now;
|
||||||
IsUrgent = subjectVisit.IsUrgent,
|
arm1.DoctorUserId = task1.DoctorUserId;
|
||||||
ArmEnum = Arm.DoubleReadingArm1,//特殊
|
arm1.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
||||||
Code = currentMaxCodeInt + 1,
|
}
|
||||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
else
|
||||||
ReadingCategory = ReadingCategory.Visit,
|
{
|
||||||
|
var latestTask = visitGroup.Where(t => t.ArmEnum == Arm.DoubleReadingArm1).OrderByDescending(t => t.CreateTime).First();
|
||||||
|
|
||||||
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
var taskOne = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||||
VisitTaskNum = latestTask.VisitTaskNum,
|
{
|
||||||
TaskBlindName = visitBlindConfig.BlindFollowUpPrefix+" " + visitNumList.IndexOf(latestTask.VisitTaskNum) ,
|
TrialId = trialId,
|
||||||
TaskName = latestTask.TaskName,
|
SubjectId = subjectVisit.SubjectId,
|
||||||
|
IsUrgent = subjectVisit.IsUrgent,
|
||||||
|
ArmEnum = Arm.DoubleReadingArm1,//特殊
|
||||||
|
Code = currentMaxCodeInt + 1,
|
||||||
|
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
||||||
|
ReadingCategory = ReadingCategory.Visit,
|
||||||
|
|
||||||
BlindSubjectCode = latestTask.BlindSubjectCode,
|
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
||||||
BlindTrialSiteCode = latestTask.BlindTrialSiteCode,
|
VisitTaskNum = latestTask.VisitTaskNum,
|
||||||
IsAnalysisCreate = latestTask.IsAnalysisCreate,
|
TaskBlindName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(latestTask.VisitTaskNum),
|
||||||
IsSelfAnalysis = latestTask.IsSelfAnalysis,
|
TaskName = latestTask.TaskName,
|
||||||
TaskAllocationState = TaskAllocationState.Allocated,
|
|
||||||
AllocateTime = DateTime.Now,
|
|
||||||
DoctorUserId = task1.DoctorUserId,
|
|
||||||
SuggesteFinishedTime = DateTime.Now.AddDays(7),
|
|
||||||
TrialReadingCriterionId = latestTask.TrialReadingCriterionId
|
|
||||||
});
|
|
||||||
|
|
||||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
BlindSubjectCode = latestTask.BlindSubjectCode,
|
||||||
|
BlindTrialSiteCode = latestTask.BlindTrialSiteCode,
|
||||||
|
IsAnalysisCreate = latestTask.IsAnalysisCreate,
|
||||||
|
IsSelfAnalysis = latestTask.IsSelfAnalysis,
|
||||||
|
TaskAllocationState = TaskAllocationState.Allocated,
|
||||||
|
AllocateTime = DateTime.Now,
|
||||||
|
DoctorUserId = task1.DoctorUserId,
|
||||||
|
SuggesteFinishedTime = DateTime.Now.AddDays(7),
|
||||||
|
TrialReadingCriterionId = latestTask.TrialReadingCriterionId
|
||||||
|
});
|
||||||
|
|
||||||
|
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));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var arm2 = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.DoubleReadingArm2);
|
//如果后续访视已分配有效 就不用处理
|
||||||
if (arm2 != null)
|
if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm2))
|
||||||
{
|
{
|
||||||
arm2.TaskAllocationState = TaskAllocationState.Allocated;
|
//不做处理
|
||||||
arm2.AllocateTime = DateTime.Now;
|
|
||||||
arm2.DoctorUserId = task2.DoctorUserId;
|
|
||||||
arm2.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var latestTask = visitGroup.Where(t => t.ArmEnum == Arm.DoubleReadingArm2).OrderByDescending(t => t.CreateTime).First();
|
var arm2 = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.DoubleReadingArm2);
|
||||||
|
if (arm2 != null)
|
||||||
var taskTwo = await _visitTaskRepository.AddAsync(new VisitTask()
|
|
||||||
{
|
{
|
||||||
TrialId = trialId,
|
arm2.TaskAllocationState = TaskAllocationState.Allocated;
|
||||||
SubjectId = subjectVisit.SubjectId,
|
arm2.AllocateTime = DateTime.Now;
|
||||||
IsUrgent = subjectVisit.IsUrgent,
|
arm2.DoctorUserId = task2.DoctorUserId;
|
||||||
|
arm2.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var latestTask = visitGroup.Where(t => t.ArmEnum == Arm.DoubleReadingArm2).OrderByDescending(t => t.CreateTime).First();
|
||||||
|
|
||||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
var taskTwo = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||||
ArmEnum = Arm.DoubleReadingArm2,//特殊
|
{
|
||||||
Code = currentMaxCodeInt + 1,
|
TrialId = trialId,
|
||||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
SubjectId = subjectVisit.SubjectId,
|
||||||
ReadingCategory = ReadingCategory.Visit,
|
IsUrgent = subjectVisit.IsUrgent,
|
||||||
|
|
||||||
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||||
VisitTaskNum = latestTask.VisitTaskNum,
|
ArmEnum = Arm.DoubleReadingArm2,//特殊
|
||||||
TaskBlindName = visitBlindConfig.BlindFollowUpPrefix+" " + visitNumList.IndexOf(latestTask.VisitTaskNum),
|
Code = currentMaxCodeInt + 1,
|
||||||
TaskName = latestTask.TaskName,
|
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
||||||
|
ReadingCategory = ReadingCategory.Visit,
|
||||||
|
|
||||||
BlindSubjectCode = latestTask.BlindSubjectCode,
|
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
||||||
BlindTrialSiteCode = latestTask.BlindTrialSiteCode,
|
VisitTaskNum = latestTask.VisitTaskNum,
|
||||||
IsAnalysisCreate = latestTask.IsAnalysisCreate,
|
TaskBlindName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(latestTask.VisitTaskNum),
|
||||||
IsSelfAnalysis = latestTask.IsSelfAnalysis,
|
TaskName = latestTask.TaskName,
|
||||||
TaskAllocationState = TaskAllocationState.Allocated,
|
|
||||||
AllocateTime = DateTime.Now,
|
|
||||||
DoctorUserId = task2.DoctorUserId,
|
|
||||||
SuggesteFinishedTime = DateTime.Now.AddDays(7),
|
|
||||||
|
|
||||||
TrialReadingCriterionId = latestTask.TrialReadingCriterionId
|
BlindSubjectCode = latestTask.BlindSubjectCode,
|
||||||
});
|
BlindTrialSiteCode = latestTask.BlindTrialSiteCode,
|
||||||
|
IsAnalysisCreate = latestTask.IsAnalysisCreate,
|
||||||
|
IsSelfAnalysis = latestTask.IsSelfAnalysis,
|
||||||
|
TaskAllocationState = TaskAllocationState.Allocated,
|
||||||
|
AllocateTime = DateTime.Now,
|
||||||
|
DoctorUserId = task2.DoctorUserId,
|
||||||
|
SuggesteFinishedTime = DateTime.Now.AddDays(7),
|
||||||
|
|
||||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
TrialReadingCriterionId = latestTask.TrialReadingCriterionId
|
||||||
|
});
|
||||||
|
|
||||||
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
|
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||||
|
|
||||||
|
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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,48 +691,57 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
foreach (var visitGroup in followVisitGroup)
|
foreach (var visitGroup in followVisitGroup)
|
||||||
{
|
{
|
||||||
|
//如果后续访视已分配有效 就不用处理
|
||||||
var arm = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.SingleReadingArm);
|
if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.SingleReadingArm))
|
||||||
if (arm != null)
|
|
||||||
{
|
{
|
||||||
arm.TaskAllocationState = TaskAllocationState.Allocated;
|
//不做处理
|
||||||
arm.AllocateTime = DateTime.Now;
|
|
||||||
arm.DoctorUserId = singleTask.DoctorUserId;
|
|
||||||
arm.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var latestTask = visitGroup.Where(t => t.ArmEnum == Arm.SingleReadingArm).OrderByDescending(t => t.CreateTime).First();
|
var arm = visitGroup.FirstOrDefault(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.ArmEnum == Arm.SingleReadingArm);
|
||||||
|
if (arm != null)
|
||||||
var taskOne = await _visitTaskRepository.AddAsync(new VisitTask()
|
|
||||||
{
|
{
|
||||||
TrialId = trialId,
|
arm.TaskAllocationState = TaskAllocationState.Allocated;
|
||||||
SubjectId = subjectVisit.SubjectId,
|
arm.AllocateTime = DateTime.Now;
|
||||||
IsUrgent = subjectVisit.IsUrgent,
|
arm.DoctorUserId = singleTask.DoctorUserId;
|
||||||
ArmEnum = Arm.SingleReadingArm,//特殊
|
arm.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
||||||
Code = currentMaxCodeInt + 1,
|
}
|
||||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
else
|
||||||
ReadingCategory = ReadingCategory.Visit,
|
{
|
||||||
|
var latestTask = visitGroup.Where(t => t.ArmEnum == Arm.SingleReadingArm).OrderByDescending(t => t.CreateTime).First();
|
||||||
|
|
||||||
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
var taskOne = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||||
VisitTaskNum = latestTask.VisitTaskNum,
|
{
|
||||||
TaskBlindName = visitBlindConfig.BlindFollowUpPrefix+" " + visitNumList.IndexOf(latestTask.VisitTaskNum),
|
TrialId = trialId,
|
||||||
TaskName = latestTask.TaskName,
|
SubjectId = subjectVisit.SubjectId,
|
||||||
|
IsUrgent = subjectVisit.IsUrgent,
|
||||||
|
ArmEnum = Arm.SingleReadingArm,//特殊
|
||||||
|
Code = currentMaxCodeInt + 1,
|
||||||
|
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
||||||
|
ReadingCategory = ReadingCategory.Visit,
|
||||||
|
|
||||||
BlindSubjectCode = latestTask.BlindSubjectCode,
|
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
||||||
BlindTrialSiteCode = latestTask.BlindTrialSiteCode,
|
VisitTaskNum = latestTask.VisitTaskNum,
|
||||||
IsAnalysisCreate = latestTask.IsAnalysisCreate,
|
TaskBlindName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(latestTask.VisitTaskNum),
|
||||||
IsSelfAnalysis = latestTask.IsSelfAnalysis,
|
TaskName = latestTask.TaskName,
|
||||||
TaskAllocationState = TaskAllocationState.Allocated,
|
|
||||||
AllocateTime = DateTime.Now,
|
|
||||||
DoctorUserId = singleTask.DoctorUserId
|
|
||||||
});
|
|
||||||
|
|
||||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
BlindSubjectCode = latestTask.BlindSubjectCode,
|
||||||
|
BlindTrialSiteCode = latestTask.BlindTrialSiteCode,
|
||||||
|
IsAnalysisCreate = latestTask.IsAnalysisCreate,
|
||||||
|
IsSelfAnalysis = latestTask.IsSelfAnalysis,
|
||||||
|
TaskAllocationState = TaskAllocationState.Allocated,
|
||||||
|
AllocateTime = DateTime.Now,
|
||||||
|
DoctorUserId = singleTask.DoctorUserId
|
||||||
|
});
|
||||||
|
|
||||||
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
|
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||||
|
|
||||||
|
_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()
|
||||||
{
|
{
|
||||||
|
@ -1002,8 +1028,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//case ReadingCategory.ReadingPeriod:
|
//case ReadingCategory.ReadingPeriod:
|
||||||
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)
|
||||||
|
@ -1038,24 +1064,24 @@ 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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case GenerateTaskCategory.Oncology:
|
case GenerateTaskCategory.Oncology:
|
||||||
|
|
||||||
originalTaskInfo = await _visitTaskRepository.Where(x => x.Id == generateTaskCommand.OriginalVisitId).FirstNotNullAsync();
|
originalTaskInfo = await _visitTaskRepository.Where(x => x.Id == generateTaskCommand.OriginalVisitId).FirstNotNullAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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();
|
||||||
|
|
||||||
|
|
||||||
var singleTask = await _visitTaskRepository.AddAsync(new VisitTask()
|
var singleTask = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||||
{
|
{
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
SubjectId = item.SubjectId,
|
SubjectId = item.SubjectId,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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地址
|
||||||
|
|
|
@ -150,8 +150,6 @@ namespace IRaCIS.Core.Infra.EFCore.Common.Dto
|
||||||
//标识操作 是否区分接口
|
//标识操作 是否区分接口
|
||||||
public bool IsDistinctionInterface=true;
|
public bool IsDistinctionInterface=true;
|
||||||
|
|
||||||
public Guid? VisitTaskId { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue