diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index 206e06340..1041ae67b 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -242,6 +242,7 @@ namespace IRaCIS.Core.API.Controllers /// [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialBasicInfoConfirm")] [UnitOfWork] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] public async Task ConfigTrialBasicInfoConfirm(DataInspectionDto opt) { @@ -261,6 +262,7 @@ namespace IRaCIS.Core.API.Controllers /// [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialProcessInfoConfirm")] [UnitOfWork] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] public async Task ConfigTrialProcessInfoConfirm(DataInspectionDto opt) { opt.Data.IsTrialProcessConfirmed = true; @@ -282,6 +284,7 @@ namespace IRaCIS.Core.API.Controllers /// [HttpPost, Route("Inspection/configTrialBasicInfo/ConfigTrialUrgentInfoConfirm")] [UnitOfWork] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] public async Task ConfigTrialUrgentInfoConfirm(DataInspectionDto opt) { opt.Data.IsTrialUrgentConfirmed = true; diff --git a/IRaCIS.Core.Application/BusinessFilter/TrialResourceFilter.cs b/IRaCIS.Core.Application/BusinessFilter/TrialResourceFilter.cs index 2ba6c8812..3c98bcf29 100644 --- a/IRaCIS.Core.Application/BusinessFilter/TrialResourceFilter.cs +++ b/IRaCIS.Core.Application/BusinessFilter/TrialResourceFilter.cs @@ -3,6 +3,7 @@ using IRaCIS.Core.Domain.Share; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; +using static IRaCIS.Core.Domain.Share.StaticData; namespace IRaCIS.Core.Application.Filter { @@ -14,11 +15,14 @@ namespace IRaCIS.Core.Application.Filter private readonly IEasyCachingProvider _provider; private readonly IUserInfo _userInfo; + private readonly string _trialOpt; - public TrialResourceFilter(IEasyCachingProvider provider, IUserInfo userInfo) + + public TrialResourceFilter(IEasyCachingProvider provider, IUserInfo userInfo, string trialOpt) { _provider = provider; _userInfo = userInfo; + _trialOpt = trialOpt; } @@ -98,7 +102,7 @@ namespace IRaCIS.Core.Application.Filter var trialStatusStr = cacheResultDic[trialIdStr]; // 这里是统一拦截 项目有关的操作允许情况(特殊的地方,比如项目配置(有的在多种状态(初始化,ongoing)都可以操作,有的仅仅在Initializing)还有 项目添加和更新,不走这里,特殊处理,不然在这里显得很乱,判断是哪个接口) - if (trialStatusStr.Value == StaticData.TrialState.TrialOngoing) + if (trialStatusStr.Value == StaticData.TrialState.TrialOngoing || _trialOpt==TrialOpt.BeforeOngoingCantOpt) { await next.Invoke(); diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index 93c7628ec..828ed1950 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -15,6 +15,7 @@ using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.ViewModel; using MassTransit; using IRaCIS.Core.Application.Filter; +using static IRaCIS.Core.Domain.Share.StaticData; namespace IRaCIS.Core.Application { @@ -648,7 +649,7 @@ namespace IRaCIS.Core.Application /// [HttpPut] [Authorize(Policy = IRaCISPolicy.PM_APM)] - //[TypeFilter(typeof(TrialResourceFilter))] + public async Task ConfigTrialBasicInfo(BasicTrialConfig trialConfig) { await VerifyOnlyInOngoingOrInitialIzingOptAsync(trialConfig.TrialId); @@ -672,7 +673,7 @@ namespace IRaCIS.Core.Application /// [HttpPut] [Authorize(Policy = IRaCISPolicy.PM_APM)] - //[TypeFilter(typeof(TrialResourceFilter))] + public async Task ConfigTrialProcessInfo(TrialProcessConfig trialConfig) { if (!await _trialRepository.Where(t => t.Id == trialConfig.TrialId).IgnoreQueryFilters().AnyAsync(t => t.TrialStatusStr == StaticData.TrialState.TrialInitializing)) @@ -746,7 +747,6 @@ namespace IRaCIS.Core.Application /// [HttpPut] [Authorize(Policy = IRaCISPolicy.PM_APM)] - //[TypeFilter(typeof(TrialResourceFilter))] public async Task ConfigTrialUrgentInfo(TrialUrgentConfig trialConfig) { @@ -881,7 +881,6 @@ namespace IRaCIS.Core.Application - /// /// 获取 配置的所有信息 没有分多个接口 /// @@ -895,18 +894,13 @@ namespace IRaCIS.Core.Application } - - - - - /// /// 配置项目任务信息 /// /// /// [HttpPut] - //[TypeFilter(typeof(TrialResourceFilter))] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] public async Task ConfigTrialTaskInfo(TrialTaskConfig trialConfig) { var trialInfo = (await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialConfig.TrialId)).IfNullThrowException(); @@ -923,7 +917,7 @@ namespace IRaCIS.Core.Application /// /// [HttpPut] - //[TypeFilter(typeof(TrialResourceFilter))] + [TypeFilter(typeof(TrialResourceFilter),Arguments = new object[] { "BeforeOngoingCantOpt" })] public async Task ConfigTrialReadingTaskViewRule(TrialReadingTaskViewConfig trialConfig) { var trialInfo = (await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialConfig.TrialId)).IfNullThrowException(); diff --git a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs index 039cdcd00..7db4f54f5 100644 --- a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs +++ b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs @@ -89,6 +89,7 @@ namespace IRaCIS.Application.Services [UnitOfWork] [HttpPost] [Authorize(Policy = IRaCISPolicy.PM_APM)] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] public async Task AddOrUpdateVisitStage(VisitPlanCommand visitPlan) { @@ -190,6 +191,7 @@ namespace IRaCIS.Application.Services [UnitOfWork] [HttpPost("{trialId:guid}")] [Authorize(Policy = IRaCISPolicy.PM_APM)] + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "BeforeOngoingCantOpt" })] public async Task ConfirmTrialVisitPlan(Guid trialId) { if (!await _trialRepository.AnyAsync(t => t.Id == trialId && (t.TrialStatusStr == StaticData.TrialState.TrialInitializing || t.TrialStatusStr == StaticData.TrialState.TrialOngoing))) diff --git a/IRaCIS.Core.Domain/_Config/_StaticData.cs b/IRaCIS.Core.Domain/_Config/_StaticData.cs index e0732ba27..438cb37d5 100644 --- a/IRaCIS.Core.Domain/_Config/_StaticData.cs +++ b/IRaCIS.Core.Domain/_Config/_StaticData.cs @@ -50,6 +50,15 @@ public static class StaticData } + + public static class TrialOpt + { + //默认 + public static readonly string AfterStopCannNotOpt = "AfterStopCannNotOpt"; + + //ongoing 前能操作 + public static readonly string BeforeOngoingCantOpt = "BeforeOngoingCantOpt"; + }