From 18fdb9e9f19b8016974a7ee83e2d63ef8500b86f Mon Sep 17 00:00:00 2001 From: ruisu Date: Thu, 9 Jul 2026 18:01:55 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=A2=9E=E5=8A=A0=E5=8D=95?= =?UTF-8?q?=E6=9D=A1rule=E5=A2=9E=E5=88=A0=E6=94=B9=E5=87=BD=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E5=8F=8Aapplication=E5=85=A8=E9=87=8F?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=87=BD=E6=95=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/RiskEngine/RiskEngineService.cs | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/YLErpDAL/Modules/RiskEngine/RiskEngineService.cs b/YLErpDAL/Modules/RiskEngine/RiskEngineService.cs index a6949a2a..b169db60 100644 --- a/YLErpDAL/Modules/RiskEngine/RiskEngineService.cs +++ b/YLErpDAL/Modules/RiskEngine/RiskEngineService.cs @@ -205,6 +205,50 @@ namespace YLErp.Modules.RiskEngine Preload(); } + /// + /// 刷新单条规则缓存:重新加载规则与应用列表,只编译指定规则。 + /// + public RuleCompileResult RefreshOneRuleCache(long ruleId) + { + lock (_cacheLock) + { + _logger.Info($"[风控引擎] RefreshOneRuleCache 开始 - RuleId: {ruleId}"); + // 从数据库加载最新规则列表 + _cachedRules = LoadRulesFromDb(); + + var rule = _cachedRules.FirstOrDefault(r => r.Id == ruleId); + if (rule == null) + { + RuleCompiledCache.Remove(ruleId.ToString()); + _logger.Info($"[风控引擎] RefreshOneRuleCache 未找到规则,已移除缓存 - RuleId: {ruleId}"); + return RuleCompileResult.Fail("规则不存在或已删除"); + } + + if (rule.Status != RiskRuleStatus.Active) + { + RuleCompiledCache.Remove(ruleId.ToString()); + _logger.Info($"[风控引擎] RefreshOneRuleCache 规则非活跃,已移除缓存 - RuleId: {ruleId}, Status: {rule.Status}"); + return RuleCompileResult.Fail("规则不存在或非活跃状态"); + } + + var compileResult = RuleCompiler.ValidateAndCompileRule(rule); + _logger.Info($"[风控引擎] RefreshOneRuleCache 完成 - RuleId: {ruleId}, Success: {compileResult.Success}, Error: {compileResult.ErrorMessage}"); + return compileResult; + } + } + + /// + /// 仅刷新规则应用列表,不清空规则编译缓存。 + /// + public void RefreshApplication() + { + lock (_cacheLock) + { + _cachedApplications = LoadApplicationsFromDb(); + _logger.Info($"[风控引擎] RefreshApplication 完成 - 应用数: {_cachedApplications.Count}"); + } + } + /// /// 从内存缓存获取规则列表;缓存为空时兜底加载并填充缓存。 ///