Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
commit
88975db473
|
@ -95,7 +95,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
!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 ,t.CriterionType}).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, t.CriterionType }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
//获取确认的临床数据配置
|
//获取确认的临床数据配置
|
||||||
var clinicalDataConfirmList = _trialClinicalDataSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).ToList();
|
var clinicalDataConfirmList = _trialClinicalDataSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).ToList();
|
||||||
|
@ -141,11 +141,24 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//每个访视 根据项目配置生成任务 双审生成两个
|
||||||
|
|
||||||
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
||||||
{
|
{
|
||||||
//每个访视 根据项目配置生成任务 双审生成两个
|
//未防止脏数据 这里也多判断一次
|
||||||
var task1 = await _visitTaskRepository.AddAsync(new VisitTask()
|
var existCurrentVisitTaskList = _visitTaskRepository.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId
|
||||||
|
&& t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.TaskState == TaskState.Effect
|
||||||
|
&& t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.SourceSubjectVisitId == subjectVisit.Id).ToList();
|
||||||
|
|
||||||
|
VisitTask? task1 = null;
|
||||||
|
VisitTask? task2 = null;
|
||||||
|
|
||||||
|
if (!existCurrentVisitTaskList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1))
|
||||||
|
{
|
||||||
|
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||||
|
|
||||||
|
|
||||||
|
task1 = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||||
{
|
{
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
SubjectId = subjectVisit.SubjectId,
|
SubjectId = subjectVisit.SubjectId,
|
||||||
|
@ -155,9 +168,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
VisitTaskNum = subjectVisit.VisitNum,
|
VisitTaskNum = subjectVisit.VisitNum,
|
||||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||||
ArmEnum = Arm.DoubleReadingArm1,//特殊
|
ArmEnum = Arm.DoubleReadingArm1,//特殊
|
||||||
Code = currentMaxCodeInt + 1,
|
Code = currentMaxCodeInt,
|
||||||
SourceSubjectVisitId = subjectVisit.Id,
|
SourceSubjectVisitId = subjectVisit.Id,
|
||||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt, nameof(VisitTask)),
|
||||||
ReadingCategory = ReadingCategory.Visit,
|
ReadingCategory = ReadingCategory.Visit,
|
||||||
|
|
||||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||||
|
@ -165,7 +178,14 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IsClinicalDataSign = isClinicalDataSign
|
IsClinicalDataSign = isClinicalDataSign
|
||||||
});
|
});
|
||||||
|
|
||||||
var task2 = await _visitTaskRepository.AddAsync(new VisitTask()
|
}
|
||||||
|
|
||||||
|
if (!existCurrentVisitTaskList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2))
|
||||||
|
{
|
||||||
|
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||||
|
|
||||||
|
|
||||||
|
task2 = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||||
{
|
{
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
SubjectId = subjectVisit.SubjectId,
|
SubjectId = subjectVisit.SubjectId,
|
||||||
|
@ -175,9 +195,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
VisitTaskNum = subjectVisit.VisitNum,
|
VisitTaskNum = subjectVisit.VisitNum,
|
||||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||||
ArmEnum = Arm.DoubleReadingArm2,//特殊
|
ArmEnum = Arm.DoubleReadingArm2,//特殊
|
||||||
Code = currentMaxCodeInt + 2,
|
Code = currentMaxCodeInt,
|
||||||
SourceSubjectVisitId = subjectVisit.Id,
|
SourceSubjectVisitId = subjectVisit.Id,
|
||||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 2, nameof(VisitTask)),
|
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt, nameof(VisitTask)),
|
||||||
ReadingCategory = ReadingCategory.Visit,
|
ReadingCategory = ReadingCategory.Visit,
|
||||||
|
|
||||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||||
|
@ -185,7 +205,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
IsClinicalDataSign = isClinicalDataSign
|
IsClinicalDataSign = isClinicalDataSign
|
||||||
});
|
});
|
||||||
|
|
||||||
currentMaxCodeInt = currentMaxCodeInt + 2;
|
|
||||||
|
}
|
||||||
|
|
||||||
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
|
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
|
||||||
|
|
||||||
|
@ -194,7 +215,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated;
|
var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated;
|
||||||
|
|
||||||
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1))
|
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1) && task1!=null)
|
||||||
{
|
{
|
||||||
task1.TaskAllocationState = defaultState;
|
task1.TaskAllocationState = defaultState;
|
||||||
//分配给对应Arm的人
|
//分配给对应Arm的人
|
||||||
|
@ -204,7 +225,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
task1.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
task1.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2))
|
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2) && task2!=null)
|
||||||
{
|
{
|
||||||
task2.TaskAllocationState = defaultState;
|
task2.TaskAllocationState = defaultState;
|
||||||
task2.DoctorUserId = assignConfigList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm2).DoctorUserId;
|
task2.DoctorUserId = assignConfigList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm2).DoctorUserId;
|
||||||
|
@ -216,7 +237,6 @@ namespace IRaCIS.Core.Application.Service
|
||||||
else if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Single)
|
else if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Single)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
var singleTask = await _visitTaskRepository.AddAsync(new VisitTask()
|
var singleTask = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||||
{
|
{
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
|
@ -271,10 +291,10 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private bool IsNeedClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, CriterionType criterionType ,List<ClinicalDataTrialSet> trialClinicalDataSetList)
|
private bool IsNeedClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, CriterionType criterionType, List<ClinicalDataTrialSet> trialClinicalDataSetList)
|
||||||
{
|
{
|
||||||
//访视
|
//访视
|
||||||
if (readingCategory==ReadingCategory.Visit)
|
if (readingCategory == ReadingCategory.Visit)
|
||||||
{
|
{
|
||||||
if (isbaseLine)
|
if (isbaseLine)
|
||||||
{
|
{
|
||||||
|
@ -311,7 +331,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
// 有可能在任务生成之前 就签名完了临床数据
|
// 有可能在任务生成之前 就签名完了临床数据
|
||||||
private bool IsClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, CriterionType criterionType, List<ClinicalDataTrialSet> trialClinicalDataSetList,Guid readingId, Guid trialId)
|
private bool IsClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, CriterionType criterionType, List<ClinicalDataTrialSet> trialClinicalDataSetList, Guid readingId, Guid trialId)
|
||||||
{
|
{
|
||||||
var isClinicalDataSign = false;
|
var isClinicalDataSign = false;
|
||||||
|
|
||||||
|
@ -375,7 +395,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,t.CriterionType }).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, t.CriterionType }).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();
|
||||||
|
|
||||||
|
@ -434,12 +454,25 @@ namespace IRaCIS.Core.Application.Service
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//每个访视 根据项目配置生成任务 双审生成两个
|
||||||
|
|
||||||
|
//双重 可能有一个人的任务没分配,然后影像回退不会影响未分配的任务,所以生成的时候 要进行判断 不能每次都生成两个
|
||||||
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
||||||
{
|
{
|
||||||
//每个访视 根据项目配置生成任务 双审生成两个
|
|
||||||
var task1 = await _visitTaskRepository.AddAsync(new VisitTask()
|
var existCurrentVisitTaskList = _visitTaskRepository.Where(t => t.TrialId == trialId && t.SubjectId == subjectVisit.SubjectId
|
||||||
|
&& t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.TaskState == TaskState.Effect
|
||||||
|
&& t.TaskAllocationState == TaskAllocationState.NotAllocate && t.DoctorUserId == null && t.SourceSubjectVisitId == subjectVisit.Id).ToList();
|
||||||
|
|
||||||
|
VisitTask? task1 = null;
|
||||||
|
VisitTask? task2 = null;
|
||||||
|
|
||||||
|
|
||||||
|
if (!existCurrentVisitTaskList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1))
|
||||||
|
{
|
||||||
|
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||||
|
|
||||||
|
task1 = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||||
{
|
{
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
SubjectId = subjectVisit.SubjectId,
|
SubjectId = subjectVisit.SubjectId,
|
||||||
|
@ -449,17 +482,21 @@ namespace IRaCIS.Core.Application.Service
|
||||||
VisitTaskNum = subjectVisit.VisitNum,
|
VisitTaskNum = subjectVisit.VisitNum,
|
||||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||||
ArmEnum = Arm.DoubleReadingArm1,//特殊
|
ArmEnum = Arm.DoubleReadingArm1,//特殊
|
||||||
Code = currentMaxCodeInt + 1,
|
Code = currentMaxCodeInt,
|
||||||
SourceSubjectVisitId = subjectVisit.Id,
|
SourceSubjectVisitId = subjectVisit.Id,
|
||||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt, nameof(VisitTask)),
|
||||||
ReadingCategory = ReadingCategory.Visit,
|
ReadingCategory = ReadingCategory.Visit,
|
||||||
|
|
||||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||||
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
||||||
IsClinicalDataSign = isClinicalDataSign
|
IsClinicalDataSign = isClinicalDataSign
|
||||||
}); ;
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var task2 = await _visitTaskRepository.AddAsync(new VisitTask()
|
if (!existCurrentVisitTaskList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2))
|
||||||
|
{
|
||||||
|
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||||
|
task2 = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||||
{
|
{
|
||||||
TrialId = trialId,
|
TrialId = trialId,
|
||||||
SubjectId = subjectVisit.SubjectId,
|
SubjectId = subjectVisit.SubjectId,
|
||||||
|
@ -469,17 +506,19 @@ namespace IRaCIS.Core.Application.Service
|
||||||
VisitTaskNum = subjectVisit.VisitNum,
|
VisitTaskNum = subjectVisit.VisitNum,
|
||||||
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
//CheckPassedTime = subjectVisit.CheckPassedTime,
|
||||||
ArmEnum = Arm.DoubleReadingArm2,//特殊
|
ArmEnum = Arm.DoubleReadingArm2,//特殊
|
||||||
Code = currentMaxCodeInt + 2,
|
Code = currentMaxCodeInt,
|
||||||
SourceSubjectVisitId = subjectVisit.Id,
|
SourceSubjectVisitId = subjectVisit.Id,
|
||||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 2, nameof(VisitTask)),
|
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt, nameof(VisitTask)),
|
||||||
ReadingCategory = ReadingCategory.Visit,
|
ReadingCategory = ReadingCategory.Visit,
|
||||||
|
|
||||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||||
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
||||||
IsClinicalDataSign=isClinicalDataSign
|
IsClinicalDataSign = isClinicalDataSign
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
currentMaxCodeInt = currentMaxCodeInt + 2;
|
|
||||||
|
|
||||||
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
|
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
|
||||||
|
|
||||||
|
@ -527,7 +566,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated;
|
var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated;
|
||||||
|
|
||||||
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1))
|
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1) && task1 != null)
|
||||||
{
|
{
|
||||||
task1.TaskAllocationState = defaultState;
|
task1.TaskAllocationState = defaultState;
|
||||||
//分配给对应Arm的人
|
//分配给对应Arm的人
|
||||||
|
@ -537,7 +576,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
task1.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
task1.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2))
|
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2) && task2 != null)
|
||||||
{
|
{
|
||||||
task2.TaskAllocationState = defaultState;
|
task2.TaskAllocationState = defaultState;
|
||||||
task2.DoctorUserId = assignConfigList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm2).DoctorUserId;
|
task2.DoctorUserId = assignConfigList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm2).DoctorUserId;
|
||||||
|
@ -608,7 +647,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
SuggesteFinishedTime = DateTime.Now.AddDays(7),
|
SuggesteFinishedTime = DateTime.Now.AddDays(7),
|
||||||
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
|
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
|
||||||
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
|
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
|
||||||
IsClinicalDataSign=latestTask.IsClinicalDataSign
|
IsClinicalDataSign = latestTask.IsClinicalDataSign
|
||||||
});
|
});
|
||||||
|
|
||||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||||
|
@ -683,7 +722,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
{
|
{
|
||||||
var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated;
|
var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated;
|
||||||
|
|
||||||
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1))
|
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1) && task1 != null)
|
||||||
{
|
{
|
||||||
task1.TaskAllocationState = defaultState;
|
task1.TaskAllocationState = defaultState;
|
||||||
//分配给对应Arm的人
|
//分配给对应Arm的人
|
||||||
|
@ -693,7 +732,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
task1.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
task1.SuggesteFinishedTime = DateTime.Now.AddDays(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2))
|
if (assignConfigList.Any(t => t.ArmEnum == Arm.DoubleReadingArm2) && task2 != null)
|
||||||
{
|
{
|
||||||
task2.TaskAllocationState = defaultState;
|
task2.TaskAllocationState = defaultState;
|
||||||
task2.DoctorUserId = assignConfigList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm2).DoctorUserId;
|
task2.DoctorUserId = assignConfigList.FirstOrDefault(t => t.ArmEnum == Arm.DoubleReadingArm2).DoctorUserId;
|
||||||
|
@ -987,8 +1026,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
TrialReadingCriterionId = reReadingVisitTask.TrialReadingCriterionId,
|
TrialReadingCriterionId = reReadingVisitTask.TrialReadingCriterionId,
|
||||||
IsNeedClinicalDataSign=reReadingVisitTask.IsNeedClinicalDataSign,
|
IsNeedClinicalDataSign = reReadingVisitTask.IsNeedClinicalDataSign,
|
||||||
IsClinicalDataSign= reReadingVisitTask.IsClinicalDataSign,
|
IsClinicalDataSign = reReadingVisitTask.IsClinicalDataSign,
|
||||||
|
|
||||||
// TaskAllocationState = reReadingVisitTask.TaskAllocationState,
|
// TaskAllocationState = reReadingVisitTask.TaskAllocationState,
|
||||||
// AllocateTime = DateTime.Now,
|
// AllocateTime = DateTime.Now,
|
||||||
|
@ -1064,8 +1103,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
TrialReadingCriterionId = task.TrialReadingCriterionId,
|
TrialReadingCriterionId = task.TrialReadingCriterionId,
|
||||||
BlindTrialSiteCode = task.BlindTrialSiteCode,
|
BlindTrialSiteCode = task.BlindTrialSiteCode,
|
||||||
BlindSubjectCode = task.BlindSubjectCode,
|
BlindSubjectCode = task.BlindSubjectCode,
|
||||||
IsNeedClinicalDataSign =task.IsNeedClinicalDataSign,
|
IsNeedClinicalDataSign = task.IsNeedClinicalDataSign,
|
||||||
IsClinicalDataSign=task.IsClinicalDataSign
|
IsClinicalDataSign = task.IsClinicalDataSign
|
||||||
};
|
};
|
||||||
|
|
||||||
await _visitTaskRepository.AddAsync(consistentTask);
|
await _visitTaskRepository.AddAsync(consistentTask);
|
||||||
|
@ -1210,7 +1249,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId,
|
TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId,
|
||||||
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Global, false, criterionType, clinicalDataConfirmList),
|
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Global, false, criterionType, clinicalDataConfirmList),
|
||||||
IsClinicalDataSign=IsClinicalDataSign(ReadingCategory.Global, false, criterionType, clinicalDataConfirmList,item.ReadModuleId,trialId)
|
IsClinicalDataSign = IsClinicalDataSign(ReadingCategory.Global, false, criterionType, clinicalDataConfirmList, item.ReadModuleId, trialId)
|
||||||
});
|
});
|
||||||
|
|
||||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||||
|
|
|
@ -1084,6 +1084,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//同时要根据项目有没有配置Subject 级别临床数据
|
||||||
if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData))
|
if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData))
|
||||||
{
|
{
|
||||||
return ResponseOutput.NotOk($"基线没有临床数据,确认提交?", 0, ApiResponseCodeEnum.NeedTips);
|
return ResponseOutput.NotOk($"基线没有临床数据,确认提交?", 0, ApiResponseCodeEnum.NeedTips);
|
||||||
|
|
|
@ -112,7 +112,6 @@ namespace IRaCIS.Application.Services
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var entity = (await _readingClinicalDataRepository.Where(t => t.Id == indto.Id, true).FirstOrDefaultAsync()).IfNullThrowException();
|
var entity = (await _readingClinicalDataRepository.Where(t => t.Id == indto.Id, true).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
_mapper.Map(indto, entity);
|
|
||||||
await _readingClinicalDataPDFRepository.BatchDeleteNoTrackingAsync(x => indto.DeleteFileIds.Contains(x.Id));
|
await _readingClinicalDataPDFRepository.BatchDeleteNoTrackingAsync(x => indto.DeleteFileIds.Contains(x.Id));
|
||||||
|
|
||||||
var addFileList = indto.AddFileList.Select(x => new ReadingClinicalDataPDF()
|
var addFileList = indto.AddFileList.Select(x => new ReadingClinicalDataPDF()
|
||||||
|
@ -123,6 +122,19 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
ReadingClinicalDataId = entity.Id,
|
ReadingClinicalDataId = entity.Id,
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_mapper.Map(indto, entity);
|
||||||
|
|
||||||
|
//上传 或者删除了文件 核查状态需要重新确认
|
||||||
|
|
||||||
|
if (indto.AddFileList.Count > 0 || indto.AddFileList.Count > 0)
|
||||||
|
{
|
||||||
|
entity.IsComplete = null;
|
||||||
|
entity.IsBlind = null;
|
||||||
|
}
|
||||||
|
|
||||||
await _readingClinicalDataPDFRepository.AddRangeAsync(addFileList);
|
await _readingClinicalDataPDFRepository.AddRangeAsync(addFileList);
|
||||||
|
|
||||||
await _readingClinicalDataPDFRepository.SaveChangesAsync();
|
await _readingClinicalDataPDFRepository.SaveChangesAsync();
|
||||||
|
@ -266,7 +278,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
var data = await _readingClinicalDataRepository.FirstOrDefaultAsync(t => t.Id == inDto.ReadingClinicalDataId);
|
var data = await _readingClinicalDataRepository.FirstOrDefaultAsync(t => t.Id == inDto.ReadingClinicalDataId);
|
||||||
|
|
||||||
if (data.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveChecked)
|
if (data.ReadingClinicalDataState != ReadingClinicalDataStatus.HaveChecked)
|
||||||
{
|
{
|
||||||
throw new BusinessValidationFailedException("当前临床数据状态不是已核查状态,不允许签名!");
|
throw new BusinessValidationFailedException("当前临床数据状态不是已核查状态,不允许签名!");
|
||||||
}
|
}
|
||||||
|
@ -381,6 +393,8 @@ namespace IRaCIS.Application.Services
|
||||||
IsFrontTaskNeedSignButNotSign = true
|
IsFrontTaskNeedSignButNotSign = true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var visitTaskIdQueryable2= _visitTaskRepository.Where(visitTaskLambda) //该Subject 该标准的任务
|
var visitTaskIdQueryable2= _visitTaskRepository.Where(visitTaskLambda) //该Subject 该标准的任务
|
||||||
//小于自己任务号的任务 存在需要签名 但是没签名
|
//小于自己任务号的任务 存在需要签名 但是没签名
|
||||||
.Where(t =>! t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum && t.IsFrontTaskNeedSignButNotSign == true))
|
.Where(t =>! t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum && t.IsFrontTaskNeedSignButNotSign == true))
|
||||||
|
@ -728,6 +742,7 @@ namespace IRaCIS.Application.Services
|
||||||
var fileCount = await _readingClinicalDataPDFRepository.Where(t => t.ReadingClinicalDataId == pdf.ReadingClinicalDataId).CountAsync();
|
var fileCount = await _readingClinicalDataPDFRepository.Where(t => t.ReadingClinicalDataId == pdf.ReadingClinicalDataId).CountAsync();
|
||||||
|
|
||||||
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(pdf.ReadingClinicalDataId, c => new ReadingClinicalData() { FileCount = fileCount }, true);
|
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(pdf.ReadingClinicalDataId, c => new ReadingClinicalData() { FileCount = fileCount }, true);
|
||||||
|
|
||||||
return ResponseOutput.Result(true);
|
return ResponseOutput.Result(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -214,12 +214,26 @@ update VisitTask set IsNeedClinicalDataSign =1 from VisitTask
|
||||||
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
||||||
inner join SubjectVisit on VisitTask.SourceSubjectVisitId=SubjectVisit.Id
|
inner join SubjectVisit on VisitTask.SourceSubjectVisitId=SubjectVisit.Id
|
||||||
|
|
||||||
where VisitTask.ReadingCategory=1 and SubjectVisit.IsBaseLine=1 and EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and (ClinicalDataLevel=0 or ClinicalDataLevel=1))
|
where VisitTask.ReadingCategory=1 and SubjectVisit.IsBaseLine=1 and EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and (ClinicalDataLevel=0 or ClinicalDataLevel=1) and IsConfirm=1) and IsNeedClinicalDataSign=0
|
||||||
|
|
||||||
|
|
||||||
|
update VisitTask set IsNeedClinicalDataSign =0 from VisitTask
|
||||||
|
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
||||||
|
inner join SubjectVisit on VisitTask.SourceSubjectVisitId=SubjectVisit.Id
|
||||||
|
|
||||||
|
where VisitTask.ReadingCategory=1 and SubjectVisit.IsBaseLine=1 and not EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and (ClinicalDataLevel=0 or ClinicalDataLevel=1) and IsConfirm=1) and IsNeedClinicalDataSign=1
|
||||||
|
|
||||||
--非基线
|
--非基线
|
||||||
update VisitTask set IsNeedClinicalDataSign =1 from VisitTask
|
update VisitTask set IsNeedClinicalDataSign =1 from VisitTask
|
||||||
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
||||||
inner join SubjectVisit on VisitTask.SourceSubjectVisitId=SubjectVisit.Id
|
inner join SubjectVisit on VisitTask.SourceSubjectVisitId=SubjectVisit.Id
|
||||||
where VisitTask.ReadingCategory=1 and SubjectVisit.IsBaseLine=0 and EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=1)
|
where VisitTask.ReadingCategory=1 and SubjectVisit.IsBaseLine=0 and EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=1 and IsConfirm=1) and IsNeedClinicalDataSign =0
|
||||||
|
|
||||||
|
|
||||||
|
update VisitTask set IsNeedClinicalDataSign =0 from VisitTask
|
||||||
|
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
||||||
|
inner join SubjectVisit on VisitTask.SourceSubjectVisitId=SubjectVisit.Id
|
||||||
|
where VisitTask.ReadingCategory=1 and SubjectVisit.IsBaseLine=0 and not EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=1 and IsConfirm=1) and IsNeedClinicalDataSign =1
|
||||||
|
|
||||||
--处理裁判
|
--处理裁判
|
||||||
|
|
||||||
|
@ -230,14 +244,20 @@ update VisitTask set IsNeedClinicalDataSign =0,IsClinicalDataSign=0 where Vis
|
||||||
update VisitTask set IsNeedClinicalDataSign =1 from VisitTask
|
update VisitTask set IsNeedClinicalDataSign =1 from VisitTask
|
||||||
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
||||||
inner join ReadModule on VisitTask.SouceReadModuleId=ReadModule.Id
|
inner join ReadModule on VisitTask.SouceReadModuleId=ReadModule.Id
|
||||||
where VisitTask.ReadingCategory=5 and EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=3)
|
where VisitTask.ReadingCategory=5 and EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=3 and IsConfirm=1)
|
||||||
|
|
||||||
--处理全局
|
--处理全局
|
||||||
|
|
||||||
update VisitTask set IsNeedClinicalDataSign =1 from VisitTask
|
update VisitTask set IsNeedClinicalDataSign =1 from VisitTask
|
||||||
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
||||||
inner join ReadModule on VisitTask.SouceReadModuleId=ReadModule.Id
|
inner join ReadModule on VisitTask.SouceReadModuleId=ReadModule.Id
|
||||||
where VisitTask.ReadingCategory=2 and EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=2)
|
where VisitTask.ReadingCategory=2 and EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=2 and IsConfirm=1)
|
||||||
|
|
||||||
|
|
||||||
|
update VisitTask set IsNeedClinicalDataSign =0 from VisitTask
|
||||||
|
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
||||||
|
inner join ReadModule on VisitTask.SouceReadModuleId=ReadModule.Id
|
||||||
|
where VisitTask.ReadingCategory=2 and not EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=2 and IsConfirm=1 ) and IsNeedClinicalDataSign=1
|
||||||
|
|
||||||
|
|
||||||
-----处理 是否所有临床数据都签名的字段
|
-----处理 是否所有临床数据都签名的字段
|
||||||
|
@ -287,13 +307,25 @@ inner join ReadModule on VisitTask.SouceReadModuleId=ReadModule.Id
|
||||||
update VisitTask set IsClinicalDataSign =1 from VisitTask
|
update VisitTask set IsClinicalDataSign =1 from VisitTask
|
||||||
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
||||||
inner join ReadModule on VisitTask.SouceReadModuleId=ReadModule.Id
|
inner join ReadModule on VisitTask.SouceReadModuleId=ReadModule.Id
|
||||||
where VisitTask.ReadingCategory=2
|
where VisitTask.ReadingCategory=2 and VisitTask.IsClinicalDataSign =1
|
||||||
and EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=2)
|
and EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=2)
|
||||||
|
|
||||||
and (select count(*) from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=2)
|
and (select count(*) from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=2)
|
||||||
=(select count(*) from ReadingClinicalData inner join ClinicalDataTrialSet on ReadingClinicalData.ClinicalDataTrialSetId =ClinicalDataTrialSet.Id
|
=(select count(*) from ReadingClinicalData inner join ClinicalDataTrialSet on ReadingClinicalData.ClinicalDataTrialSetId =ClinicalDataTrialSet.Id
|
||||||
where ReadingClinicalData.TrialId=VisitTask.TrialId and IsSign=1 and ReadingClinicalDataState=3 and ReadingId=VisitTask.SourceSubjectVisitId and ClinicalDataTrialSet.UploadRole=1)
|
where ReadingClinicalData.TrialId=VisitTask.TrialId and IsSign=1 and ReadingClinicalDataState=3 and ReadingId=VisitTask.SourceSubjectVisitId and ClinicalDataTrialSet.UploadRole=1)
|
||||||
|
|
||||||
|
update VisitTask set IsClinicalDataSign =0 from VisitTask
|
||||||
|
inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=VisitTask.TrialReadingCriterionId
|
||||||
|
inner join ReadModule on VisitTask.SouceReadModuleId=ReadModule.Id
|
||||||
|
where VisitTask.ReadingCategory=2 and VisitTask.IsClinicalDataSign =1
|
||||||
|
and
|
||||||
|
( not EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=2)
|
||||||
|
|
||||||
|
or (select count(*) from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'%' and ClinicalDataLevel=2)
|
||||||
|
!=(select count(*) from ReadingClinicalData inner join ClinicalDataTrialSet on ReadingClinicalData.ClinicalDataTrialSetId =ClinicalDataTrialSet.Id
|
||||||
|
where ReadingClinicalData.TrialId=VisitTask.TrialId and IsSign=1 and ReadingClinicalDataState=3 and ReadingId=VisitTask.SourceSubjectVisitId and ClinicalDataTrialSet.UploadRole=1)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
--处理字段 IsFrontTaskNeedSignButNotSign
|
--处理字段 IsFrontTaskNeedSignButNotSign
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue