diff --git a/IRaCIS.Core.API/appsettings.Development.json b/IRaCIS.Core.API/appsettings.Development.json index f9797882d..8635556a6 100644 --- a/IRaCIS.Core.API/appsettings.Development.json +++ b/IRaCIS.Core.API/appsettings.Development.json @@ -15,7 +15,9 @@ "OpenUserComplexPassword": true, - "OpenSignDocumentBeforeWork": true + "OpenSignDocumentBeforeWork": true, + + "OpenTrialRelationDelete":true } diff --git a/IRaCIS.Core.API/appsettings.Production.json b/IRaCIS.Core.API/appsettings.Production.json index 4a7ceba33..b32508856 100644 --- a/IRaCIS.Core.API/appsettings.Production.json +++ b/IRaCIS.Core.API/appsettings.Production.json @@ -15,7 +15,9 @@ "OpenUserComplexPassword": true, - "OpenSignDocumentBeforeWork": true + "OpenSignDocumentBeforeWork": true, + + "OpenTrialRelationDelete": false } diff --git a/IRaCIS.Core.API/appsettings.Staging.json b/IRaCIS.Core.API/appsettings.Staging.json index c6b1dd4ec..8447bf307 100644 --- a/IRaCIS.Core.API/appsettings.Staging.json +++ b/IRaCIS.Core.API/appsettings.Staging.json @@ -13,6 +13,8 @@ "OpenUserComplexPassword": false, - "OpenSignDocumentBeforeWork": false + "OpenSignDocumentBeforeWork": false, + + "OpenTrialRelationDelete": false } } diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 047bda29c..5b6381392 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -2553,7 +2553,7 @@ - 根据项目Id 获取医生Id,用于出发计算费用 + 根据项目Id 获取医生Id,用于触发计算费用 diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs index 1ba371040..3fcf03fcd 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialService.cs @@ -3,11 +3,10 @@ using IRaCIS.Application.Contracts; using IRaCIS.Core.Domain.Share; using EasyCaching.Core; using IRaCIS.Core.Application.Filter; -using IRaCIS.Core.Infra.EFCore; -using MassTransit; using Microsoft.AspNetCore.Mvc; using Panda.DynamicWebApi.Attributes; using IRaCIS.Core.Infrastructure; +using Microsoft.Extensions.Options; namespace IRaCIS.Application.Services { @@ -20,14 +19,16 @@ namespace IRaCIS.Application.Services private readonly IEasyCachingProvider _provider; private readonly IRepository _trialRepository; private readonly IRepository _trialUserRepository; + private readonly IOptionsMonitor _verifyConfig; public bool TrialExpeditedChange { get; set; } = false; - public TrialService(IEasyCachingProvider provider,IRepository trialRepository, - IRepository trialUserRepository + public TrialService(IEasyCachingProvider provider, IRepository trialRepository, + IRepository trialUserRepository, IOptionsMonitor verifyConfig ) { + _verifyConfig = verifyConfig; _provider = provider; _trialRepository = trialRepository; this._trialUserRepository = trialUserRepository; @@ -74,12 +75,12 @@ namespace IRaCIS.Application.Services //过滤废除的项目 public async Task> GetTrialSelect() { - return await _trialRepository.AsQueryable().IgnoreQueryFilters() + return await _trialRepository.AsQueryable().IgnoreQueryFilters() .WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin, t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id) && t.IsDeleted == false) - + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); } - + /// @@ -131,12 +132,10 @@ namespace IRaCIS.Application.Services public virtual async Task> AddOrUpdateTrial(TrialCommand trialAddModel) { - // 到时候 策略授权 统一改 归类 if (!(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin)) { throw new BusinessValidationFailedException("仅PM/APM可以操作!"); - } if (trialAddModel.Id == Guid.Empty || trialAddModel.Id == null) @@ -164,7 +163,7 @@ namespace IRaCIS.Application.Services trialAddModel.ModalityIds.ForEach(modalityId => trial.TrialDicList.Add(new TrialDictionary() { DictionaryId = modalityId, KeyName = StaticData.Modality, TrialId = trial.Id })); trialAddModel.CriterionIds.ForEach(criterionId => trial.TrialDicList.Add(new TrialDictionary() { DictionaryId = criterionId, KeyName = StaticData.Criterion, TrialId = trial.Id })); trialAddModel.ReviewTypeIds.ForEach(ReviewTypeId => trial.TrialDicList.Add(new TrialDictionary() { DictionaryId = ReviewTypeId, KeyName = StaticData.ReviewType, TrialId = trial.Id })); - + //添加项目后 项目状态变更为申请下载简历 trial.TrialEnrollStatus = (int)TrialEnrollStatus.ChooseDoctor; //trial.TrialStatusStr = StaticData.TrialInitializing; @@ -176,7 +175,7 @@ namespace IRaCIS.Application.Services //如果是PM, 则需要将该人员添加到 运维人员表 //添加运维人员PM - await _repository.AddAsync(new TrialUser() { TrialId = trial.Id, UserId = _userInfo.Id ,JoinTime = DateTime.Now}); + await _repository.AddAsync(new TrialUser() { TrialId = trial.Id, UserId = _userInfo.Id, JoinTime = DateTime.Now }); // 添加扩展信息表记录 await _repository.AddAsync(new TrialPaymentPrice() { TrialId = trial.Id }); @@ -199,7 +198,7 @@ namespace IRaCIS.Application.Services if (!await _repository.AnyAsync(u => u.Id == trialAddModel.Id && (u.TrialStatusStr == StaticData.TrialInitializing || u.TrialStatusStr == StaticData.TrialOngoing))) { throw new BusinessValidationFailedException("项目初始化或者进行中时 才允许操作"); - + } // 判断项目Id 是否已经存在 if (await _repository.AnyAsync(u => u.TrialCode == updateModel.TrialCode && u.Id != updateModel.Id)) @@ -231,8 +230,6 @@ namespace IRaCIS.Application.Services var success = await _repository.SaveChangesAsync(); return ResponseOutput.Ok(trial); - - } } @@ -348,50 +345,110 @@ namespace IRaCIS.Application.Services { - var trial = await _trialRepository.FirstOrDefaultAsync(u => u.Id == trialId); - if (trial == null) return Null404NotFound(trial); + var trial = (await _trialRepository.FirstOrDefaultAsync(u => u.Id == trialId)).IfNullThrowException(); - if (trial.VisitPlanConfirmed) + + if (_verifyConfig.CurrentValue.OpenTrialRelationDelete ) { - return ResponseOutput.NotOk("Trial访视计划已经确认,无法删除"); + + #region 项目真删除废弃 + + //if (trial.VisitPlanConfirmed) + //{ + // return ResponseOutput.NotOk("Trial访视计划已经确认,无法删除"); + //} + + //if (await _repository.AnyAsync(u => u.TrialId == trialId)) + //{ + // return ResponseOutput.NotOk("该Trial有医生入组或在入组流程中,无法删除"); + //} + + //if (await _repository.AnyAsync(u => u.TrialId == trialId)) + //{ + // return ResponseOutput.NotOk("该Trial下面有Site,无法删除"); + //} + + ////PM 可以删除项目 仅仅在没有site 参与者只有他自己的时候 + //if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager) + //{ + // //参与者仅有他自己时,可以删除 + // if (await _trialUserRepository.CountAsync(t => t.TrialId == trialId) == 1) + // { + + // var success1 = await _repository.BatchDeleteAsync(o => o.Id == trialId) || + // await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + // await _repository.BatchDeleteAsync(t => t.TrialId == trialId); + + // return ResponseOutput.Result(success1); + // } + //} + + //if (await _repository.AnyAsync(u => u.TrialId == trialId)) + //{ + // return ResponseOutput.NotOk("该Trial下面有参与者,无法删除"); + //} + #endregion + + + + var success = await _repository.BatchDeleteAsync(o => o.Id == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialDocument.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialDocument.TrialId == trialId) || + + + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialSiteSurvey.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialSiteSurvey.TrialId == trialId) || + + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || + + + + await _repository.BatchDeleteAsync(t => t.SubjectVisit.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.SubjectVisit.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.SubjectVisit.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.NoneDicomStudy.TrialId == trialId) || + await _repository.BatchDeleteAsync(t => t.TrialId == trialId) + ; + + return ResponseOutput.Result(success); + } - if (await _repository.AnyAsync(u => u.TrialId == trialId)) + else { - return ResponseOutput.NotOk("该Trial有医生入组或在入组流程中,无法删除"); + return ResponseOutput.NotOk("该环境不允许真删除项目数据"); } - if (await _repository.AnyAsync(u => u.TrialId == trialId)) - { - return ResponseOutput.NotOk("该Trial下面有Site,无法删除"); - } - //PM 可以删除项目 仅仅在没有site 参与者只有他自己的时候 - if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager) - { - //参与者仅有他自己时,可以删除 - if (await _trialUserRepository.CountAsync(t => t.TrialId == trialId) == 1) - { - - var success1 = await _repository.BatchDeleteAsync(o => o.Id == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - return ResponseOutput.Result(success1); - } - } - - if (await _repository.AnyAsync(u => u.TrialId == trialId)) - { - return ResponseOutput.NotOk("该Trial下面有参与者,无法删除"); - } - var success = await _repository.BatchDeleteAsync(o => o.Id == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId) || - await _repository.BatchDeleteAsync(t => t.TrialId == trialId); - - - return ResponseOutput.Result(success); } @@ -414,7 +471,7 @@ namespace IRaCIS.Application.Services /// - /// 根据项目Id 获取医生Id,用于出发计算费用 + /// 根据项目Id 获取医生Id,用于触发计算费用 /// public async Task> GetTrialEnrollmentReviewerIds(Guid trialId) { diff --git a/IRaCIS.Core.Domain.Share/ServiceVerifyConfigOption.cs b/IRaCIS.Core.Domain.Share/ServiceVerifyConfigOption.cs index b2c42b775..dfab0be70 100644 --- a/IRaCIS.Core.Domain.Share/ServiceVerifyConfigOption.cs +++ b/IRaCIS.Core.Domain.Share/ServiceVerifyConfigOption.cs @@ -10,5 +10,8 @@ namespace IRaCIS.Core.Domain.Share public bool OpenUserComplexPassword { get; set; } public bool OpenSignDocumentBeforeWork { get; set; } + + + public bool OpenTrialRelationDelete { get; set; } } } \ No newline at end of file