From d1804710f3288548943d367edb77befee62deda2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=90=8D=E9=94=90?= <1565842059@qq.com> Date: Thu, 2 Jul 2026 16:02:49 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"=E4=BC=98=E5=8C=96=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 10b08f8f211844d1ff8b936596ab65a3760cb3e5. --- .../Modules/RiskEngine/RiskEngineService.cs | 2 +- YLErpDAL/Modules/RiskEngine/RiskRule.cs | 2 +- .../Modules/RiskEngine/RiskRuleApplication.cs | 2 +- .../Modules/RiskEngine/RiskRuleService.cs | 103 +++++++++++------- 4 files changed, 67 insertions(+), 42 deletions(-) diff --git a/YLErpDAL/Modules/RiskEngine/RiskEngineService.cs b/YLErpDAL/Modules/RiskEngine/RiskEngineService.cs index 2e0e68a8..3d040b9f 100644 --- a/YLErpDAL/Modules/RiskEngine/RiskEngineService.cs +++ b/YLErpDAL/Modules/RiskEngine/RiskEngineService.cs @@ -157,7 +157,7 @@ namespace YLErp.Modules.RiskEngine var rules = LoadRulesFromDb(); var applications = LoadApplicationsFromDb(); - List res = new List(); + List res = new List(); foreach(var i in applications) { if(i.Status!= RiskRuleStatus.Active) diff --git a/YLErpDAL/Modules/RiskEngine/RiskRule.cs b/YLErpDAL/Modules/RiskEngine/RiskRule.cs index bc6c6910..5558c2b4 100644 --- a/YLErpDAL/Modules/RiskEngine/RiskRule.cs +++ b/YLErpDAL/Modules/RiskEngine/RiskRule.cs @@ -10,7 +10,7 @@ namespace YLErp.Modules.RiskEngine public class RiskRule { // === 基础信息 === - public long Id { get; set; } + public int Id { get; set; } public string RuleName { get; set; } public string RuleText { get; set; } diff --git a/YLErpDAL/Modules/RiskEngine/RiskRuleApplication.cs b/YLErpDAL/Modules/RiskEngine/RiskRuleApplication.cs index 68219350..9e186dbf 100644 --- a/YLErpDAL/Modules/RiskEngine/RiskRuleApplication.cs +++ b/YLErpDAL/Modules/RiskEngine/RiskRuleApplication.cs @@ -25,7 +25,7 @@ namespace YLErp.Modules.RiskEngine /// 应用配置主键ID。 /// 用于唯一标识一条规则应用记录。 /// - public long Id { get; set; } + public int Id { get; set; } /// /// 关联的规则ID列表。 diff --git a/YLErpDAL/Modules/RiskEngine/RiskRuleService.cs b/YLErpDAL/Modules/RiskEngine/RiskRuleService.cs index 7e79f074..d8f1316f 100644 --- a/YLErpDAL/Modules/RiskEngine/RiskRuleService.cs +++ b/YLErpDAL/Modules/RiskEngine/RiskRuleService.cs @@ -534,41 +534,6 @@ namespace YLErp.Modules.RiskEngine return string.Join(", ", names); } - /// - /// 构建 Scope 字段的 OR 过滤谓词(逗号分隔值精确匹配) - /// - private static IQueryable ApplyScopeFilter( - IQueryable query, - Expression> fieldSelector, - string csvValues) - { - var ids = csvValues.Split(',', StringSplitOptions.RemoveEmptyEntries); - if (ids.Length == 0) - return query; - - Expression> predicate = null; - var param = fieldSelector.Parameters[0]; - var member = fieldSelector.Body; - - foreach (var trimmed in ids.Select(id => id.Trim())) - { - var eq = Expression.Equal(member, Expression.Constant(trimmed)); - var startsExpr = Expression.Call(member, nameof(string.StartsWith), null, - Expression.Constant(trimmed + ",")); - var endsExpr = Expression.Call(member, nameof(string.EndsWith), null, - Expression.Constant("," + trimmed)); - var containsExpr = Expression.Call(member, nameof(string.Contains), null, - Expression.Constant("," + trimmed + ",")); - - var orExpr = Expression.OrElse(Expression.OrElse(eq, startsExpr), - Expression.OrElse(endsExpr, containsExpr)); - var lambda = Expression.Lambda>(orExpr, param); - predicate = predicate == null ? lambda : predicate.Or(lambda); - } - - return predicate != null ? query.Where(predicate) : query; - } - private static string GetStrategyName(RiskControlStrategy strategy) { return strategy switch @@ -965,16 +930,76 @@ namespace YLErp.Modules.RiskEngine } if (!string.IsNullOrWhiteSpace(req.ScopeClientIds)) - query = ApplyScopeFilter(query, a => a.ScopeClientIds, req.ScopeClientIds); + { + var ids = req.ScopeClientIds.Split(',', StringSplitOptions.RemoveEmptyEntries); + Expression> scopePredicate = null; + foreach (var id in ids) + { + var idCopy = id; + Expression> expr = a => + a.ScopeClientIds == idCopy || + a.ScopeClientIds.StartsWith(idCopy + ",") || + a.ScopeClientIds.EndsWith("," + idCopy) || + a.ScopeClientIds.Contains("," + idCopy + ","); + scopePredicate = scopePredicate == null ? expr : scopePredicate.Or(expr); + } + if (scopePredicate != null) + query = query.Where(scopePredicate); + } if (!string.IsNullOrWhiteSpace(req.ScopeUnderlyingTypes)) - query = ApplyScopeFilter(query, a => a.ScopeUnderlyingTypes, req.ScopeUnderlyingTypes); + { + var types = req.ScopeUnderlyingTypes.Split(',', StringSplitOptions.RemoveEmptyEntries); + Expression> scopePredicate = null; + foreach (var type in types) + { + var typeCopy = type; + Expression> expr = a => + a.ScopeUnderlyingTypes == typeCopy || + a.ScopeUnderlyingTypes.StartsWith(typeCopy + ",") || + a.ScopeUnderlyingTypes.EndsWith("," + typeCopy) || + a.ScopeUnderlyingTypes.Contains("," + typeCopy + ","); + scopePredicate = scopePredicate == null ? expr : scopePredicate.Or(expr); + } + if (scopePredicate != null) + query = query.Where(scopePredicate); + } if (!string.IsNullOrWhiteSpace(req.ScopeTradeTypes)) - query = ApplyScopeFilter(query, a => a.ScopeTradeTypes, req.ScopeTradeTypes); + { + var types = req.ScopeTradeTypes.Split(',', StringSplitOptions.RemoveEmptyEntries); + Expression> scopePredicate = null; + foreach (var type in types) + { + var typeCopy = type; + Expression> expr = a => + a.ScopeTradeTypes == typeCopy || + a.ScopeTradeTypes.StartsWith(typeCopy + ",") || + a.ScopeTradeTypes.EndsWith("," + typeCopy) || + a.ScopeTradeTypes.Contains("," + typeCopy + ","); + scopePredicate = scopePredicate == null ? expr : scopePredicate.Or(expr); + } + if (scopePredicate != null) + query = query.Where(scopePredicate); + } if (!string.IsNullOrWhiteSpace(req.ScopeAssetBookIds)) - query = ApplyScopeFilter(query, a => a.ScopeAssetBookIds, req.ScopeAssetBookIds); + { + var ids = req.ScopeAssetBookIds.Split(',', StringSplitOptions.RemoveEmptyEntries); + Expression> scopePredicate = null; + foreach (var id in ids) + { + var idCopy = id; + Expression> expr = a => + a.ScopeAssetBookIds == idCopy || + a.ScopeAssetBookIds.StartsWith(idCopy + ",") || + a.ScopeAssetBookIds.EndsWith("," + idCopy) || + a.ScopeAssetBookIds.Contains("," + idCopy + ","); + scopePredicate = scopePredicate == null ? expr : scopePredicate.Or(expr); + } + if (scopePredicate != null) + query = query.Where(scopePredicate); + } var pagedResult = query.OrderByDescending(a => a.UpdateDate) .Select(a => new RiskApplicationListItem