IsClinicalDataSign IsNeedClinicalDataSign

This commit is contained in:
2023-01-10 15:08:44 +08:00
parent 64605dfa25
commit 3eaa8a1078
8 changed files with 238 additions and 65 deletions
@@ -288,7 +288,7 @@ namespace IRaCIS.Core.Application.ViewModel
public String VisitName { get; set; }
public String BlindName { get; set; }
public bool IsBaseLine { get; set; }
public DateTime? CheckPassedTime { get; set; }
@@ -137,6 +137,9 @@ namespace IRaCIS.Core.Application.ViewModel
public string BlindSubjectCode { get; set; } = string.Empty;
public string BlindTrialSiteCode { get; set; } = string.Empty;
public bool IsNeedClinicalDataSign { get; set; }
public bool IsClinicalDataSign { get; set; }
}
public class VisitTaskSimpleDTO :VisitTaskGroupSimpleDTO
@@ -519,7 +519,10 @@ namespace IRaCIS.Core.Application.Service
SouceReadModuleId = c.SouceReadModuleId,
TrialReadingCriterionId=c.TrialReadingCriterionId,
IsClinicalDataSign = c.IsClinicalDataSign,
IsNeedClinicalDataSign = c.IsNeedClinicalDataSign,
//自身一致性才有意义
//IsHaveGeneratedTask = c.Subject.SubjectVisitTaskList.Any(t => t.ConsistentAnalysisOriginalTaskId == c.Id),
@@ -539,6 +542,10 @@ namespace IRaCIS.Core.Application.Service
TrialId = c.TrialId,
SourceSubjectVisitId = c.SourceSubjectVisitId,
SouceReadModuleId = c.SouceReadModuleId,
TrialReadingCriterionId = c.TrialReadingCriterionId,
IsClinicalDataSign = c.IsClinicalDataSign,
IsNeedClinicalDataSign = c.IsNeedClinicalDataSign,
}).ToList(),
}).ToList()
@@ -629,7 +636,10 @@ namespace IRaCIS.Core.Application.Service
SourceSubjectVisitId = c.SourceSubjectVisitId,
SouceReadModuleId = c.SouceReadModuleId,
TrialReadingCriterionId = c.TrialReadingCriterionId,
IsClinicalDataSign = c.IsClinicalDataSign,
IsNeedClinicalDataSign = c.IsNeedClinicalDataSign,
}).ToList()
@@ -39,13 +39,18 @@ namespace IRaCIS.Core.Application.Service
private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
private readonly IRepository<ClinicalDataTrialSet> _trialClinicalDataSetRepository;
public VisitTaskHelpeService(IRepository<VisitTask> visitTaskRepository, IRepository<SubjectUser> subjectUserRepository, IRepository<Trial> trialRepository, IEasyCachingProvider provider,
IRepository<SubjectVisit> subjectVisitRepository,
IRepository<ReadModule> readModuleRepository,
IRepository<ReadingJudgeInfo> readingJudgeInfoRepository,
IRepository<TaskAllocationRule> taskAllocationRuleRepository, IMapper mapper, IUserInfo userInfo, IRepository<VisitTaskReReading> visitTaskReReadingRepository, IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository)
IRepository<TaskAllocationRule> taskAllocationRuleRepository, IMapper mapper, IUserInfo userInfo, IRepository<VisitTaskReReading> visitTaskReReadingRepository,
IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IRepository<ClinicalDataTrialSet> trialClinicalDataSetRepository)
{
_trialClinicalDataSetRepository = trialClinicalDataSetRepository;
_visitTaskRepository = visitTaskRepository;
_trialRepository = trialRepository;
this._readModuleRepository = readModuleRepository;
@@ -252,16 +257,59 @@ namespace IRaCIS.Core.Application.Service
}
private bool IsNeedClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, CriterionType criterionType ,List<ClinicalDataTrialSet> trialClinicalDataSetList)
{
//访视
if (readingCategory==ReadingCategory.Visit)
{
if (isbaseLine)
{
//return trialClinicalDataSetList.Where(t=>t.CriterionEnumList.Any(c=>c==(int)criterionType) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit)).Count()> 0;
return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit));
}
else
{
return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.SubjectVisit);
}
}
else if (readingCategory == ReadingCategory.Judge)
{
return false;
}
//阅片期
else if (readingCategory == ReadingCategory.Global)
{
return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.ImageRead);
}
// 肿瘤学
else if (readingCategory == ReadingCategory.Oncology)
{
return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead);
}
else
{
return false;
}
}
public async Task AddTaskAsync(GenerateTaskCommand generateTaskCommand)
{
var trialId = generateTaskCommand.TrialId;
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,t.CriterionType }).ToList();
var visitBlindConfig = _trialRepository.Where(t => t.Id == trialId).Select(t => new { t.BlindBaseLineName, t.BlindFollowUpPrefix }).FirstOrDefault();
//获取确认的临床数据配置
var clinicalDataConfirmList = _trialClinicalDataSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).ToList();
var dbMaxCode = _visitTaskRepository.Where(t => t.TrialId == trialId).Select(t => t.Code).DefaultIfEmpty().Max();
var cacheMaxCodeInt = _provider.Get<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}").Value;
@@ -330,8 +378,9 @@ namespace IRaCIS.Core.Application.Service
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
ReadingCategory = ReadingCategory.Visit,
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId
});
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
}); ;
var task2 = await _visitTaskRepository.AddAsync(new VisitTask()
{
@@ -348,7 +397,8 @@ namespace IRaCIS.Core.Application.Service
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 2, nameof(VisitTask)),
ReadingCategory = ReadingCategory.Visit,
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
});
currentMaxCodeInt = currentMaxCodeInt + 2;
@@ -478,7 +528,8 @@ namespace IRaCIS.Core.Application.Service
AllocateTime = DateTime.Now,
DoctorUserId = task1.DoctorUserId,
SuggesteFinishedTime = DateTime.Now.AddDays(7),
TrialReadingCriterionId = latestTask.TrialReadingCriterionId
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
});
currentMaxCodeInt = currentMaxCodeInt + 1;
@@ -533,7 +584,8 @@ namespace IRaCIS.Core.Application.Service
DoctorUserId = task2.DoctorUserId,
SuggesteFinishedTime = DateTime.Now.AddDays(7),
TrialReadingCriterionId = latestTask.TrialReadingCriterionId
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
});
currentMaxCodeInt = currentMaxCodeInt + 1;
@@ -609,7 +661,9 @@ namespace IRaCIS.Core.Application.Service
SourceSubjectVisitId = subjectVisit.Id,
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
ReadingCategory = ReadingCategory.Visit,
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
});
@@ -732,7 +786,11 @@ namespace IRaCIS.Core.Application.Service
IsSelfAnalysis = latestTask.IsSelfAnalysis,
TaskAllocationState = TaskAllocationState.Allocated,
AllocateTime = DateTime.Now,
DoctorUserId = singleTask.DoctorUserId
DoctorUserId = singleTask.DoctorUserId,
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
});
currentMaxCodeInt = currentMaxCodeInt + 1;
@@ -823,7 +881,6 @@ namespace IRaCIS.Core.Application.Service
var newTask = await _visitTaskRepository.AddAsync(new VisitTask()
{
TrialReadingCriterionId = reReadingVisitTask.TrialReadingCriterionId,
TrialId = reReadingVisitTask.TrialId,
SubjectId = reReadingVisitTask.SubjectId,
@@ -847,6 +904,9 @@ namespace IRaCIS.Core.Application.Service
BlindTrialSiteCode = reReadingVisitTask.BlindTrialSiteCode,
TrialReadingCriterionId = reReadingVisitTask.TrialReadingCriterionId,
IsNeedClinicalDataSign=reReadingVisitTask.IsNeedClinicalDataSign,
IsClinicalDataSign= reReadingVisitTask.IsClinicalDataSign,
// TaskAllocationState = reReadingVisitTask.TaskAllocationState,
// AllocateTime = DateTime.Now,
@@ -914,13 +974,16 @@ namespace IRaCIS.Core.Application.Service
SouceReadModuleId = task.SouceReadModuleId,
SourceSubjectVisitId = task.SourceSubjectVisitId,
BlindTrialSiteCode = task.BlindTrialSiteCode,
BlindSubjectCode = task.BlindSubjectCode,
ConsistentAnalysisOriginalTaskId = task.Id,
IsAnalysisCreate = true,
IsSelfAnalysis = true,
TrialReadingCriterionId = task.TrialReadingCriterionId,
BlindTrialSiteCode = task.BlindTrialSiteCode,
BlindSubjectCode = task.BlindSubjectCode,
IsNeedClinicalDataSign =task.IsNeedClinicalDataSign,
IsClinicalDataSign=task.IsClinicalDataSign
};
await _visitTaskRepository.AddAsync(consistentTask);
@@ -965,6 +1028,8 @@ namespace IRaCIS.Core.Application.Service
TrialReadingCriterionId = task.TrialReadingCriterionId,
BlindTrialSiteCode = task.BlindTrialSiteCode,
BlindSubjectCode = task.BlindSubjectCode,
IsNeedClinicalDataSign = task.IsNeedClinicalDataSign,
IsClinicalDataSign = task.IsClinicalDataSign
};
@@ -1033,6 +1098,8 @@ namespace IRaCIS.Core.Application.Service
var originalTaskInfo = await _visitTaskRepository.Where(x => x.Id == generateTaskCommand.OriginalVisitId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
var criterionType = await _trialReadingCriterionRepository.Where(t => t.Id == originalTaskInfo.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
// 需要添加全局任务再添加
if (originalTaskInfo.TrialReadingCriterion.IsGlobalReading)
{
@@ -1060,6 +1127,7 @@ namespace IRaCIS.Core.Application.Service
ReadingCategory = item.ReadingCategory,
TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId,
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Global, false, criterionType, clinicalDataConfirmList)
});
currentMaxCodeInt = currentMaxCodeInt + 1;
@@ -1073,7 +1141,7 @@ namespace IRaCIS.Core.Application.Service
originalTaskInfo = await _visitTaskRepository.Where(x => x.Id == generateTaskCommand.OriginalVisitId).FirstNotNullAsync();
criterionType = await _trialReadingCriterionRepository.Where(t => t.Id == originalTaskInfo.TrialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync();
foreach (var item in generateTaskCommand.ReadingGenerataTaskList)
{
@@ -1105,6 +1173,9 @@ namespace IRaCIS.Core.Application.Service
ReadingCategory = item.ReadingCategory,
TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId,
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Oncology, false, criterionType, clinicalDataConfirmList)
});
singleTask.AllocateTime = DateTime.Now;
@@ -1669,33 +1669,33 @@ namespace IRaCIS.Core.Application.Service.Allocation
newTask.SuggesteFinishedTime = DateTime.Now.AddDays(7);
//拷贝后续表单
//if (visitTaskReReadingAppply.IsCopyFollowForms && origenalTask.VisitTaskNum != influenceTask.VisitTaskNum)
//{
// if (origenalTask.ReadingCategory == ReadingCategory.Visit)
// {
// var list = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList();
if (visitTaskReReadingAppply.IsCopyFollowForms && origenalTask.VisitTaskNum != influenceTask.VisitTaskNum)
{
if (origenalTask.ReadingCategory == ReadingCategory.Visit)
{
var list = _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == origenalTask.Id).ToList();
// foreach (var item in list)
// {
// item.Id = Guid.Empty;
// item.VisitTaskId = newTask.Id;
// }
foreach (var item in list)
{
item.Id = Guid.Empty;
item.VisitTaskId = newTask.Id;
}
// _ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result;
// }
// else if (origenalTask.ReadingCategory == ReadingCategory.Global)
// {
// var list = _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == origenalTask.Id).ToList();
_ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result;
}
//else if (origenalTask.ReadingCategory == ReadingCategory.Global)
//{
// var list = _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == origenalTask.Id).ToList();
// foreach (var item in list)
// {
// item.Id = Guid.Empty;
// item.GlobalTaskId = newTask.Id;
// }
// foreach (var item in list)
// {
// item.Id = Guid.Empty;
// item.GlobalTaskId = newTask.Id;
// }
// _ = _repository.AddRangeAsync(list).Result;
// }
//}
// _ = _repository.AddRangeAsync(list).Result;
//}
}
}
});
@@ -1799,18 +1799,18 @@ namespace IRaCIS.Core.Application.Service.Allocation
_ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result;
}
else if (origenalTask.ReadingCategory == ReadingCategory.Global)
{
var list = _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == origenalTask.Id).ToList();
//else if (origenalTask.ReadingCategory == ReadingCategory.Global)
//{
// var list = _repository.Where<ReadingGlobalTaskInfo>(t => t.GlobalTaskId == origenalTask.Id).ToList();
foreach (var item in list)
{
item.Id = Guid.Empty;
item.GlobalTaskId = newTask.Id;
}
// foreach (var item in list)
// {
// item.Id = Guid.Empty;
// item.GlobalTaskId = newTask.Id;
// }
_ = _repository.AddRangeAsync(list).Result;
}
// _ = _repository.AddRangeAsync(list).Result;
//}
}