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}"); + } + } + /// /// 从内存缓存获取规则列表;缓存为空时兜底加载并填充缓存。 ///