生成任务 维护IsClinicalDataSign
This commit is contained in:
@@ -14,6 +14,7 @@ using IRaCIS.Core.Infrastructure;
|
||||
using AutoMapper;
|
||||
using MassTransit;
|
||||
using IRaCIS.Core.Infra.EFCore.Common;
|
||||
using System.Linq.Expressions;
|
||||
|
||||
namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
@@ -40,15 +41,17 @@ namespace IRaCIS.Core.Application.Service
|
||||
private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
|
||||
|
||||
private readonly IRepository<ClinicalDataTrialSet> _trialClinicalDataSetRepository;
|
||||
|
||||
private readonly IRepository<ReadingClinicalData> _readingClinicalDataRepository;
|
||||
|
||||
|
||||
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<ClinicalDataTrialSet> trialClinicalDataSetRepository)
|
||||
IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IRepository<ClinicalDataTrialSet> trialClinicalDataSetRepository, IRepository<ReadingClinicalData> readingClinicalDataRepository)
|
||||
{
|
||||
_readingClinicalDataRepository = readingClinicalDataRepository;
|
||||
_trialClinicalDataSetRepository = trialClinicalDataSetRepository;
|
||||
|
||||
_visitTaskRepository = visitTaskRepository;
|
||||
@@ -119,7 +122,8 @@ namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
var blindTaskName = string.Empty;
|
||||
|
||||
|
||||
var isNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList);
|
||||
var isClinicalDataSign = IsClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList, subjectVisit.Id, trialId);
|
||||
|
||||
if (visitNumList.IndexOf(subjectVisit.VisitNum) == 0)
|
||||
{
|
||||
@@ -157,7 +161,8 @@ namespace IRaCIS.Core.Application.Service
|
||||
ReadingCategory = ReadingCategory.Visit,
|
||||
|
||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
|
||||
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
||||
IsClinicalDataSign = isClinicalDataSign
|
||||
});
|
||||
|
||||
var task2 = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||
@@ -176,7 +181,8 @@ namespace IRaCIS.Core.Application.Service
|
||||
ReadingCategory = ReadingCategory.Visit,
|
||||
|
||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
|
||||
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
||||
IsClinicalDataSign = isClinicalDataSign
|
||||
});
|
||||
|
||||
currentMaxCodeInt = currentMaxCodeInt + 2;
|
||||
@@ -226,7 +232,8 @@ namespace IRaCIS.Core.Application.Service
|
||||
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
|
||||
ReadingCategory = ReadingCategory.Visit,
|
||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
|
||||
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
||||
IsClinicalDataSign = isClinicalDataSign
|
||||
});
|
||||
|
||||
|
||||
@@ -302,6 +309,65 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 有可能在任务生成之前 就签名完了临床数据
|
||||
private bool IsClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, CriterionType criterionType, List<ClinicalDataTrialSet> trialClinicalDataSetList,Guid readingId, Guid trialId)
|
||||
{
|
||||
var isClinicalDataSign = false;
|
||||
|
||||
var needSignCount = 0;
|
||||
|
||||
//CRC 的自动签名 不用管 只用处理PM的就好
|
||||
var haveSignedCount = _readingClinicalDataRepository
|
||||
.Where(t => t.TrialId == trialId && t.IsSign && t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned && t.ReadingId == readingId && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM).Count();
|
||||
|
||||
//访视
|
||||
if (readingCategory == ReadingCategory.Visit)
|
||||
{
|
||||
if (isbaseLine)
|
||||
{
|
||||
//CRC 的自动签名 不用管 只用处理PM 的就好
|
||||
needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit) && t.UploadRole == UploadRole.PM).Count();
|
||||
}
|
||||
else
|
||||
{
|
||||
needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.SubjectVisit && t.UploadRole == UploadRole.PM).Count();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
else if (readingCategory == ReadingCategory.Judge)
|
||||
{
|
||||
|
||||
}
|
||||
//阅片期
|
||||
else if (readingCategory == ReadingCategory.Global)
|
||||
{
|
||||
needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.ImageRead && t.UploadRole == UploadRole.PM).Count();
|
||||
|
||||
}
|
||||
// 肿瘤学
|
||||
else if (readingCategory == ReadingCategory.Oncology)
|
||||
{
|
||||
return trialClinicalDataSetList.Any(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead);
|
||||
}
|
||||
else
|
||||
{
|
||||
needSignCount = trialClinicalDataSetList.Where(t => t.CriterionEnumList.Any(c => c == (int)criterionType) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead && t.UploadRole == UploadRole.PM).Count();
|
||||
}
|
||||
|
||||
if (needSignCount == haveSignedCount && needSignCount != 0)
|
||||
{
|
||||
isClinicalDataSign = true;
|
||||
|
||||
}
|
||||
|
||||
return isClinicalDataSign;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public async Task AddTaskAsync(GenerateTaskCommand generateTaskCommand)
|
||||
{
|
||||
|
||||
@@ -346,6 +412,9 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
var blindTaskName = string.Empty;
|
||||
|
||||
var isNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList);
|
||||
var isClinicalDataSign = IsClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList, subjectVisit.Id, trialId);
|
||||
|
||||
|
||||
if (visitNumList.IndexOf(subjectVisit.VisitNum) == 0)
|
||||
{
|
||||
@@ -385,7 +454,8 @@ namespace IRaCIS.Core.Application.Service
|
||||
ReadingCategory = ReadingCategory.Visit,
|
||||
|
||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
|
||||
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
||||
IsClinicalDataSign = isClinicalDataSign
|
||||
}); ;
|
||||
|
||||
var task2 = await _visitTaskRepository.AddAsync(new VisitTask()
|
||||
@@ -404,7 +474,8 @@ namespace IRaCIS.Core.Application.Service
|
||||
ReadingCategory = ReadingCategory.Visit,
|
||||
|
||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
|
||||
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
||||
IsClinicalDataSign=isClinicalDataSign
|
||||
});
|
||||
|
||||
currentMaxCodeInt = currentMaxCodeInt + 2;
|
||||
@@ -536,6 +607,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
SuggesteFinishedTime = DateTime.Now.AddDays(7),
|
||||
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
|
||||
IsClinicalDataSign=latestTask.IsClinicalDataSign
|
||||
});
|
||||
|
||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||
@@ -592,6 +664,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
|
||||
IsClinicalDataSign = latestTask.IsClinicalDataSign
|
||||
});
|
||||
|
||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||
@@ -669,7 +742,8 @@ namespace IRaCIS.Core.Application.Service
|
||||
ReadingCategory = ReadingCategory.Visit,
|
||||
|
||||
TrialReadingCriterionId = trialReadingCriterionConfig.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.CriterionType, clinicalDataConfirmList)
|
||||
IsNeedClinicalDataSign = isNeedClinicalDataSign,
|
||||
IsClinicalDataSign = isClinicalDataSign
|
||||
});
|
||||
|
||||
|
||||
@@ -796,6 +870,7 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
TrialReadingCriterionId = latestTask.TrialReadingCriterionId,
|
||||
IsNeedClinicalDataSign = latestTask.IsNeedClinicalDataSign,
|
||||
IsClinicalDataSign = latestTask.IsClinicalDataSign
|
||||
|
||||
});
|
||||
|
||||
@@ -1133,7 +1208,8 @@ namespace IRaCIS.Core.Application.Service
|
||||
ReadingCategory = item.ReadingCategory,
|
||||
|
||||
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)
|
||||
});
|
||||
|
||||
currentMaxCodeInt = currentMaxCodeInt + 1;
|
||||
@@ -1180,7 +1256,8 @@ namespace IRaCIS.Core.Application.Service
|
||||
|
||||
TrialReadingCriterionId = originalTaskInfo.TrialReadingCriterionId,
|
||||
|
||||
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Oncology, false, criterionType, clinicalDataConfirmList)
|
||||
IsNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Oncology, false, criterionType, clinicalDataConfirmList),
|
||||
IsClinicalDataSign = IsClinicalDataSign(ReadingCategory.Oncology, false, criterionType, clinicalDataConfirmList, item.ReadModuleId, trialId)
|
||||
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user