WebhockTransfer/.trae/documents/规则引擎逻辑重构计划.md
houhuan 2bc7460f1f feat: 初始化Webhook中继系统项目
- 添加FastAPI应用基础结构,包括主入口、路由和模型定义
- 实现Webhook接收端点(/webhook/{namespace})和健康检查(/health)
- 添加管理后台路由和模板,支持端点、目标、渠道和模板管理
- 包含SQLite数据库模型定义和初始化逻辑
- 添加日志记录和统计服务
- 包含Dockerfile和配置示例文件
- 添加项目文档,包括设计、流程图和验收标准
2025-12-21 18:43:12 +08:00

51 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 规则引擎逻辑重构计划:支持多级条件与流程编排
您说得非常对。目前的扁平化规则(单层 `if-match-then-action`)在处理“组合条件”时会导致规则数量爆炸,配置极其繁琐且难以维护。
**核心问题**现在的结构是“单层匹配”无法表达“先判断A再判断B”的逻辑。
**您的需求**
1. **第一层(事件分类)**:先根据 `event_define_no` 判断业务类型(微信支付/退款/投诉),决定用哪个**模板**。
2. **第二层(渠道分发)**:再根据 `remark` 判断归属门店002/003决定推给哪个**渠道**。
为此,我将对系统进行深度的逻辑重构,引入**“规则组Rule Group”**和**“条件链Condition Chain”**的概念,但为了保持用户界面的直观性,我设计了更符合您直觉的 **“流程树Flow Tree”** 方案。
## 方案设计:嵌套式规则引擎
### 1. 数据模型升级 (DB)
* **ProcessingRule 表变更**
* 新增 `parent_rule_id` (Integer, nullable): 允许规则嵌套。子规则只有在父规则匹配成功后才会执行。
* 此变更实现了“树状结构”。
### 2. 核心逻辑升级 (Engine)
* **递归匹配**
* 引擎首先查找所有 `parent_id` 为空的**根规则**。
* 如果根规则匹配成功(例如 `event_define_no == pay.wx_scaned`
* 执行根规则挂载的动作(例如:设置模板变量 `pay_method="微信"`)。
* **继续检查其子规则**
* 子规则(例如 `remark == imcgcd03`)匹配成功:
* 执行子规则挂载的动作(例如:推送到 `渠道003`)。
* 动作执行时,会**继承**父规则上下文中设置的变量如模板ID或变量
### 3. 用户界面重构 (UI)
* **端点详情页**
* 不再是扁平列表,而是**树形展示**。
* 在每个规则卡片内部,增加“**添加子规则**”按钮。
* 视觉上通过缩进或连线表示层级关系。
* 支持**拖拽排序**(优先级调整)。
## 实施步骤
1. **数据库迁移**:为 `ProcessingRule` 添加 `parent_rule_id` 字段。
2. **后端逻辑**:重写 `engine.py``process` 方法,改为递归处理。
3. **前端交互**:重写 `endpoint_detail.html`,使用递归模板渲染规则树。
4. **无损更新**:编写 SQL 脚本或逻辑,确保现有数据平滑迁移到新结构(现有规则都视为根规则)。
这样,您的配置流程将变为:
1. **根规则**`event_define_no == pay.wx_scaned`
* 动作:设置变量 `pay_type="微信"`**不需要指定渠道**
* **子规则 A**`remark == imcgcd02`
* 动作:推送到 `渠道002`**复用父级的模板设置**
* **子规则 B**`remark == imcgcd03`
* 动作:推送到 `渠道003`
这完美符合您的思维模型。