任务根据有序 无序 盲态名称设置为FollwUp
parent
0ae4277022
commit
196c5757e2
|
@ -82,7 +82,9 @@
|
||||||
|
|
||||||
"DefaultInternalOrganizationName": "ExtImaging",
|
"DefaultInternalOrganizationName": "ExtImaging",
|
||||||
|
|
||||||
"ImageShareExpireDays": 10
|
"ImageShareExpireDays": 10,
|
||||||
|
|
||||||
|
"BlindTaskPrefix": "Follow Up "
|
||||||
}
|
}
|
||||||
|
|
||||||
//网站根地址,为了访问文件 dicom 和上传的文档... 实测发现不用将域名拼接返回,浏览器会自动加上当前ip,避免了多环境读取环境配置文件
|
//网站根地址,为了访问文件 dicom 和上传的文档... 实测发现不用将域名拼接返回,浏览器会自动加上当前ip,避免了多环境读取环境配置文件
|
||||||
|
|
|
@ -4211,6 +4211,11 @@
|
||||||
序号标记
|
序号标记
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.CalculateRelationDto.CustomCalculateMark">
|
||||||
|
<summary>
|
||||||
|
自定义计算标记
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingQuestionTrialViewInDto.ReadingQuestionCriterionTrialId">
|
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ReadingQuestionTrialViewInDto.ReadingQuestionCriterionTrialId">
|
||||||
<summary>
|
<summary>
|
||||||
系统标准Id
|
系统标准Id
|
||||||
|
|
|
@ -79,10 +79,10 @@ 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();
|
||||||
|
|
||||||
|
@ -97,10 +97,27 @@ namespace IRaCIS.Core.Application.Service
|
||||||
int currentMaxCodeInt = cacheMaxCodeInt > dbMaxCode ? cacheMaxCodeInt : dbMaxCode;
|
int currentMaxCodeInt = cacheMaxCodeInt > dbMaxCode ? cacheMaxCodeInt : dbMaxCode;
|
||||||
|
|
||||||
|
|
||||||
foreach (var subjectVisit in needGenerateVisit)
|
|
||||||
{
|
|
||||||
var assignConfigList = await _subjectUserRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.OrignalSubjectUserId == null && t.IsConfirmed).Select(u => new { u.DoctorUserId, u.ArmEnum }).ToListAsync();
|
|
||||||
|
|
||||||
|
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 visitNumList = _subjectVisitRepository.Where(t => t.SubjectId == subjectGroup.SubjectId).Select(t=>t.VisitNum).ToList();
|
||||||
|
|
||||||
|
foreach (var subjectVisit in subjectGroup.SubjectVisitList)
|
||||||
|
{
|
||||||
|
var blindTaskName = string.Empty;
|
||||||
|
|
||||||
|
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
|
||||||
|
{
|
||||||
|
blindTaskName = AppSettings.BlindTaskPrefix + visitNumList.IndexOf(subjectVisit.VisitNum);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
blindTaskName = AppSettings.BlindTaskPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
||||||
{
|
{
|
||||||
|
@ -110,7 +127,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
SubjectId = subjectVisit.SubjectId,
|
SubjectId = subjectVisit.SubjectId,
|
||||||
IsUrgent = subjectVisit.IsUrgent,
|
IsUrgent = subjectVisit.IsUrgent,
|
||||||
TaskBlindName = subjectVisit.BlindName,
|
TaskBlindName = blindTaskName,
|
||||||
TaskName = subjectVisit.VisitName,
|
TaskName = subjectVisit.VisitName,
|
||||||
VisitTaskNum = subjectVisit.VisitNum,
|
VisitTaskNum = subjectVisit.VisitNum,
|
||||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||||
|
@ -128,7 +145,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
SubjectId = subjectVisit.SubjectId,
|
SubjectId = subjectVisit.SubjectId,
|
||||||
IsUrgent = subjectVisit.IsUrgent,
|
IsUrgent = subjectVisit.IsUrgent,
|
||||||
TaskBlindName = subjectVisit.BlindName,
|
TaskBlindName = blindTaskName,
|
||||||
TaskName = subjectVisit.VisitName,
|
TaskName = subjectVisit.VisitName,
|
||||||
VisitTaskNum = subjectVisit.VisitNum,
|
VisitTaskNum = subjectVisit.VisitNum,
|
||||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||||
|
@ -178,7 +195,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
SubjectId = subjectVisit.SubjectId,
|
SubjectId = subjectVisit.SubjectId,
|
||||||
IsUrgent = subjectVisit.IsUrgent,
|
IsUrgent = subjectVisit.IsUrgent,
|
||||||
TaskBlindName = subjectVisit.BlindName,
|
TaskBlindName = blindTaskName,
|
||||||
TaskName = subjectVisit.VisitName,
|
TaskName = subjectVisit.VisitName,
|
||||||
VisitTaskNum = subjectVisit.VisitNum,
|
VisitTaskNum = subjectVisit.VisitNum,
|
||||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||||
|
@ -221,6 +238,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task AddTaskAsync(GenerateTaskCommand generateTaskCommand)
|
public async Task AddTaskAsync(GenerateTaskCommand generateTaskCommand)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -239,15 +259,37 @@ namespace IRaCIS.Core.Application.Service
|
||||||
switch (generateTaskCommand.ReadingCategory)
|
switch (generateTaskCommand.ReadingCategory)
|
||||||
{
|
{
|
||||||
case GenerateTaskCategory.Visit:
|
case GenerateTaskCategory.Visit:
|
||||||
foreach (var subjectVisit in generateTaskCommand.VisitGenerataTaskList)
|
|
||||||
|
//每个Subject 的每个访视 都要根据每个标准进行任务的生成 和分配(考虑回退后 的分配)
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
var visitNumList = _subjectVisitRepository.Where(t => t.SubjectId == subjectGroup.SubjectId).Select(t => t.VisitNum).ToList();
|
||||||
|
|
||||||
|
|
||||||
foreach (var trialReadingCriterionConfig in trialReadingCriterionConfigList)
|
foreach (var trialReadingCriterionConfig in trialReadingCriterionConfigList)
|
||||||
{
|
{
|
||||||
|
|
||||||
var assignConfigList = await _subjectUserRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.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 == subjectVisit.SubjectId && t.OrignalSubjectUserId == null && t.IsConfirmed).Select(u => new { u.DoctorUserId, u.ArmEnum }).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
var blindTaskName = string.Empty;
|
||||||
|
|
||||||
|
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
|
||||||
|
{
|
||||||
|
blindTaskName = AppSettings.BlindTaskPrefix + visitNumList.IndexOf(subjectVisit.VisitNum);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
blindTaskName = AppSettings.BlindTaskPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
||||||
{
|
{
|
||||||
//每个访视 根据项目配置生成任务 双审生成两个
|
//每个访视 根据项目配置生成任务 双审生成两个
|
||||||
|
@ -256,7 +298,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
SubjectId = subjectVisit.SubjectId,
|
SubjectId = subjectVisit.SubjectId,
|
||||||
IsUrgent = subjectVisit.IsUrgent,
|
IsUrgent = subjectVisit.IsUrgent,
|
||||||
TaskBlindName = subjectVisit.BlindName,
|
TaskBlindName = blindTaskName,
|
||||||
TaskName = subjectVisit.VisitName,
|
TaskName = subjectVisit.VisitName,
|
||||||
VisitTaskNum = subjectVisit.VisitNum,
|
VisitTaskNum = subjectVisit.VisitNum,
|
||||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||||
|
@ -274,7 +316,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
SubjectId = subjectVisit.SubjectId,
|
SubjectId = subjectVisit.SubjectId,
|
||||||
IsUrgent = subjectVisit.IsUrgent,
|
IsUrgent = subjectVisit.IsUrgent,
|
||||||
TaskBlindName = subjectVisit.BlindName,
|
TaskBlindName = blindTaskName,
|
||||||
TaskName = subjectVisit.VisitName,
|
TaskName = subjectVisit.VisitName,
|
||||||
VisitTaskNum = subjectVisit.VisitNum,
|
VisitTaskNum = subjectVisit.VisitNum,
|
||||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||||
|
@ -309,20 +351,6 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#region 验证历史任务 停用影响体验
|
|
||||||
|
|
||||||
//if (_taskAllocationRuleRepository.Where(t => t.TrialId == trialId && t.IsEnable).Count() < 2)
|
|
||||||
//{
|
|
||||||
// throw new BusinessValidationFailedException("能参与读片的医生数量必须>=2,自动分配任务中止");
|
|
||||||
//}
|
|
||||||
//if (!(assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1) && assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2)))
|
|
||||||
//{
|
|
||||||
// throw new BusinessValidationFailedException("该受试者阅片医生未配置完成");
|
|
||||||
//}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
//并且配置了医生
|
//并且配置了医生
|
||||||
if (assignConfigList.Count > 0 && trialReadingCriterionConfig.IsFollowVisitAutoAssign)
|
if (assignConfigList.Count > 0 && trialReadingCriterionConfig.IsFollowVisitAutoAssign)
|
||||||
{
|
{
|
||||||
|
@ -332,7 +360,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
|
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
|
||||||
{
|
{
|
||||||
//之前有回退到影像上传的访视 那么当前访视一致性核查通过的时候,当前访视生成但是不分配出去
|
//之前有回退到影像上传的访视 那么当前访视一致性核查通过的时候,当前访视生成但是不分配出去(排除失访的)
|
||||||
|
|
||||||
var beforeBackVisitTask = 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 beforeBackVisitTask = 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();
|
||||||
|
|
||||||
|
@ -371,7 +399,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).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();
|
||||||
|
|
||||||
//大于当前访视 同时小于最近的未一致性核查通过的访视任务分配 或者生成
|
//大于当前访视 同时小于最近的未一致性核查通过的访视任务分配 或者生成
|
||||||
|
|
||||||
|
@ -411,7 +439,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
||||||
VisitTaskNum = latestTask.VisitTaskNum,
|
VisitTaskNum = latestTask.VisitTaskNum,
|
||||||
TaskBlindName = latestTask.TaskBlindName,
|
TaskBlindName = AppSettings.BlindTaskPrefix + visitNumList.IndexOf(latestTask.VisitTaskNum) ,
|
||||||
TaskName = latestTask.TaskName,
|
TaskName = latestTask.TaskName,
|
||||||
|
|
||||||
BlindSubjectCode = latestTask.BlindSubjectCode,
|
BlindSubjectCode = latestTask.BlindSubjectCode,
|
||||||
|
@ -456,7 +484,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
||||||
VisitTaskNum = latestTask.VisitTaskNum,
|
VisitTaskNum = latestTask.VisitTaskNum,
|
||||||
TaskBlindName = latestTask.TaskBlindName,
|
TaskBlindName = AppSettings.BlindTaskPrefix + visitNumList.IndexOf(latestTask.VisitTaskNum),
|
||||||
TaskName = latestTask.TaskName,
|
TaskName = latestTask.TaskName,
|
||||||
|
|
||||||
BlindSubjectCode = latestTask.BlindSubjectCode,
|
BlindSubjectCode = latestTask.BlindSubjectCode,
|
||||||
|
@ -533,7 +561,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
SubjectId = subjectVisit.SubjectId,
|
SubjectId = subjectVisit.SubjectId,
|
||||||
IsUrgent = subjectVisit.IsUrgent,
|
IsUrgent = subjectVisit.IsUrgent,
|
||||||
TaskBlindName = subjectVisit.BlindName,
|
TaskBlindName = blindTaskName,
|
||||||
TaskName = subjectVisit.VisitName,
|
TaskName = subjectVisit.VisitName,
|
||||||
VisitTaskNum = subjectVisit.VisitNum,
|
VisitTaskNum = subjectVisit.VisitNum,
|
||||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||||
|
@ -569,27 +597,22 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//不是初次分配
|
//不是初次分配
|
||||||
if (allocateSubjectArmList.Count != 0)
|
if (allocateSubjectArmList.Count != 0)
|
||||||
{
|
{
|
||||||
if (_taskAllocationRuleRepository.Where(t => t.TrialId == trialId && t.IsEnable).Count() < 2)
|
//if (_taskAllocationRuleRepository.Where(t => t.TrialId == trialId && t.IsEnable).Count() < 2)
|
||||||
{
|
//{
|
||||||
throw new BusinessValidationFailedException("能参与读片的医生数量必须>=2,自动分配任务中止");
|
// throw new BusinessValidationFailedException("能参与读片的医生数量必须>=2,自动分配任务中止");
|
||||||
|
|
||||||
//break;
|
//}
|
||||||
}
|
|
||||||
|
|
||||||
//配置了医生
|
//配置了医生
|
||||||
if (assignConfigList.Count > 0)
|
if (assignConfigList.Count > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region 重阅/退回的时候,需要将取消分配的访视类型的 任务重新分配
|
#region 重阅/退回的时候,需要将取消分配的访视类型的 任务重新分配
|
||||||
|
|
||||||
|
|
||||||
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).OrderBy(t => t.VisitTaskNum).FirstOrDefaultAsync();
|
|
||||||
|
|
||||||
|
|
||||||
if (beforeBackVisitTask == null)
|
if (beforeBackVisitTask == null)
|
||||||
|
@ -614,7 +637,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
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();
|
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还未通过时 生成任务
|
//存在退回访视1 又退回基线 这种情况 生成任务 考虑基线先一致性核查通过,但是访视1还未通过时 生成任务
|
||||||
var followVisitTaskList = await _visitTaskRepository
|
var followVisitTaskList = await _visitTaskRepository
|
||||||
|
@ -654,7 +677,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
SourceSubjectVisitId = latestTask.SourceSubjectVisitId,
|
||||||
VisitTaskNum = latestTask.VisitTaskNum,
|
VisitTaskNum = latestTask.VisitTaskNum,
|
||||||
TaskBlindName = latestTask.TaskBlindName,
|
TaskBlindName = AppSettings.BlindTaskPrefix + visitNumList.IndexOf(latestTask.VisitTaskNum),
|
||||||
TaskName = latestTask.TaskName,
|
TaskName = latestTask.TaskName,
|
||||||
|
|
||||||
BlindSubjectCode = latestTask.BlindSubjectCode,
|
BlindSubjectCode = latestTask.BlindSubjectCode,
|
||||||
|
@ -677,6 +700,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//之前有回退的 后续访视不生成或者分配 当前访视生成但是不分配出去
|
//之前有回退的 后续访视不生成或者分配 当前访视生成但是不分配出去
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
//不用进行额外处理
|
//不用进行额外处理
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -732,7 +756,16 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.Id == subjectVisit.Id, u => new SubjectVisit() { IsVisitTaskGenerated = true });
|
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.Id == subjectVisit.Id, u => new SubjectVisit() { IsVisitTaskGenerated = true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case GenerateTaskCategory.ReReading:
|
case GenerateTaskCategory.ReReading:
|
||||||
|
|
||||||
var reReadingVisitTask = generateTaskCommand.ReReadingTask;
|
var reReadingVisitTask = generateTaskCommand.ReReadingTask;
|
||||||
|
@ -915,7 +948,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
SouceReadModuleId = firstTask.SouceReadModuleId,
|
SouceReadModuleId = firstTask.SouceReadModuleId,
|
||||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
||||||
TaskState = TaskState.Effect,
|
TaskState = TaskState.Effect,
|
||||||
TaskBlindName = firstTask.TaskName,
|
TaskBlindName = firstTask.TaskBlindName,
|
||||||
DoctorUserId = subjectUser == null ? null : subjectUser.DoctorUserId,
|
DoctorUserId = subjectUser == null ? null : subjectUser.DoctorUserId,
|
||||||
TaskAllocationState = subjectUser == null ? TaskAllocationState.NotAllocate : TaskAllocationState.Allocated,
|
TaskAllocationState = subjectUser == null ? TaskAllocationState.NotAllocate : TaskAllocationState.Allocated,
|
||||||
AllocateTime = subjectUser == null ? null : DateTime.Now,
|
AllocateTime = subjectUser == null ? null : DateTime.Now,
|
||||||
|
|
|
@ -594,6 +594,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
//以前访视未产生任务的,在查询这里要产生
|
//以前访视未产生任务的,在查询这里要产生
|
||||||
var svIdList = await _subjectVisitRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.CheckState == CheckStateEnum.CVPassed && t.IsVisitTaskGenerated == false).Select(t => t.Id).ToListAsync();
|
var svIdList = await _subjectVisitRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.CheckState == CheckStateEnum.CVPassed && t.IsVisitTaskGenerated == false).Select(t => t.Id).ToListAsync();
|
||||||
|
|
||||||
|
//之前没有生成任务的逻辑 但是现在加了,任务要自动生成
|
||||||
await _visitTaskCommonService.GenerateVisitTaskAsync(queryVisitTask.TrialId, svIdList);
|
await _visitTaskCommonService.GenerateVisitTaskAsync(queryVisitTask.TrialId, svIdList);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -99,9 +99,9 @@ namespace IRaCIS.Core.Application.Services
|
||||||
throw new BusinessValidationFailedException("设置末次评估后,不允许添加计划外访视。");
|
throw new BusinessValidationFailedException("设置末次评估后,不允许添加计划外访视。");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await _repository.AnyAsync<VisitTask>(t=>t.SubjectId==svCommand.SubjectId && t.TaskState==TaskState.Effect && t.VisitTaskNum > svCommand.VisitNum && t.SignTime != null))
|
if (await _repository.AnyAsync<VisitTask>(t=>t.SubjectId==svCommand.SubjectId && t.TaskState==TaskState.Effect && t.VisitTaskNum > svCommand.VisitNum && t.SignTime != null && t.TrialReadingCriterion.IsReadingTaskViewInOrder))
|
||||||
{
|
{
|
||||||
throw new BusinessValidationFailedException("该受试者后续访视已有任务完成阅片,不允许在此添加,如果确实需要,请回退");
|
throw new BusinessValidationFailedException("该受试者后续访视已有任务完成阅片(有序阅片标准),不允许在此添加,如果确实需要,请回退");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ namespace IRaCIS.Core.Domain.Share
|
||||||
|
|
||||||
public static string SystemSiteCodePrefix { get; set; }
|
public static string SystemSiteCodePrefix { get; set; }
|
||||||
|
|
||||||
|
public static string BlindTaskPrefix { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 用户默认密码
|
/// 用户默认密码
|
||||||
|
@ -85,6 +85,7 @@ namespace IRaCIS.Core.Domain.Share
|
||||||
|
|
||||||
ImageShareExpireDays = configuration.GetSection("IRaCISBasicConfig").GetValue<int>("ImageShareExpireDays");
|
ImageShareExpireDays = configuration.GetSection("IRaCISBasicConfig").GetValue<int>("ImageShareExpireDays");
|
||||||
|
|
||||||
|
BlindTaskPrefix = configuration.GetSection("IRaCISBasicConfig").GetValue<string>("BlindTaskPrefix");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -135,13 +135,10 @@ public static class StaticData
|
||||||
|
|
||||||
public const string TrialSubjectVisitCheckList_Export = "TrialSubjectVisitCheckList_Export";
|
public const string TrialSubjectVisitCheckList_Export = "TrialSubjectVisitCheckList_Export";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public const string TrialReadingTaskList_Export = "TrialReadingTaskList_Export";
|
public const string TrialReadingTaskList_Export = "TrialReadingTaskList_Export";
|
||||||
|
|
||||||
public const string TrialReReadingTaskList_Export = "TrialReReadingTaskList_Export";
|
public const string TrialReReadingTaskList_Export = "TrialReReadingTaskList_Export";
|
||||||
|
|
||||||
|
|
||||||
public const string TrialMedicalReviewList_Export = "TrialMedicalReviewList_Export";
|
public const string TrialMedicalReviewList_Export = "TrialMedicalReviewList_Export";
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue