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:
ruisu
2026-07-09 18:08:40 +08:00
30 changed files with 544 additions and 3 deletions
@@ -2,17 +2,29 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace YLErp.DBModels
{
/// <summary>
/// 风控规则定义表
/// </summary>
[Table("glms_risk_rule")]
public class glms_risk_rule : DBModelWithOperator
{
/// <summary>规则名称</summary>
public string RuleName { get; set; }
/// <summary>规则描述文本</summary>
public string RuleText { get; set; }
/// <summary>结构化条件 JSON(变量+操作符+阈值列表)</summary>
public string ConditionJson { get; set; }
/// <summary>规则执行表达式(C# 布尔表达式,引擎用 Roslyn 编译执行)</summary>
public string RuleExpr { get; set; }
/// <summary>规则状态</summary>
public RiskRuleStatus Status { get; set; } = RiskRuleStatus.Active;
/// <summary>版本号(乐观锁)</summary>
public int Version { get; set; } = 1;
/// <summary>最后更新人工号</summary>
public int? UpdateOptId { get; set; }
/// <summary>最后更新人姓名</summary>
public string UpdateOptName { get; set; }
/// <summary>最后更新时间</summary>
public DateTime? UpdateDate { get; set; }
}
}
@@ -2,21 +2,37 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace YLErp.DBModels
{
/// <summary>
/// 风控规则应用配置表
/// </summary>
[Table("glms_risk_rule_application")]
public class glms_risk_rule_application : DBModelWithOperator
{
/// <summary>关联规则 ID 列表(JSON 数组)</summary>
public string RuleIds { get; set; }
/// <summary>应用配置状态</summary>
public RiskRuleStatus Status { get; set; } = RiskRuleStatus.Active;
/// <summary>风控策略(预警/阻断)</summary>
public RiskControlStrategy ControlStrategy { get; set; }
/// <summary>触发点列表(JSON 数组)</summary>
public string TriggerPoints { get; set; }
/// <summary>适用范围-资产账簿 ID 列表(JSON 数组)</summary>
public string ScopeAssetBookIds { get; set; }
/// <summary>适用范围-客户 ID 列表(JSON 数组)</summary>
public string ScopeClientIds { get; set; }
/// <summary>适用范围-标的类型列表(JSON 数组)</summary>
public string ScopeUnderlyingTypes { get; set; }
/// <summary>适用范围-交易类型列表(JSON 数组)</summary>
public string ScopeTradeTypes { get; set; }
/// <summary>是否全局生效(0:否 1:是)</summary>
public int ScopeIsGlobal { get; set; }
/// <summary>版本号(乐观锁)</summary>
public int Version { get; set; } = 1;
/// <summary>最后更新人工号</summary>
public int? UpdateOptId { get; set; }
/// <summary>最后更新人姓名</summary>
public string UpdateOptName { get; set; }
/// <summary>最后更新时间</summary>
public DateTime? UpdateDate { get; set; }
}
}
@@ -2,18 +2,31 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace YLErp.DBModels
{
/// <summary>
/// 风控操作审计日志表
/// </summary>
[Table("glms_risk_rule_audit_log")]
public class glms_risk_rule_audit_log : DBModelBase
{
/// <summary>操作类型(创建/更新/删除/启用/禁用)</summary>
public string OperationType { get; set; }
/// <summary>操作目标类型(Rule/Variable/Application</summary>
public string TargetType { get; set; }
/// <summary>操作目标 ID</summary>
public long TargetId { get; set; }
/// <summary>操作目标名称</summary>
public string TargetName { get; set; }
/// <summary>操作详情描述</summary>
public string OperationDetail { get; set; }
/// <summary>操作结果(成功/失败)</summary>
public string Result { get; set; }
/// <summary>操作前数据快照(JSON</summary>
public string SnapshotData { get; set; }
/// <summary>操作人工号</summary>
public long OptId { get; set; }
/// <summary>操作人姓名</summary>
public string OptName { get; set; }
/// <summary>操作时间</summary>
public DateTime OptDate { get; set; }
}
}
@@ -2,20 +2,35 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace YLErp.DBModels
{
/// <summary>
/// 风控变量池定义表
/// </summary>
[Table("glms_risk_variable")]
public class glms_risk_variable : DBModelWithOperator
{
/// <summary>变量名称</summary>
public string VariableName { get; set; }
/// <summary>变量分类</summary>
public RiskVariableCategory Category { get; set; }
/// <summary>数据类型</summary>
public RiskVariableDataType DataType { get; set; }
/// <summary>单位</summary>
public string Unit { get; set; }
/// <summary>值域描述</summary>
public string ValueDomain { get; set; }
/// <summary>变量说明</summary>
public string Description { get; set; }
/// <summary>取值表达式(C# 表达式,用于计算变量值)</summary>
public string VariableExpr { get; set; }
/// <summary>版本号(乐观锁)</summary>
public int Version { get; set; } = 1;
/// <summary>排序序号</summary>
public int SortOrder { get; set; }
/// <summary>最后更新人工号</summary>
public int? UpdateOptId { get; set; }
/// <summary>最后更新人姓名</summary>
public string UpdateOptName { get; set; }
/// <summary>最后更新时间</summary>
public DateTime? UpdateDate { get; set; }
}
}
@@ -1,10 +1,17 @@
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 批量操作结果
/// </summary>
public class BatchOperationResult
{
/// <summary>是否全部成功</summary>
public bool Success { get; set; }
/// <summary>总数量</summary>
public int TotalCount { get; set; }
/// <summary>成功数量</summary>
public int SuccessCount { get; set; }
/// <summary>错误信息</summary>
public string ErrorMessage { get; set; }
}
}
@@ -2,15 +2,26 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 创建应用配置请求
/// </summary>
public class CreateRiskApplicationReq
{
/// <summary>关联规则 ID 列表(JSON 数组)</summary>
public string RuleIds { get; set; }
/// <summary>风控策略</summary>
public RiskControlStrategy ControlStrategy { get; set; }
/// <summary>触发点列表(JSON 数组)</summary>
public string TriggerPoints { get; set; }
/// <summary>适用范围-资产账簿 ID 列表</summary>
public string ScopeAssetBookIds { get; set; }
/// <summary>适用范围-客户 ID 列表</summary>
public string ScopeClientIds { get; set; }
/// <summary>适用范围-标的类型列表</summary>
public string ScopeUnderlyingTypes { get; set; }
/// <summary>适用范围-交易类型列表</summary>
public string ScopeTradeTypes { get; set; }
/// <summary>是否全局生效</summary>
public int ScopeIsGlobal { get; set; }
}
}
@@ -1,10 +1,17 @@
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 创建风控规则请求
/// </summary>
public class CreateRiskRuleReq
{
/// <summary>规则名称</summary>
public string RuleName { get; set; }
/// <summary>规则描述文本</summary>
public string RuleText { get; set; }
/// <summary>结构化条件 JSON</summary>
public string ConditionJson { get; set; }
/// <summary>规则执行表达式</summary>
public string RuleExpr { get; set; }
}
}
@@ -2,15 +2,26 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 创建变量请求
/// </summary>
public class CreateRiskVariableReq
{
/// <summary>变量名称</summary>
public string VariableName { get; set; }
/// <summary>变量分类</summary>
public RiskVariableCategory Category { get; set; }
/// <summary>数据类型</summary>
public RiskVariableDataType DataType { get; set; }
/// <summary>单位</summary>
public string Unit { get; set; }
/// <summary>值域描述</summary>
public string ValueDomain { get; set; }
/// <summary>变量说明</summary>
public string Description { get; set; }
/// <summary>取值表达式</summary>
public string VariableExpr { get; set; }
/// <summary>排序序号</summary>
public int SortOrder { get; set; }
}
}
@@ -3,15 +3,26 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 查询应用配置请求
/// </summary>
public class QueryRiskApplicationReq : BaseSearchReq
{
/// <summary>规则名称</summary>
public string RuleName { get; set; }
/// <summary>应用配置状态</summary>
public RiskRuleStatus? Status { get; set; }
/// <summary>风控策略</summary>
public RiskControlStrategy? Strategy { get; set; }
/// <summary>触发点</summary>
public string TriggerPoint { get; set; }
/// <summary>适用范围-客户 ID 列表</summary>
public string ScopeClientIds { get; set; }
/// <summary>适用范围-标的类型列表</summary>
public string ScopeUnderlyingTypes { get; set; }
/// <summary>适用范围-交易类型列表</summary>
public string ScopeTradeTypes { get; set; }
/// <summary>适用范围-资产账簿 ID 列表</summary>
public string ScopeAssetBookIds { get; set; }
}
}
@@ -3,15 +3,26 @@ using BaseOUDAL;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 查询审计日志请求
/// </summary>
public class QueryRiskAuditLogReq : BaseSearchReq
{
/// <summary>操作类型</summary>
public string OperationType { get; set; }
/// <summary>操作类型列表(多选,逗号分隔)</summary>
public string OperationTypes { get; set; }
/// <summary>操作目标类型</summary>
public string TargetType { get; set; }
/// <summary>操作目标名称</summary>
public string TargetName { get; set; }
/// <summary>操作人姓名</summary>
public string OptName { get; set; }
/// <summary>开始日期</summary>
public DateTime? StartDate { get; set; }
/// <summary>结束日期</summary>
public DateTime? EndDate { get; set; }
/// <summary>搜索关键词</summary>
public string Keyword { get; set; }
}
}
@@ -3,10 +3,16 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 查询风控规则请求
/// </summary>
public class QueryRiskRuleReq : BaseSearchReq
{
/// <summary>搜索关键词</summary>
public string Keyword { get; set; }
/// <summary>规则状态</summary>
public RiskRuleStatus? Status { get; set; }
/// <summary>关联变量 ID</summary>
public long? VariableId { get; set; }
}
}
@@ -3,10 +3,16 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 查询变量请求
/// </summary>
public class QueryRiskVariableReq : BaseSearchReq
{
/// <summary>变量分类</summary>
public RiskVariableCategory? Category { get; set; }
/// <summary>数据类型</summary>
public RiskVariableDataType? DataType { get; set; }
/// <summary>变量名称</summary>
public string VariableName { get; set; }
}
}
@@ -3,22 +3,40 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 应用配置详情响应
/// </summary>
public class RiskApplicationDetail
{
/// <summary>应用配置 ID</summary>
public long Id { get; set; }
/// <summary>关联规则 ID 列表(JSON 数组)</summary>
public string RuleIds { get; set; }
/// <summary>应用配置状态</summary>
public RiskRuleStatus Status { get; set; }
/// <summary>风控策略</summary>
public RiskControlStrategy ControlStrategy { get; set; }
/// <summary>触发点列表(JSON 数组)</summary>
public string TriggerPoints { get; set; }
/// <summary>适用范围-资产账簿 ID 列表</summary>
public string ScopeAssetBookIds { get; set; }
/// <summary>适用范围-客户 ID 列表</summary>
public string ScopeClientIds { get; set; }
/// <summary>适用范围-标的类型列表</summary>
public string ScopeUnderlyingTypes { get; set; }
/// <summary>适用范围-交易类型列表</summary>
public string ScopeTradeTypes { get; set; }
/// <summary>是否全局生效</summary>
public int ScopeIsGlobal { get; set; }
/// <summary>版本号</summary>
public int Version { get; set; }
/// <summary>创建人姓名</summary>
public string OptName { get; set; }
/// <summary>创建时间</summary>
public DateTime OptDate { get; set; }
/// <summary>最后更新人姓名</summary>
public string UpdateOptName { get; set; }
/// <summary>最后更新时间</summary>
public DateTime UpdateDate { get; set; }
}
}
@@ -3,22 +3,40 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 应用配置列表项
/// </summary>
public class RiskApplicationListItem
{
/// <summary>应用配置 ID</summary>
public long Id { get; set; }
/// <summary>关联规则 ID 列表(JSON 数组)</summary>
public string RuleIds { get; set; }
/// <summary>应用配置状态</summary>
public int Status { get; set; }
/// <summary>风控策略</summary>
public RiskControlStrategy ControlStrategy { get; set; }
/// <summary>触发点列表(JSON 数组)</summary>
public string TriggerPoints { get; set; }
/// <summary>适用范围-资产账簿 ID 列表</summary>
public string ScopeAssetBookIds { get; set; }
/// <summary>适用范围-客户 ID 列表</summary>
public string ScopeClientIds { get; set; }
/// <summary>适用范围-标的类型列表</summary>
public string ScopeUnderlyingTypes { get; set; }
/// <summary>适用范围-交易类型列表</summary>
public string ScopeTradeTypes { get; set; }
/// <summary>是否全局生效</summary>
public int ScopeIsGlobal { get; set; }
/// <summary>版本号</summary>
public int Version { get; set; }
/// <summary>创建人姓名</summary>
public string OptName { get; set; }
/// <summary>创建时间</summary>
public DateTime OptDate { get; set; }
/// <summary>最后更新人姓名</summary>
public string UpdateOptName { get; set; }
/// <summary>最后更新时间</summary>
public DateTime UpdateDate { get; set; }
}
}
@@ -2,18 +2,32 @@ using System;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 审计日志详情响应
/// </summary>
public class RiskAuditLogDetail
{
/// <summary>日志 ID</summary>
public long Id { get; set; }
/// <summary>操作类型</summary>
public string OperationType { get; set; }
/// <summary>操作目标类型</summary>
public string TargetType { get; set; }
/// <summary>操作目标 ID</summary>
public long TargetId { get; set; }
/// <summary>操作目标名称</summary>
public string TargetName { get; set; }
/// <summary>操作详情描述</summary>
public string OperationDetail { get; set; }
/// <summary>操作结果</summary>
public string Result { get; set; }
/// <summary>操作前数据快照(JSON</summary>
public string SnapshotData { get; set; }
/// <summary>操作人工号</summary>
public long OptId { get; set; }
/// <summary>操作人姓名</summary>
public string OptName { get; set; }
/// <summary>操作时间</summary>
public DateTime OptDate { get; set; }
}
}
@@ -2,16 +2,28 @@ using System;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 审计日志列表项
/// </summary>
public class RiskAuditLogListItem
{
/// <summary>日志 ID</summary>
public long Id { get; set; }
/// <summary>操作类型</summary>
public string OperationType { get; set; }
/// <summary>操作目标类型</summary>
public string TargetType { get; set; }
/// <summary>操作目标 ID</summary>
public long TargetId { get; set; }
/// <summary>操作目标名称</summary>
public string TargetName { get; set; }
/// <summary>操作详情描述</summary>
public string OperationDetail { get; set; }
/// <summary>操作结果</summary>
public string Result { get; set; }
/// <summary>操作人姓名</summary>
public string OptName { get; set; }
/// <summary>操作时间</summary>
public DateTime OptDate { get; set; }
}
}
@@ -2,11 +2,18 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 规则关联应用摘要
/// </summary>
public class RiskRuleApplicationSummary
{
/// <summary>应用配置 ID</summary>
public long Id { get; set; }
/// <summary>应用配置状态</summary>
public RiskRuleStatus Status { get; set; }
/// <summary>风控策略</summary>
public RiskControlStrategy ControlStrategy { get; set; }
/// <summary>触发点列表</summary>
public string TriggerPoints { get; set; }
}
}
@@ -4,19 +4,34 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 风控规则详情响应
/// </summary>
public class RiskRuleDetail
{
/// <summary>规则 ID</summary>
public long Id { get; set; }
/// <summary>规则名称</summary>
public string RuleName { get; set; }
/// <summary>规则描述文本</summary>
public string RuleText { get; set; }
/// <summary>结构化条件 JSON</summary>
public string ConditionJson { get; set; }
/// <summary>规则执行表达式</summary>
public string RuleExpr { get; set; }
/// <summary>规则状态</summary>
public RiskRuleStatus Status { get; set; }
/// <summary>版本号</summary>
public int Version { get; set; }
/// <summary>创建人姓名</summary>
public string OptName { get; set; }
/// <summary>创建时间</summary>
public DateTime OptDate { get; set; }
/// <summary>最后更新人姓名</summary>
public string UpdateOptName { get; set; }
/// <summary>最后更新时间</summary>
public DateTime UpdateDate { get; set; }
/// <summary>关联应用列表</summary>
public List<RiskRuleApplicationSummary> Applications { get; set; }
}
}
@@ -3,19 +3,34 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 风控规则列表项
/// </summary>
public class RiskRuleListItem
{
/// <summary>规则 ID</summary>
public long Id { get; set; }
/// <summary>规则名称</summary>
public string RuleName { get; set; }
/// <summary>规则描述文本</summary>
public string RuleText { get; set; }
/// <summary>结构化条件 JSON</summary>
public string ConditionJson { get; set; }
/// <summary>规则执行表达式</summary>
public string RuleExpr { get; set; }
/// <summary>规则状态</summary>
public RiskRuleStatus Status { get; set; }
/// <summary>版本号</summary>
public int Version { get; set; }
/// <summary>创建人姓名</summary>
public string OptName { get; set; }
/// <summary>创建时间</summary>
public DateTime OptDate { get; set; }
/// <summary>最后更新人姓名</summary>
public string UpdateOptName { get; set; }
/// <summary>最后更新时间</summary>
public DateTime UpdateDate { get; set; }
/// <summary>关联应用数量</summary>
public int ApplicationCount { get; set; }
}
}
@@ -1,9 +1,15 @@
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 风控规则简要信息
/// </summary>
public class RiskRuleSimpleItem
{
/// <summary>规则 ID</summary>
public long Id { get; set; }
/// <summary>规则名称</summary>
public string RuleName { get; set; }
/// <summary>规则描述文本</summary>
public string RuleText { get; set; }
}
}
@@ -2,12 +2,20 @@ using System;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 风控规则版本历史项
/// </summary>
public class RiskRuleVersionItem
{
/// <summary>版本号</summary>
public int Version { get; set; }
/// <summary>操作类型</summary>
public string OperationType { get; set; }
/// <summary>操作详情</summary>
public string OperationDetail { get; set; }
/// <summary>操作人姓名</summary>
public string OptName { get; set; }
/// <summary>操作时间</summary>
public DateTime OptDate { get; set; }
}
}
@@ -3,22 +3,40 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 变量详情响应
/// </summary>
public class RiskVariableDetail
{
/// <summary>变量 ID</summary>
public long Id { get; set; }
/// <summary>变量名称</summary>
public string VariableName { get; set; }
/// <summary>变量分类</summary>
public RiskVariableCategory Category { get; set; }
/// <summary>数据类型</summary>
public RiskVariableDataType DataType { get; set; }
/// <summary>单位</summary>
public string Unit { get; set; }
/// <summary>值域描述</summary>
public string ValueDomain { get; set; }
/// <summary>变量说明</summary>
public string Description { get; set; }
/// <summary>取值表达式</summary>
public string VariableExpr { get; set; }
/// <summary>版本号</summary>
public int Version { get; set; }
/// <summary>排序序号</summary>
public int SortOrder { get; set; }
/// <summary>创建人姓名</summary>
public string OptName { get; set; }
/// <summary>创建时间</summary>
public DateTime OptDate { get; set; }
/// <summary>最后更新人姓名</summary>
public string UpdateOptName { get; set; }
/// <summary>最后更新时间</summary>
public DateTime UpdateDate { get; set; }
/// <summary>被引用次数</summary>
public int ReferenceCount { get; set; }
}
}
@@ -2,17 +2,30 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 变量列表项
/// </summary>
public class RiskVariableListItem
{
/// <summary>变量 ID</summary>
public long Id { get; set; }
/// <summary>变量名称</summary>
public string VariableName { get; set; }
/// <summary>变量分类</summary>
public RiskVariableCategory Category { get; set; }
/// <summary>数据类型</summary>
public RiskVariableDataType DataType { get; set; }
/// <summary>单位</summary>
public string Unit { get; set; }
/// <summary>值域描述</summary>
public string ValueDomain { get; set; }
/// <summary>变量说明</summary>
public string Description { get; set; }
/// <summary>取值表达式</summary>
public string VariableExpr { get; set; }
/// <summary>版本号</summary>
public int Version { get; set; }
/// <summary>排序序号</summary>
public int SortOrder { get; set; }
}
}
@@ -2,13 +2,22 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 变量简要信息
/// </summary>
public class RiskVariableSimpleItem
{
/// <summary>变量 ID</summary>
public long Id { get; set; }
/// <summary>变量名称</summary>
public string VariableName { get; set; }
/// <summary>变量分类</summary>
public RiskVariableCategory Category { get; set; }
/// <summary>数据类型</summary>
public RiskVariableDataType DataType { get; set; }
/// <summary>单位</summary>
public string Unit { get; set; }
/// <summary>取值表达式</summary>
public string VariableExpr { get; set; }
}
}
@@ -1,14 +1,23 @@
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 规则条件项
/// </summary>
public class RuleCondition
{
/// <summary>条件变量 ID</summary>
public long VariableId { get; set; }
/// <summary>操作符(如 Equal、GreaterThan、Between 等)</summary>
public string Operator { get; set; }
/// <summary>阈值类型(FixedValue / VariableRef</summary>
public string ThresholdType { get; set; }
/// <summary>阈值(固定值或变量引用)</summary>
public object Value { get; set; }
/// <summary>阈值变量 ID(当 ThresholdType 为 VariableRef 时)</summary>
public long? ThresholdVariableId { get; set; }
// 介于/不介于 的边界包含控制,默认 true
/// <summary>介于/不介于的下边界是否包含,默认 true</summary>
public bool IncludeLowerBound { get; set; } = true;
/// <summary>介于/不介于的上边界是否包含,默认 true</summary>
public bool IncludeUpperBound { get; set; } = true;
}
}
@@ -2,16 +2,28 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 更新应用配置请求
/// </summary>
public class UpdateRiskApplicationReq
{
/// <summary>关联规则 ID 列表(JSON 数组)</summary>
public string RuleIds { get; set; }
/// <summary>风控策略</summary>
public RiskControlStrategy ControlStrategy { get; set; }
/// <summary>触发点列表(JSON 数组)</summary>
public string TriggerPoints { get; set; }
/// <summary>适用范围-资产账簿 ID 列表</summary>
public string ScopeAssetBookIds { get; set; }
/// <summary>适用范围-客户 ID 列表</summary>
public string ScopeClientIds { get; set; }
/// <summary>适用范围-标的类型列表</summary>
public string ScopeUnderlyingTypes { get; set; }
/// <summary>适用范围-交易类型列表</summary>
public string ScopeTradeTypes { get; set; }
/// <summary>是否全局生效</summary>
public int ScopeIsGlobal { get; set; }
/// <summary>版本号(乐观锁)</summary>
public int Version { get; set; }
}
}
@@ -1,11 +1,19 @@
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 更新风控规则请求
/// </summary>
public class UpdateRiskRuleReq
{
/// <summary>规则名称</summary>
public string RuleName { get; set; }
/// <summary>规则描述文本</summary>
public string RuleText { get; set; }
/// <summary>结构化条件 JSON</summary>
public string ConditionJson { get; set; }
/// <summary>规则执行表达式</summary>
public string RuleExpr { get; set; }
/// <summary>版本号(乐观锁)</summary>
public int Version { get; set; }
}
}
@@ -2,16 +2,28 @@ using YLErp.DBModels;
namespace YLErp.Modules.RiskEngine.Dto
{
/// <summary>
/// 更新变量请求
/// </summary>
public class UpdateRiskVariableReq
{
/// <summary>变量名称</summary>
public string VariableName { get; set; }
/// <summary>变量分类</summary>
public RiskVariableCategory Category { get; set; }
/// <summary>数据类型</summary>
public RiskVariableDataType DataType { get; set; }
/// <summary>单位</summary>
public string Unit { get; set; }
/// <summary>值域描述</summary>
public string ValueDomain { get; set; }
/// <summary>变量说明</summary>
public string Description { get; set; }
/// <summary>取值表达式</summary>
public string VariableExpr { get; set; }
/// <summary>排序序号</summary>
public int SortOrder { get; set; }
/// <summary>版本号(乐观锁)</summary>
public int Version { get; set; }
}
}
+192 -2
View File
@@ -221,6 +221,9 @@ namespace YLErp.Modules.RiskEngine
#region Private Helpers
/// <summary>
/// 写入审计日志
/// </summary>
private void WriteAuditLog(string operationType, string targetType, long targetId,
string targetName, string operationDetail, string result = "成功", string snapshotData = null)
{
@@ -240,6 +243,9 @@ namespace YLErp.Modules.RiskEngine
DbContext.glms_risk_rule_audit_log.Add(log);
}
/// <summary>
/// 获取变量表达式集合(5 分钟本地缓存)
/// </summary>
private HashSet<string> GetVariableExprSet()
{
if (_variableExprCache == null ||
@@ -254,11 +260,17 @@ namespace YLErp.Modules.RiskEngine
return _variableExprCache;
}
/// <summary>
/// 失效变量表达式缓存
/// </summary>
private void InvalidateVariableCache()
{
_variableExprCache = null;
}
/// <summary>
/// 校验 ConditionJson(结构化模式:变量存在性、操作符、类型匹配)
/// </summary>
private void ValidateConditionJson(string conditionJson)
{
List<RuleCondition> conditions;
@@ -341,6 +353,9 @@ namespace YLErp.Modules.RiskEngine
}
}
/// <summary>
/// 校验 RuleExpr(自由文本模式:括号匹配)
/// </summary>
private void ValidateRuleExpr(string ruleExpr)
{
if (ruleExpr.Length > 10000)
@@ -358,6 +373,9 @@ namespace YLErp.Modules.RiskEngine
throw new ServiceException("公式表达式括号不匹配:缺少右括号");
}
/// <summary>
/// 校验触发时点
/// </summary>
private void ValidateTriggerPoints(string triggerPoints)
{
if (string.IsNullOrWhiteSpace(triggerPoints))
@@ -375,6 +393,9 @@ namespace YLErp.Modules.RiskEngine
throw new ServiceException("至少需要指定一个触发时点");
}
/// <summary>
/// 校验 Scope 适用范围字段
/// </summary>
private void ValidateScopeFields(CreateRiskApplicationReq req)
{
if (req.ScopeIsGlobal == 1)
@@ -400,6 +421,9 @@ namespace YLErp.Modules.RiskEngine
}
}
/// <summary>
/// 校验 ID 列表格式
/// </summary>
private void ValidateIdList(string idList, string fieldName)
{
var parts = idList.Split(',');
@@ -410,6 +434,9 @@ namespace YLErp.Modules.RiskEngine
}
}
/// <summary>
/// 尝试刷新引擎缓存(不抛异常)
/// </summary>
private void TryRefreshCache()
{
try
@@ -422,6 +449,9 @@ namespace YLErp.Modules.RiskEngine
}
}
/// <summary>
/// 获取数据类型中文名
/// </summary>
private string GetDataTypeName(RiskVariableDataType dataType)
{
return dataType switch
@@ -433,6 +463,9 @@ namespace YLErp.Modules.RiskEngine
};
}
/// <summary>
/// 获取规则实体,不存在则抛异常
/// </summary>
private glms_risk_rule GetRuleOrThrow(long ruleId)
{
var rule = DbContext.glms_risk_rule.FirstOrDefault(r => r.id == ruleId && r.Status != RiskRuleStatus.Deleted);
@@ -441,6 +474,9 @@ namespace YLErp.Modules.RiskEngine
return rule;
}
/// <summary>
/// 获取应用配置实体,不存在则抛异常
/// </summary>
private glms_risk_rule_application GetApplicationOrThrow(long applicationId)
{
var app = DbContext.glms_risk_rule_application.FirstOrDefault(a => a.id == applicationId && a.Status != RiskRuleStatus.Deleted);
@@ -449,6 +485,9 @@ namespace YLErp.Modules.RiskEngine
return app;
}
/// <summary>
/// 获取变量实体,不存在则抛异常
/// </summary>
private glms_risk_variable GetVariableOrThrow(long variableId)
{
var variable = DbContext.glms_risk_variable.FirstOrDefault(v => v.id == variableId);
@@ -457,6 +496,9 @@ namespace YLErp.Modules.RiskEngine
return variable;
}
/// <summary>
/// 校验规则参数(名称 + ConditionJson + RuleExpr
/// </summary>
private void ValidateRuleParams(string ruleName, string conditionJson, string ruleExpr)
{
if (string.IsNullOrWhiteSpace(ruleName))
@@ -475,6 +517,9 @@ namespace YLErp.Modules.RiskEngine
ValidateRuleExpr(ruleExpr);
}
/// <summary>
/// 解析逗号分隔的规则 ID 字符串为 List
/// </summary>
private List<long> ParseRuleIds(string ruleIds)
{
if (string.IsNullOrWhiteSpace(ruleIds))
@@ -495,6 +540,9 @@ namespace YLErp.Modules.RiskEngine
return ids;
}
/// <summary>
/// 校验规则 ID 列表是否全部 Active
/// </summary>
private void ValidateRuleIdsActive(string ruleIds)
{
var ids = ParseRuleIds(ruleIds);
@@ -512,6 +560,9 @@ namespace YLErp.Modules.RiskEngine
}
}
/// <summary>
/// 根据规则 ID 字符串解析为规则名称字符串
/// </summary>
private string ResolveRuleNames(string ruleIds)
{
if (string.IsNullOrWhiteSpace(ruleIds))
@@ -569,6 +620,9 @@ namespace YLErp.Modules.RiskEngine
return predicate != null ? query.Where(predicate) : query;
}
/// <summary>
/// 获取控制策略中文名
/// </summary>
private static string GetStrategyName(RiskControlStrategy strategy)
{
return strategy switch
@@ -589,6 +643,9 @@ namespace YLErp.Modules.RiskEngine
["FUND_PAYMENT"] = "资金支付"
};
/// <summary>
/// 将触发时点映射为中文
/// </summary>
private static string MapTriggerPointsToChinese(string triggerPoints)
{
if (string.IsNullOrWhiteSpace(triggerPoints))
@@ -603,6 +660,9 @@ namespace YLErp.Modules.RiskEngine
#region Rule Management
/// <summary>
/// 查询规则列表(分页,含 ApplicationCount 子查询)
/// </summary>
public SearchListResult<RiskRuleListItem> QueryRuleList(QueryRiskRuleReq req)
{
var query = DbContext.glms_risk_rule
@@ -646,6 +706,9 @@ namespace YLErp.Modules.RiskEngine
return result.ToSearchList(req);
}
/// <summary>
/// 获取规则详情(含关联应用摘要)
/// </summary>
public RiskRuleDetail GetRuleDetail(long ruleId)
{
var rule = GetRuleOrThrow(ruleId);
@@ -679,6 +742,9 @@ namespace YLErp.Modules.RiskEngine
};
}
/// <summary>
/// 创建规则(ConditionJson 完整校验,事务包裹)
/// </summary>
public RiskRuleDetail CreateRule(CreateRiskRuleReq req)
{
ValidateRuleParams(req.RuleName, req.ConditionJson, req.RuleExpr);
@@ -723,6 +789,9 @@ namespace YLErp.Modules.RiskEngine
return GetRuleDetail(entity.id);
}
/// <summary>
/// 更新规则(乐观锁校验,Version+1)
/// </summary>
public RiskRuleDetail UpdateRule(long ruleId, UpdateRiskRuleReq req)
{
var rule = GetRuleOrThrow(ruleId);
@@ -749,6 +818,9 @@ namespace YLErp.Modules.RiskEngine
return GetRuleDetail(ruleId);
}
/// <summary>
/// 删除规则(软删除,有 Active 应用引用时拒绝)
/// </summary>
public void DeleteRule(long ruleId)
{
var rule = GetRuleOrThrow(ruleId);
@@ -771,6 +843,9 @@ namespace YLErp.Modules.RiskEngine
TryRefreshCache();
}
/// <summary>
/// 启用规则(仅 Disabled → Active
/// </summary>
public void EnableRule(long ruleId)
{
var rule = DbContext.glms_risk_rule.FirstOrDefault(r => r.id == ruleId && r.Status == RiskRuleStatus.Disabled);
@@ -788,6 +863,9 @@ namespace YLErp.Modules.RiskEngine
TryRefreshCache();
}
/// <summary>
/// 停用规则(仅 Active → Disabled
/// </summary>
public void DisableRule(long ruleId)
{
var rule = DbContext.glms_risk_rule.FirstOrDefault(r => r.id == ruleId && r.Status == RiskRuleStatus.Active);
@@ -805,6 +883,9 @@ namespace YLErp.Modules.RiskEngine
TryRefreshCache();
}
/// <summary>
/// 获取规则版本历史(从审计日志 SnapshotData 提取)
/// </summary>
public List<RiskRuleVersionItem> GetRuleVersions(long ruleId)
{
GetRuleOrThrow(ruleId);
@@ -842,6 +923,9 @@ namespace YLErp.Modules.RiskEngine
return result;
}
/// <summary>
/// 批量删除规则(逐条保护检查)
/// </summary>
public BatchOperationResult BatchDeleteRules(List<long> ruleIds)
{
var rules = DbContext.glms_risk_rule
@@ -882,6 +966,9 @@ namespace YLErp.Modules.RiskEngine
};
}
/// <summary>
/// 获取规则关联的应用配置列表
/// </summary>
public List<RiskApplicationListItem> GetRuleApplications(long ruleId)
{
GetRuleOrThrow(ruleId);
@@ -918,6 +1005,9 @@ namespace YLErp.Modules.RiskEngine
return result;
}
/// <summary>
/// 获取所有启用规则列表(轻量字段,供下拉选择)
/// </summary>
public List<RiskRuleSimpleItem> GetAllRuleList()
{
return DbContext.glms_risk_rule
@@ -936,6 +1026,9 @@ namespace YLErp.Modules.RiskEngine
#region Application Management
/// <summary>
/// 查询应用配置列表(多条件筛选,内存关联规则名称)
/// </summary>
public SearchListResult<RiskApplicationListItem> QueryApplicationList(QueryRiskApplicationReq req)
{
var query = DbContext.glms_risk_rule_application
@@ -1000,6 +1093,9 @@ namespace YLErp.Modules.RiskEngine
return pagedResult;
}
/// <summary>
/// 获取应用配置详情(含关联规则信息)
/// </summary>
public RiskApplicationDetail GetApplicationDetail(long applicationId)
{
var app = DbContext.glms_risk_rule_application
@@ -1027,6 +1123,9 @@ namespace YLErp.Modules.RiskEngine
};
}
/// <summary>
/// 创建应用配置(关联规则 Active 校验,事务包裹)
/// </summary>
public RiskApplicationDetail CreateApplication(CreateRiskApplicationReq req)
{
ValidateRuleIdsActive(req.RuleIds);
@@ -1078,6 +1177,9 @@ namespace YLErp.Modules.RiskEngine
return GetApplicationDetail(entity.id);
}
/// <summary>
/// 更新应用配置(乐观锁校验)
/// </summary>
public RiskApplicationDetail UpdateApplication(long applicationId, UpdateRiskApplicationReq req)
{
var app = GetApplicationOrThrow(applicationId);
@@ -1122,6 +1224,9 @@ namespace YLErp.Modules.RiskEngine
return GetApplicationDetail(applicationId);
}
/// <summary>
/// 删除应用配置(软删除)
/// </summary>
public void DeleteApplication(long applicationId)
{
var app = GetApplicationOrThrow(applicationId);
@@ -1138,6 +1243,9 @@ namespace YLErp.Modules.RiskEngine
TryRefreshCache();
}
/// <summary>
/// 启用应用配置(校验关联规则状态)
/// </summary>
public void EnableApplication(long applicationId)
{
var app = DbContext.glms_risk_rule_application.FirstOrDefault(a => a.id == applicationId && a.Status == RiskRuleStatus.Disabled);
@@ -1157,6 +1265,9 @@ namespace YLErp.Modules.RiskEngine
TryRefreshCache();
}
/// <summary>
/// 停用应用配置
/// </summary>
public void DisableApplication(long applicationId)
{
var app = DbContext.glms_risk_rule_application.FirstOrDefault(a => a.id == applicationId && a.Status == RiskRuleStatus.Active);
@@ -1174,6 +1285,9 @@ namespace YLErp.Modules.RiskEngine
TryRefreshCache();
}
/// <summary>
/// 批量启用应用配置(逐条校验关联规则)
/// </summary>
public BatchOperationResult BatchEnableApplications(List<long> applicationIds)
{
var apps = DbContext.glms_risk_rule_application
@@ -1209,6 +1323,9 @@ namespace YLErp.Modules.RiskEngine
};
}
/// <summary>
/// 批量停用应用配置
/// </summary>
public BatchOperationResult BatchDisableApplications(List<long> applicationIds)
{
var apps = DbContext.glms_risk_rule_application
@@ -1243,6 +1360,9 @@ namespace YLErp.Modules.RiskEngine
#region Variable Management
/// <summary>
/// 查询变量列表(全量返回,Category/Keyword 筛选)
/// </summary>
public SearchListResult<RiskVariableListItem> QueryVariableList(QueryRiskVariableReq req)
{
var query = DbContext.glms_risk_variable.AsQueryable();
@@ -1280,6 +1400,9 @@ namespace YLErp.Modules.RiskEngine
return result.ToSearchList(req);
}
/// <summary>
/// 获取变量详情(含 ReferenceCount 引用统计)
/// </summary>
public RiskVariableDetail GetVariableDetail(long variableId)
{
var variable = GetVariableOrThrow(variableId);
@@ -1310,6 +1433,9 @@ namespace YLErp.Modules.RiskEngine
};
}
/// <summary>
/// 创建变量(VariableExpr 长度校验 ≤10000,事务包裹)
/// </summary>
public RiskVariableDetail CreateVariable(CreateRiskVariableReq req)
{
if (string.IsNullOrWhiteSpace(req.VariableName))
@@ -1363,6 +1489,9 @@ namespace YLErp.Modules.RiskEngine
return GetVariableDetail(entity.id);
}
/// <summary>
/// 更新变量(乐观锁,DataType 变更保护,级联更新引用规则 RuleExpr)
/// </summary>
public RiskVariableDetail UpdateVariable(long variableId, UpdateRiskVariableReq req)
{
var variable = GetVariableOrThrow(variableId);
@@ -1386,6 +1515,8 @@ namespace YLErp.Modules.RiskEngine
throw new ServiceException($"该变量被 {activeRefCount} 个生效中的规则引用,无法修改数据类型");
}
var oldVariableExpr = variable.VariableExpr;
variable.VariableName = req.VariableName;
variable.Category = req.Category;
variable.DataType = req.DataType;
@@ -1399,8 +1530,52 @@ namespace YLErp.Modules.RiskEngine
variable.UpdateOptName = UserName;
variable.UpdateDate = DateTime.Now;
WriteAuditLog("VAR_UPDATE", "VARIABLE", variableId, req.VariableName, $"修改变量:{variable.VariableName}");
DbContext.SaveChanges();
var variableExprChanged = oldVariableExpr != req.VariableExpr;
if (variableExprChanged)
{
using (var transaction = DbContext.Database.BeginTransaction())
{
try
{
var affectedRules = DbContext.glms_risk_rule
.Where(r => r.RuleExpr != null && r.RuleExpr.Contains(oldVariableExpr))
.ToList();
foreach (var rule in affectedRules)
{
rule.RuleExpr = rule.RuleExpr.Replace(oldVariableExpr, req.VariableExpr);
rule.Version = rule.Version + 1;
rule.UpdateOptId = UserId;
rule.UpdateOptName = UserName;
rule.UpdateDate = DateTime.Now;
}
DbContext.SaveChanges();
WriteAuditLog("VAR_UPDATE", "VARIABLE", variableId, req.VariableName, $"修改变量:{variable.VariableName}");
foreach (var rule in affectedRules)
{
WriteAuditLog("VAR_UPDATE_CASCADE", "RULE", rule.id, rule.RuleName,
$"变量 [{variable.VariableName}] VariableExpr 变更,级联更新规则 RuleExpr");
}
DbContext.SaveChanges();
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
}
}
else
{
WriteAuditLog("VAR_UPDATE", "VARIABLE", variableId, req.VariableName, $"修改变量:{variable.VariableName}");
DbContext.SaveChanges();
}
InvalidateVariableCache();
TryRefreshCache();
@@ -1408,6 +1583,9 @@ namespace YLErp.Modules.RiskEngine
return GetVariableDetail(variableId);
}
/// <summary>
/// 删除变量(有 Active 引用时拒绝)
/// </summary>
public void DeleteVariable(long variableId)
{
var variable = GetVariableOrThrow(variableId);
@@ -1429,6 +1607,9 @@ namespace YLErp.Modules.RiskEngine
TryRefreshCache();
}
/// <summary>
/// 获取所有变量列表(供下拉选择)
/// </summary>
public List<RiskVariableSimpleItem> GetAllVariableList()
{
var result = DbContext.glms_risk_variable
@@ -1452,6 +1633,9 @@ namespace YLErp.Modules.RiskEngine
#region Audit Log
/// <summary>
/// 查询审计日志列表(分页)
/// </summary>
public SearchListResult<RiskAuditLogListItem> QueryAuditLogs(QueryRiskAuditLogReq req)
{
var query = DbContext.glms_risk_rule_audit_log.AsQueryable();
@@ -1516,11 +1700,17 @@ namespace YLErp.Modules.RiskEngine
return result.ToSearchList(req);
}
/// <summary>
/// 导出审计日志为 Excel
/// </summary>
public byte[] ExportAuditLogs(QueryRiskAuditLogReq req)
{
throw new ServiceException("导出功能暂未实现");
}
/// <summary>
/// 获取审计日志详情
/// </summary>
public RiskAuditLogDetail GetAuditLogDetail(long logId)
{
var log = DbContext.glms_risk_rule_audit_log.FirstOrDefault(l => l.id == logId);
@@ -5,6 +5,7 @@ using YLErp.Modules.RiskEngine.Dto;
namespace YLErp.Web.Controllers
{
/// <summary>风控引擎管理控制器,提供规则、应用配置、变量池和审计日志的 CRUD 接口</summary>
[Route("risk-engine")]
public class RiskRuleController : BaseController
{
@@ -14,6 +15,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-rules")]
[MyAuthorize("风险控制-风控规则查看")]
/// <summary>查询风控规则列表(分页)</summary>
public JsonResult QueryRiskRules(QueryRiskRuleReq req)
{
try
@@ -35,6 +37,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-rules/{id}")]
[MyAuthorize("风险控制-风控规则查看")]
/// <summary>获取风控规则详情</summary>
public JsonResult GetRiskRule(long id)
{
try
@@ -56,6 +59,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-rules/{id}/versions")]
[MyAuthorize("风险控制-风控规则查看")]
/// <summary>获取风控规则版本历史</summary>
public JsonResult GetRiskRuleVersions(long id)
{
try
@@ -77,6 +81,7 @@ namespace YLErp.Web.Controllers
[HttpPost("risk-rules")]
[MyAuthorize("风险控制-风控规则新增")]
/// <summary>创建风控规则</summary>
public JsonResult CreateRiskRule([FromBody] CreateRiskRuleReq req)
{
try
@@ -98,6 +103,7 @@ namespace YLErp.Web.Controllers
[HttpPut("risk-rules/{id}")]
[MyAuthorize("风险控制-风控规则编辑")]
/// <summary>更新风控规则</summary>
public JsonResult UpdateRiskRule(long id, [FromBody] UpdateRiskRuleReq req)
{
try
@@ -119,6 +125,7 @@ namespace YLErp.Web.Controllers
[HttpDelete("risk-rules/{id}")]
[MyAuthorize("风险控制-风控规则删除")]
/// <summary>删除风控规则(软删除)</summary>
public JsonResult DeleteRiskRule(long id)
{
try
@@ -140,6 +147,7 @@ namespace YLErp.Web.Controllers
[HttpDelete("risk-rules/batch")]
[MyAuthorize("风险控制-风控规则删除")]
/// <summary>批量删除风控规则</summary>
public JsonResult BatchDeleteRiskRules([FromBody] List<long> ids)
{
try
@@ -161,6 +169,7 @@ namespace YLErp.Web.Controllers
[HttpPost("risk-rules/{id}/enable")]
[MyAuthorize("风险控制-风控规则启停")]
/// <summary>启用风控规则</summary>
public JsonResult EnableRiskRule(long id)
{
try
@@ -182,6 +191,7 @@ namespace YLErp.Web.Controllers
[HttpPost("risk-rules/{id}/disable")]
[MyAuthorize("风险控制-风控规则启停")]
/// <summary>停用风控规则</summary>
public JsonResult DisableRiskRule(long id)
{
try
@@ -203,6 +213,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-rules/{id}/applications")]
[MyAuthorize("风险控制-风控规则查看")]
/// <summary>获取规则关联的应用配置列表</summary>
public JsonResult GetRuleApplications(long id)
{
try
@@ -224,6 +235,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-rules/list")]
[MyAuthorize("风险控制-风控规则查看")]
/// <summary>获取所有启用规则列表(供下拉选择)</summary>
public JsonResult GetAllRiskRules()
{
try
@@ -249,6 +261,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-applications")]
[MyAuthorize("风险控制-风控应用查看")]
/// <summary>查询应用配置列表(分页)</summary>
public JsonResult QueryRiskApplications(QueryRiskApplicationReq req)
{
try
@@ -270,6 +283,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-applications/{id}")]
[MyAuthorize("风险控制-风控应用查看")]
/// <summary>获取应用配置详情</summary>
public JsonResult GetRiskApplication(long id)
{
try
@@ -291,6 +305,7 @@ namespace YLErp.Web.Controllers
[HttpPost("risk-applications")]
[MyAuthorize("风险控制-风控应用新增")]
/// <summary>创建应用配置</summary>
public JsonResult CreateRiskApplication([FromBody] CreateRiskApplicationReq req)
{
try
@@ -312,6 +327,7 @@ namespace YLErp.Web.Controllers
[HttpPut("risk-applications/{id}")]
[MyAuthorize("风险控制-风控应用编辑")]
/// <summary>更新应用配置</summary>
public JsonResult UpdateRiskApplication(long id, [FromBody] UpdateRiskApplicationReq req)
{
try
@@ -333,6 +349,7 @@ namespace YLErp.Web.Controllers
[HttpDelete("risk-applications/{id}")]
[MyAuthorize("风险控制-风控应用删除")]
/// <summary>删除应用配置(软删除)</summary>
public JsonResult DeleteRiskApplication(long id)
{
try
@@ -354,6 +371,7 @@ namespace YLErp.Web.Controllers
[HttpPost("risk-applications/{id}/enable")]
[MyAuthorize("风险控制-风控应用启停")]
/// <summary>启用应用配置</summary>
public JsonResult EnableRiskApplication(long id)
{
try
@@ -375,6 +393,7 @@ namespace YLErp.Web.Controllers
[HttpPost("risk-applications/{id}/disable")]
[MyAuthorize("风险控制-风控应用启停")]
/// <summary>停用应用配置</summary>
public JsonResult DisableRiskApplication(long id)
{
try
@@ -396,6 +415,7 @@ namespace YLErp.Web.Controllers
[HttpPost("risk-applications/batch-enable")]
[MyAuthorize("风险控制-风控应用启停")]
/// <summary>批量启用应用配置</summary>
public JsonResult BatchEnableRiskApplications([FromBody] List<long> ids)
{
try
@@ -417,6 +437,7 @@ namespace YLErp.Web.Controllers
[HttpPost("risk-applications/batch-disable")]
[MyAuthorize("风险控制-风控应用启停")]
/// <summary>批量停用应用配置</summary>
public JsonResult BatchDisableRiskApplications([FromBody] List<long> ids)
{
try
@@ -442,6 +463,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-variables")]
[MyAuthorize("风险控制-风控变量查看")]
/// <summary>查询变量列表</summary>
public JsonResult QueryRiskVariables(QueryRiskVariableReq req)
{
try
@@ -463,6 +485,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-variables/{id}")]
[MyAuthorize("风险控制-风控变量查看")]
/// <summary>获取变量详情</summary>
public JsonResult GetRiskVariable(long id)
{
try
@@ -484,6 +507,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-variables/list")]
[MyAuthorize("风险控制-风控变量查看")]
/// <summary>获取所有变量列表(供下拉选择)</summary>
public JsonResult GetAllRiskVariables()
{
try
@@ -505,6 +529,7 @@ namespace YLErp.Web.Controllers
[HttpPost("risk-variables")]
[MyAuthorize("风险控制-风控变量新增")]
/// <summary>创建变量</summary>
public JsonResult CreateRiskVariable([FromBody] CreateRiskVariableReq req)
{
try
@@ -526,6 +551,7 @@ namespace YLErp.Web.Controllers
[HttpPut("risk-variables/{id}")]
[MyAuthorize("风险控制-风控变量编辑")]
/// <summary>更新变量(含级联更新引用规则的 RuleExpr</summary>
public JsonResult UpdateRiskVariable(long id, [FromBody] UpdateRiskVariableReq req)
{
try
@@ -547,6 +573,7 @@ namespace YLErp.Web.Controllers
[HttpDelete("risk-variables/{id}")]
[MyAuthorize("风险控制-风控变量删除")]
/// <summary>删除变量</summary>
public JsonResult DeleteRiskVariable(long id)
{
try
@@ -572,6 +599,7 @@ namespace YLErp.Web.Controllers
[HttpGet("trade-types")]
[MyAuthorize("风险控制-风控应用查看")]
/// <summary>获取合约类型列表</summary>
public JsonResult GetTradeTypes()
{
try
@@ -601,6 +629,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-audit-logs")]
[MyAuthorize("风险控制-风控日志查看")]
/// <summary>查询风控操作日志列表(分页)</summary>
public JsonResult QueryRiskAuditLogs(QueryRiskAuditLogReq req)
{
try
@@ -622,6 +651,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-audit-logs/{id}")]
[MyAuthorize("风险控制-风控日志查看")]
/// <summary>获取风控操作日志详情</summary>
public JsonResult GetRiskAuditLogDetail(long id)
{
try
@@ -643,6 +673,7 @@ namespace YLErp.Web.Controllers
[HttpGet("risk-audit-logs/export")]
[MyAuthorize("风险控制-风控日志导出")]
/// <summary>导出风控操作日志为 Excel</summary>
public IActionResult ExportRiskAuditLogs(QueryRiskAuditLogReq req)
{
try