using JetBrains.Annotations; using System; using System.Collections.Generic; using Volo.Abp; namespace Sanhe.Abp.Features.LimitValidation; public class AbpFeaturesLimitValidationOptions { public IDictionary> EffectPolicys { get; } public AbpFeaturesLimitValidationOptions() { EffectPolicys = new Dictionary>(); } /// /// 变更功能限制策略时长计算方法 /// /// 限制策略 /// 自定义的计算方法 /// /// 返回值一定要是秒钟刻度 /// public void MapEffectPolicy(LimitPolicy policy, [NotNull] Func func) { Check.NotNull(func, nameof(func)); if (EffectPolicys.ContainsKey(policy)) { EffectPolicys[policy] = func; } else { EffectPolicys.Add(policy, func); } } internal void MapDefaultEffectPolicys() { MapEffectPolicy(LimitPolicy.Minute, (time) => { return (long)(DateTimeOffset.UtcNow.AddMinutes(time) - DateTimeOffset.UtcNow).TotalSeconds; }); MapEffectPolicy(LimitPolicy.Hours, (time) => { return (long)(DateTimeOffset.UtcNow.AddHours(time) - DateTimeOffset.UtcNow).TotalSeconds; }); MapEffectPolicy(LimitPolicy.Days, (time) => { return (long)(DateTimeOffset.UtcNow.AddDays(time) - DateTimeOffset.UtcNow).TotalSeconds; }); MapEffectPolicy(LimitPolicy.Weeks, (time) => { return (long)(DateTimeOffset.UtcNow.AddDays(time * 7) - DateTimeOffset.UtcNow).TotalSeconds; }); MapEffectPolicy(LimitPolicy.Month, (time) => { return (long)(DateTimeOffset.UtcNow.AddMonths(time) - DateTimeOffset.UtcNow).TotalSeconds; }); MapEffectPolicy(LimitPolicy.Years, (time) => { return (long)(DateTimeOffset.UtcNow.AddYears(time) - DateTimeOffset.UtcNow).TotalSeconds; }); } }