Merge branch 'feature/p132_74-risk-engine' of https://gitee.glmszq.com/gsty/onederiv/trs into feature/p132_74-risk-engine

This commit is contained in:
尹峰
2026-07-17 15:39:46 +08:00
4 changed files with 38 additions and 14 deletions
@@ -168,9 +168,9 @@ namespace YLErp.Modules.RiskEngine
}
catch (Exception ex)
{
// 脚本执行异常(如空引用、类型转换失败)视为规则不触发
// 脚本执行异常(如空引用、类型转换失败)交由执行层按阻断处理
_logger.Error($"规则执行异常 - RuleId: {ruleIdText}, Error: {ex.Message}\n脚本代码:{scriptCode}");
return false;
throw;
}
};
}
@@ -405,7 +405,9 @@ namespace YLErp.Modules.RiskEngine
var compileResult = RuleCompiler.ValidateAndCompileRule(rule);
if (!compileResult.Success)
{
_logger.Info($"[风控引擎] 规则编译失败 - RuleId: {rule.Id}, Error: {compileResult.ErrorMessage}");
var errorMessage = $"规则[{rule.RuleName}]编译失败,已按阻断处理,请检查规则表达式配置:{compileResult.ErrorMessage}";
_logger.Info($"[风控引擎] 规则编译失败,按阻断处理 - RuleId: {rule.Id}, Error: {compileResult.ErrorMessage}");
AddBlockError(result, rule.Id.ToString(), rule.RuleName, rule.RuleText, errorMessage);
continue;
}
@@ -423,7 +425,9 @@ namespace YLErp.Modules.RiskEngine
}
catch (Exception ex)
{
_logger.Info($"[风控引擎] 规则执行异常 - RuleId: {rule.Id}, Error: {ex.Message}");
var errorMessage = $"规则[{rule.RuleName}]执行异常:{ex.Message}";
_logger.Error($"[风控引擎] 规则执行异常,按阻断处理 - RuleId: {rule.Id}, Error: {ex.Message}");
AddBlockError(result, ruleId, rule.RuleName, rule.RuleText, errorMessage);
continue;
}
@@ -502,21 +506,31 @@ namespace YLErp.Modules.RiskEngine
}
catch (Exception ex)
{
result.NeedApproval = true;
result.Passed = false;
result.TriggeredRules.Add(new TriggeredRuleInfo
{
RuleId = "ENGINE_ERROR",
RuleName = "风控引擎执行异常",
RuleText = ex.Message,
Message = $"风控引擎异常:{ex.Message}"
});
var errorMessage = $"风控引擎异常:{ex.Message}";
AddBlockError(result, "ENGINE_ERROR", "风控引擎执行异常", ex.Message, errorMessage);
_logger.Error($"[风控引擎] EvaluateRisk 异常 - TradeId: {context?.TradeId}, Error: {ex.Message}");
}
return result;
}
private static void AddBlockError(RiskResult result, string ruleId, string ruleName, string ruleText, string errorMessage)
{
result.Blocked = true;
result.Passed = false;
result.ErrorMessage = string.IsNullOrWhiteSpace(result.ErrorMessage)
? errorMessage
: $"{result.ErrorMessage}{errorMessage}";
result.TriggeredRules.Add(new TriggeredRuleInfo
{
RuleId = ruleId,
RuleName = ruleName,
ControlStrategy = RiskControlStrategy.Block,
RuleText = ruleText,
Message = errorMessage
});
}
/// <summary>
/// 从数据库加载规则列表
/// </summary>
@@ -27,6 +27,11 @@ namespace YLErp.Modules.RiskEngine
/// </summary>
public bool ShowTip { get; set; }
/// <summary>
/// 错误信息
/// </summary>
public string ErrorMessage { get; set; }
/// <summary>
/// 触发的规则列表
/// </summary>
@@ -5265,7 +5265,12 @@ namespace YLErp.Modules.RiskModule
result.RiskWarningDetails += "[风控引擎] 规则触发:禁止\n";
foreach (var triggeredRule in riskResult.TriggeredRules.Where(r => r.ControlStrategy == RiskControlStrategy.Block))
{
result.RiskWarningDetails += $"规则ID:{triggeredRule.RuleId};规则名称:{triggeredRule.RuleName};规则说明:{triggeredRule.RuleText}\n";
result.RiskWarningDetails += $"规则ID:{triggeredRule.RuleId};规则名称:{triggeredRule.RuleName};规则说明:{triggeredRule.RuleText}";
if (!string.IsNullOrWhiteSpace(triggeredRule.Message))
{
result.RiskWarningDetails += $";信息:{triggeredRule.Message}";
}
result.RiskWarningDetails += "\n";
}
}
if (riskResult.NeedApproval)