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