From 739a1efd3b5b14692f6cbbbdfe857db48ae5460d Mon Sep 17 00:00:00 2001 From: ruisu Date: Mon, 24 Aug 2026 13:31:26 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E4=BC=98=E5=8C=96=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E4=B8=8E=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RiskEngine/StructuredRuleExecutor.cs | 4 ++- YLErpDAL/Modules/RiskEngine/测试用例.md | 28 +++++++++++++------ 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/YLErpDAL/Modules/RiskEngine/StructuredRuleExecutor.cs b/YLErpDAL/Modules/RiskEngine/StructuredRuleExecutor.cs index 73c8cb7d..1a46ee33 100644 --- a/YLErpDAL/Modules/RiskEngine/StructuredRuleExecutor.cs +++ b/YLErpDAL/Modules/RiskEngine/StructuredRuleExecutor.cs @@ -519,8 +519,10 @@ namespace YLErp.Modules.RiskEngine /// private static string BuildBooleanMessage(glms_risk_variable variable, ValueExecuteResult value, bool expected) { + if (!string.IsNullOrWhiteSpace(value.DetailMessage)) + return value.DetailMessage.Trim(); + var parts = new List(); - AddDetail(parts, value.DetailMessage); parts.Add($"{variable.VariableName}为{FormatDisplayValue(value.Value)}"); parts.Add($"期望为{FormatDisplayValue(expected)}"); return string.Join(",", parts); diff --git a/YLErpDAL/Modules/RiskEngine/测试用例.md b/YLErpDAL/Modules/RiskEngine/测试用例.md index 67f25636..1d543383 100644 --- a/YLErpDAL/Modules/RiskEngine/测试用例.md +++ b/YLErpDAL/Modules/RiskEngine/测试用例.md @@ -4267,9 +4267,10 @@ NOT ((InterestDirection = 1 AND PositionType = 2) OR (InterestDirection = 2 AND 变量形式: -变量名:账户授权收支方向不匹配标记 -DataType:Numeric -规则配置:账户授权收支方向不匹配标记 > 0 +变量名:账户授权收支方向不匹配 +DataType:Boolean +ValueDomain:true/false +规则配置:账户授权收支方向不匹配 为是 变量取值表达式: @@ -4333,24 +4334,35 @@ var mismatchItems = directionItems var detailItems = directionItems .Select(p => new RiskVariableValueDetailItem( - p.IsMismatch ? 1m : 0m, + p.IsMismatch, $"浮动端记录ID为{p.FloatPositionId},PosiDirection为{p.PosiDirection},浮动端为{p.PositionTypeName};普通利息端记录ID为{p.InterestPositionId},InterestMode为{p.InterestMode},利息端为{p.InterestDirectionName},{(p.IsMismatch ? "不符合允许场景" : "符合允许场景")}")) .ToList(); if (mismatchItems.Any()) { + var matchedItems = directionItems + .Where(p => !p.IsMismatch) + .ToList(); + var mismatchMessage = string.Join(";", mismatchItems .Select(p => $"浮动端记录ID为{p.FloatPositionId},浮动端为{p.PositionTypeName},普通利息端记录ID为{p.InterestPositionId},利息端为{p.InterestDirectionName}")); + var matchedMessage = matchedItems.Any() + ? string.Join(";", matchedItems.Select(p => $"浮动端记录ID为{p.FloatPositionId},浮动端为{p.PositionTypeName},普通利息端记录ID为{p.InterestPositionId},利息端为{p.InterestDirectionName}")) + : "无"; + return new RiskVariableValueDetail( - 1m, - $"交易ID {TradeId} 存在账户授权收支方向不匹配组合:{mismatchMessage}。只允许利息端收取且浮动端空头,或利息端支付且浮动端多头", + true, + $"交易ID {TradeId} 存在账户授权收支方向不匹配组合。不匹配组合:{mismatchMessage}。匹配组合:{matchedMessage}。允许场景:利息端收取且浮动端空头,或利息端支付且浮动端多头", detailItems); } +var allMatchedMessage = string.Join(";", directionItems + .Select(p => $"浮动端记录ID为{p.FloatPositionId},浮动端为{p.PositionTypeName},普通利息端记录ID为{p.InterestPositionId},利息端为{p.InterestDirectionName}")); + return new RiskVariableValueDetail( - 0m, - $"交易ID {TradeId} 的账户授权收支方向均符合允许场景:浮动端共{floatItems.Count}条,普通利息端共{interestItems.Count}条,已逐条组合检查;只允许利息端收取且浮动端空头,或利息端支付且浮动端多头", + false, + $"交易ID {TradeId} 的账户授权收支方向均符合允许场景。匹配组合:{allMatchedMessage}。浮动端共{floatItems.Count}条,普通利息端共{interestItems.Count}条,已逐条组合检查", detailItems); ```