|
|
|
@@ -23,9 +23,15 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
public class TrialService(
|
|
|
|
|
IRepository<Trial> _trialRepository,
|
|
|
|
|
IRepository<TrialUser> _trialUserRepository,
|
|
|
|
|
IRepository<CRO> _croRepository,
|
|
|
|
|
IRepository<EnrollDetail> _enrollDetailRepository,
|
|
|
|
|
IRepository<Dictionary> _dictionaryRepository,
|
|
|
|
|
IRepository<Enroll> _enrollRepository,
|
|
|
|
|
IRepository<Workload> _workloadRepository,
|
|
|
|
|
IRepository<Sponsor> _sponsorRepository,
|
|
|
|
|
IRepository<VisitStage> _visitStageRepository,
|
|
|
|
|
IRepository<TrialPaymentPrice> _trialPaymentPriceRepository,
|
|
|
|
|
IRepository<TrialDictionary> _trialDictionaryRepository,
|
|
|
|
|
IOptionsMonitor<ServiceVerifyConfigOption> _verifyConfig) : BaseService, ITrialService
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
@@ -206,14 +212,14 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
|
|
|
|
|
//如果是PM, 则需要将该人员添加到 运维人员表
|
|
|
|
|
//添加运维人员PM
|
|
|
|
|
await _repository.AddAsync(new TrialUser() { TrialId = trial.Id, UserId = _userInfo.Id, JoinTime = DateTime.Now });
|
|
|
|
|
await _trialUserRepository.AddAsync(new TrialUser() { TrialId = trial.Id, UserId = _userInfo.Id, JoinTime = DateTime.Now });
|
|
|
|
|
|
|
|
|
|
// 添加扩展信息表记录
|
|
|
|
|
await _repository.AddAsync(new TrialPaymentPrice() { TrialId = trial.Id });
|
|
|
|
|
await _trialPaymentPriceRepository.AddAsync(new TrialPaymentPrice() { TrialId = trial.Id });
|
|
|
|
|
|
|
|
|
|
//添加访视
|
|
|
|
|
await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 0, BlindName = "B" + 0.ToString("D3"), VisitDay = 0, VisitName = "Baseline", IsBaseLine = true, VisitWindowLeft = -28, VisitWindowRight = 0 });
|
|
|
|
|
await _repository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 1, BlindName = "B" + 10.ToString("D3"), VisitDay = 30, VisitName = "Visit 1", VisitWindowLeft = -5, VisitWindowRight = 5 });
|
|
|
|
|
await _visitStageRepository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 0, BlindName = "B" + 0.ToString("D3"), VisitDay = 0, VisitName = "Baseline", IsBaseLine = true, VisitWindowLeft = -28, VisitWindowRight = 0 });
|
|
|
|
|
await _visitStageRepository.AddAsync(new VisitStage { TrialId = trial.Id, VisitNum = 1, BlindName = "B" + 10.ToString("D3"), VisitDay = 30, VisitName = "Visit 1", VisitWindowLeft = -5, VisitWindowRight = 5 });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var success = await _repository.SaveChangesAsync();
|
|
|
|
@@ -242,14 +248,14 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
{
|
|
|
|
|
var updateModel = trialAddModel;
|
|
|
|
|
|
|
|
|
|
if (!await _repository.AnyAsync<Trial>(u => u.Id == trialAddModel.Id && (u.TrialStatusStr == StaticData.TrialState.TrialInitializing || u.TrialStatusStr == StaticData.TrialState.TrialOngoing)))
|
|
|
|
|
if (!await _trialRepository.AnyAsync(u => u.Id == trialAddModel.Id && (u.TrialStatusStr == StaticData.TrialState.TrialInitializing || u.TrialStatusStr == StaticData.TrialState.TrialOngoing)))
|
|
|
|
|
{
|
|
|
|
|
//---项目状态只有处于:初始化或者进行中时,才允许操作。
|
|
|
|
|
throw new BusinessValidationFailedException(_localizer["Trial_InvalidProjectStatus"]);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// 判断项目Id 是否已经存在
|
|
|
|
|
if (await _repository.AnyAsync<Trial>(u => u.TrialCode == updateModel.TrialCode && u.Id != updateModel.Id))
|
|
|
|
|
if (await _trialRepository.AnyAsync(u => u.TrialCode == updateModel.TrialCode && u.Id != updateModel.Id))
|
|
|
|
|
{
|
|
|
|
|
//---已经存在相同的项目编号。
|
|
|
|
|
throw new BusinessValidationFailedException(_localizer["Trial_DuplicateProjectNumber"]);
|
|
|
|
@@ -257,11 +263,11 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var trial = await _repository.FirstOrDefaultAsync<Trial>(t => t.Id == updateModel.Id);
|
|
|
|
|
var trial = await _trialRepository.FirstOrDefaultAsync(t => t.Id == updateModel.Id);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//删除中间表 Title对应的记录
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialDictionary>(t => t.TrialId == updateModel.Id);
|
|
|
|
|
await _trialDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == updateModel.Id);
|
|
|
|
|
|
|
|
|
|
//重新插入新的 Title记录
|
|
|
|
|
|
|
|
|
@@ -295,17 +301,17 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
{
|
|
|
|
|
if (trial.SponsorId != null)
|
|
|
|
|
{
|
|
|
|
|
if (await _repository.AnyAsync<Sponsor>(t => t.Id == trial.SponsorId && t.IsTrialLevel))
|
|
|
|
|
if (await _sponsorRepository.AnyAsync(t => t.Id == trial.SponsorId && t.IsTrialLevel))
|
|
|
|
|
{
|
|
|
|
|
await _repository.BatchUpdateAsync<Sponsor>(t => t.Id == trial.SponsorId, u => new Sponsor() { TrialId = trial.Id });
|
|
|
|
|
await _sponsorRepository.BatchUpdateNoTrackingAsync(t => t.Id == trial.SponsorId, u => new Sponsor() { TrialId = trial.Id });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (trial.CROId != null)
|
|
|
|
|
{
|
|
|
|
|
if (await _repository.AnyAsync<CRO>(t => t.Id == trial.CROId && t.IsTrialLevel))
|
|
|
|
|
if (await _croRepository.AnyAsync(t => t.Id == trial.CROId && t.IsTrialLevel))
|
|
|
|
|
{
|
|
|
|
|
await _repository.BatchUpdateAsync<CRO>(t => t.Id == trial.CROId, u => new CRO() { TrialId = trial.Id });
|
|
|
|
|
await _croRepository.BatchUpdateNoTrackingAsync(t => t.Id == trial.CROId, u => new CRO() { TrialId = trial.Id });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -320,7 +326,7 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
switch (newState)
|
|
|
|
|
{
|
|
|
|
|
case (int)TrialExpedited.ExpeditedIn24H:
|
|
|
|
|
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
|
|
|
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
|
|
|
|
{
|
|
|
|
|
TimepointIn24H = u.Timepoint,
|
|
|
|
|
AdjudicationIn24H = u.Adjudication,
|
|
|
|
@@ -329,7 +335,7 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case (int)TrialExpedited.ExpeditedIn48H:
|
|
|
|
|
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
|
|
|
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
|
|
|
|
{
|
|
|
|
|
TimepointIn48H = u.Timepoint,
|
|
|
|
|
AdjudicationIn48H = u.Adjudication,
|
|
|
|
@@ -350,7 +356,7 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
switch (newState)
|
|
|
|
|
{
|
|
|
|
|
case (int)TrialExpedited.None:
|
|
|
|
|
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
|
|
|
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
|
|
|
|
{
|
|
|
|
|
Timepoint = u.TimepointIn24H,
|
|
|
|
|
Adjudication = u.AdjudicationIn24H,
|
|
|
|
@@ -359,7 +365,7 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case (int)TrialExpedited.ExpeditedIn48H:
|
|
|
|
|
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
|
|
|
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
|
|
|
|
{
|
|
|
|
|
TimepointIn48H = u.TimepointIn24H,
|
|
|
|
|
AdjudicationIn48H = u.AdjudicationIn24H,
|
|
|
|
@@ -381,7 +387,7 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
switch (newState)
|
|
|
|
|
{
|
|
|
|
|
case (int)TrialExpedited.None:
|
|
|
|
|
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
|
|
|
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
|
|
|
|
{
|
|
|
|
|
Timepoint = u.TimepointIn48H,
|
|
|
|
|
Adjudication = u.AdjudicationIn48H,
|
|
|
|
@@ -390,7 +396,7 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case (int)TrialExpedited.ExpeditedIn24H:
|
|
|
|
|
await _repository.BatchUpdateAsync<Workload>(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
|
|
|
|
await _workloadRepository.BatchUpdateNoTrackingAsync(t => t.IsLock == false && t.TrialId == trialId, u => new Workload()
|
|
|
|
|
{
|
|
|
|
|
TimepointIn24H = u.TimepointIn48H,
|
|
|
|
|
AdjudicationIn24H = u.AdjudicationIn48H,
|
|
|
|
@@ -425,166 +431,132 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
if (_verifyConfig.CurrentValue.OpenTrialRelationDelete)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
#region 项目真删除废弃
|
|
|
|
|
|
|
|
|
|
//if (trial.VisitPlanConfirmed)
|
|
|
|
|
//{
|
|
|
|
|
// return ResponseOutput.NotOk("Trial访视计划已经确认,无法删除");
|
|
|
|
|
//}
|
|
|
|
|
#region 真项目删除
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<CheckChallengeDialog>(o => o.SubjectVisit.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ClinicalDataTrialSet>(o => o.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<InspectionFile>(o => o.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<CriterionNidusSystem>(o => o.TrialReadingCriterion.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<DataInspection>(o => o.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<DicomStudy>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<StudyMonitor>(t => t.TrialId == trialId);
|
|
|
|
|
//await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
|
|
|
|
//await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<EnrollReadingCategory>(t => t.Enroll.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<Enroll>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<EnrollDetail>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<NoneDicomStudyFile>(t => t.NoneDicomStudy.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<NoneDicomStudy>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//if (await _repository.AnyAsync<Enroll>(u => u.TrialId == trialId))
|
|
|
|
|
//{
|
|
|
|
|
// return ResponseOutput.NotOk("该Trial有医生入组或在入组流程中,无法删除");
|
|
|
|
|
//}
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<OrganTrialInfo>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//if (await _repository.AnyAsync<TrialSite>(u => u.TrialId == trialId))
|
|
|
|
|
//{
|
|
|
|
|
// return ResponseOutput.NotOk("该Trial下面有Site,无法删除");
|
|
|
|
|
//}
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<PaymentAdjustment>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<PaymentDetail>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
////PM 可以删除项目 仅仅在没有site 参与者只有他自己的时候
|
|
|
|
|
//if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager)
|
|
|
|
|
//{
|
|
|
|
|
// //参与者仅有他自己时,可以删除
|
|
|
|
|
// if (await _trialUserRepository.CountAsync(t => t.TrialId == trialId) == 1)
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
|
|
// var success1 = await _repository.BatchDeleteAsync<Trial>(o => o.Id == trialId) ||
|
|
|
|
|
// await _repository.BatchDeleteAsync<TrialUser>(t => t.TrialId == trialId) ||
|
|
|
|
|
// await _repository.BatchDeleteAsync<TrialDictionary>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
// return ResponseOutput.Result(success1);
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
//if (await _repository.AnyAsync<TrialUser>(u => u.TrialId == trialId))
|
|
|
|
|
//{
|
|
|
|
|
// return ResponseOutput.NotOk("该Trial下面有参与者,无法删除");
|
|
|
|
|
//}
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<PreviousHistory>(t => t.SubjectVisit.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<PreviousOther>(t => t.SubjectVisit.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<PreviousPDF>(t => t.SubjectVisit.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<QCChallengeDialog>(t => t.QCChallenge.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<QCChallenge>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingClinicalDataPDF>(t => t.ReadingClinicalData.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingClinicalData>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingGlobalTaskInfo>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingJudgeInfo>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingMedicalReviewDialog>(t => t.TaskMedicalReview.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingMedicineQuestionAnswer>(t => t.TaskMedicalReview.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingMedicineTrialQuestion>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingOncologyTaskInfo>(t => t.VisitTask.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingPeriodPlan>(t => t.ReadingPeriodSet.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingPeriodSet>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingQuestionTrial>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTableAnswerRowInfo>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTableQuestionAnswer>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTableQuestionTrial>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTaskRelation>(t => t.VisitTask.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadModule>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<SubjectCanceDoctor>(t => t.Subject.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<SubjectUser>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<Subject>(t => t.TrialId == trialId);
|
|
|
|
|
//await _subjectVisitRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TaskAllocationRule>(t => t.TrialId == trialId);
|
|
|
|
|
//await _taskConsistentRuleRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TaskInfluence>(t => t.InfluenceTask.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TaskMedicalReview>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TaskMedicalReviewRule>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialStateChange>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialPaymentPrice>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<Trial>(o => o.Id == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialClinicalDataSetCriterion>(t => t.TrialReadingCriterion.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialCriterionDictionaryCode>(t => t.TrialReadingCriterion.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId);
|
|
|
|
|
//await _trialDictionaryRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialDocument>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialDocNeedConfirmedUserType>(t => t.TrialDocument.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _trialEmailNoticeUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfig.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
////await _repository.BatchDeleteAsync<TrialExperience>(t => t.TrialId == trialId) ;
|
|
|
|
|
//await _trialEmailNoticeUserRepository.BatchDeleteNoTrackingAsync(t => t.TrialEmailNoticeConfig.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialEmailNoticeConfig>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialExternalUser>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialPaymentPrice>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialQCQuestion>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialQCQuestionAnswer>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialRevenuesPrice>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialRevenuesPriceVerification>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSign>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSite>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSiteSurvey>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSiteUserSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSiteEquipmentSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialUser>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialSiteUser>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<VisitStage>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<VisitPlanInfluenceStat>(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<VisitPlanInfluenceStudy>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<VisitTaskReReading>(t => t.OriginalReReadingTask.TrialId == trialId);
|
|
|
|
|
//await _visitTaskRepository.BatchDeleteNoTrackingAsync(t => t.TrialId == trialId);
|
|
|
|
|
//await _repository.BatchDeleteNoTrackingAsync<TrialStateChange>(t => t.TrialId == trialId);
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<CheckChallengeDialog>(o => o.SubjectVisit.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ClinicalDataTrialSet>(o => o.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<InspectionFile>(o => o.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<CriterionNidusSystem>(o => o.TrialReadingCriterion.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<DataInspection>(o => o.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<DicomStudy>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<StudyMonitor>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<DicomSeries>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<DicomInstance>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<EnrollReadingCategory>(t => t.Enroll.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<Enroll>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<EnrollDetail>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<NoneDicomStudyFile>(t => t.NoneDicomStudy.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<NoneDicomStudy>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<OrganTrialInfo>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<PaymentAdjustment>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<PaymentDetail>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<PreviousHistory>(t => t.SubjectVisit.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<PreviousOther>(t => t.SubjectVisit.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<PreviousPDF>(t => t.SubjectVisit.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<QCChallengeDialog>(t => t.QCChallenge.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<QCChallenge>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingClinicalDataPDF>(t => t.ReadingClinicalData.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingClinicalData>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingGlobalTaskInfo>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingJudgeInfo>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingMedicalReviewDialog>(t => t.TaskMedicalReview.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingMedicineQuestionAnswer>(t => t.TaskMedicalReview.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingMedicineTrialQuestion>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingOncologyTaskInfo>(t => t.VisitTask.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingPeriodPlan>(t => t.ReadingPeriodSet.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingPeriodSet>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingQuestionTrial>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingTableAnswerRowInfo>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingTableQuestionAnswer>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingTableQuestionTrial>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingTaskRelation>(t => t.VisitTask.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadModule>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<SubjectCanceDoctor>(t => t.Subject.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<SubjectUser>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<Subject>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<SubjectVisit>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<TaskAllocationRule>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TaskConsistentRule>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TaskInfluence>(t => t.InfluenceTask.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TaskMedicalReview>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TaskMedicalReviewRule>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialStateChange>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialPaymentPrice>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<Trial>(o => o.Id == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialClinicalDataSetCriterion>(t => t.TrialReadingCriterion.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialCriterionDictionaryCode>(t => t.TrialReadingCriterion.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<ReadingQuestionCriterionTrial>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialDictionary>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialDocConfirmedUser>(t => t.TrialDocument.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialDocument>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialDocNeedConfirmedUserType>(t => t.TrialDocument.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialEmailNoticeUser>(t => t.TrialEmailNoticeConfig.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
//await _repository.BatchDeleteAsync<TrialExperience>(t => t.TrialId == trialId) ;
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialEmailNoticeUser>(t => t.TrialEmailNoticeConfig.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialEmailNoticeConfig>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialExternalUser>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialPaymentPrice>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialQCQuestion>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialQCQuestionAnswer>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialRevenuesPrice>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialRevenuesPriceVerification>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialSign>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialSite>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialSiteSurvey>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialSiteUserSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialSiteEquipmentSurvey>(t => t.TrialSiteSurvey.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialUser>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialSiteUser>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<VisitStage>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<VisitPlanInfluenceStat>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<VisitPlanInfluenceStudy>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
await _repository.BatchDeleteAsync<VisitTaskReReading>(t => t.OriginalReReadingTask.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<VisitTask>(t => t.TrialId == trialId);
|
|
|
|
|
await _repository.BatchDeleteAsync<TrialStateChange>(t => t.TrialId == trialId);
|
|
|
|
|
|
|
|
|
|
return ResponseOutput.Ok();
|
|
|
|
|
|
|
|
|
@@ -666,14 +638,14 @@ namespace IRaCIS.Application.Services
|
|
|
|
|
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
|
|
|
|
public async Task<IResponseOutput> UpdateEnrollStatus(Guid trialId, EnrollStatus status)
|
|
|
|
|
{
|
|
|
|
|
await _repository.AddAsync(new EnrollDetail()
|
|
|
|
|
await _enrollDetailRepository.AddAsync(new EnrollDetail()
|
|
|
|
|
{
|
|
|
|
|
DoctorId = _userInfo.Id,
|
|
|
|
|
TrialId = trialId,
|
|
|
|
|
EnrollStatus = status,
|
|
|
|
|
OptUserType = (int)SystemUserType.DoctorUser,
|
|
|
|
|
});
|
|
|
|
|
return ResponseOutput.Result(await _repository.BatchUpdateAsync<Enroll>(u => u.TrialId == trialId && u.DoctorId == _userInfo.Id, e => new Enroll
|
|
|
|
|
return ResponseOutput.Result(await _enrollRepository.BatchUpdateNoTrackingAsync(u => u.TrialId == trialId && u.DoctorId == _userInfo.Id, e => new Enroll
|
|
|
|
|
{
|
|
|
|
|
EnrollStatus = status
|
|
|
|
|
}));
|
|
|
|
|