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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user