# 公式能力扩展 — 开发任务
created: 2026-06-12 | complexity: 🜶 复杂 | status: apply (Phase 1 ✅, Phase 2-5 ⏳)
Phase 1: 领域模型 + 依赖分析器(~6h)
⚠️ 本阶段不引入 Aviator、不修改 CRUD Hook、不修改 PublishService、不做前端、不暴露 API
T1.1 创建 FormulaType 枚举
- 路径: orge-plugin-generator/.../domain/formula/FormulaType.java
- 值: CALC (计算公式), AGGREGATE (聚合公式), CONDITIONAL (条件公式)
- 验证: 编译通过
- 预计: 0.25h
T1.2 创建 FormulaMode 枚举
- 路径: orge-plugin-generator/.../domain/formula/FormulaMode.java
- 值: VIRTUAL (读取时实时计算), STORED (保存时计算并持久化)
- 验证: 编译通过
- 预计: 0.25h
T1.3 创建 AggregateFunction 枚举
- 路径: orge-plugin-generator/.../domain/formula/AggregateFunction.java
- 值: SUM, COUNT, AVG, MAX, MIN
- 验证: 编译通过
- 预计: 0.25h
T1.4 创建 FormulaConfig 领域模型
- 路径: orge-plugin-generator/.../domain/formula/FormulaConfig.java
- 设计: 纯领域模型(非 DTO),不含持久化注解
- 字段:
- ype: FormulaType
- mode: FormulaMode
- expression: String (Aviator 表达式,Phase 2 才执行)
- dependsOn: List<String> (依赖字段名列表)
- ggregate: AggregateConfig (聚合配置,type=AGGREGATE 时必填)
- condition: String (条件表达式,type=CONDITIONAL 时必填)
- 方法: isVirtual(), isStored(), isAggregate(), isCalc(), isConditional()
- 验证: 编译通过,自描述性 API 正确
- 预计: 1h
T1.5 创建 AggregateConfig 领域模型
- 路径: orge-plugin-generator/.../domain/formula/AggregateConfig.java
- 字段:
- unction: AggregateFunction
-
elationCode: String (对象关系编码,定位从表)
- argetField: String (从表中需要聚合的字段)
- ilter: String (可选,Aviator 过滤条件,Phase 2 才执行)
- 方法: getFunctionName(), hasFilter()
- 验证: 编译通过
- 预计: 0.5h
T1.6 实现 FormulaDependencyAnalyzer
- 路径: orge-plugin-generator/.../domain/formula/FormulaDependencyAnalyzer.java
- 输入: List (一个对象的所有公式字段)
- 功能:
- nalyzeDag() → 构建依赖 DAG (Map>)
- detectCycle() → 拓扑排序检测循环依赖
- computeDepth() → 计算每个公式的嵌套深度
- alidateDepth(int maxDepth=3) → 校验最大嵌套深度
- getTopologicalOrder() → 返回拓扑排序后的计算公式执行顺序
错误信息: 检测到循环时返回涉及的字段名列表
验证: 编译通过
预计: 3h
T1.7 编写 CycleDetect 单元测试
- 路径: orge-plugin-generator/.../domain/formula/FormulaDependencyAnalyzerTest.java
- 覆盖:
- 无环 DAG → 通过,返回正确拓扑序
- 简单环 A→B→A → 检测失败
- 间接环 A→B→C→A → 检测失败
- 自引用 A→A → 检测失败
- 嵌套深度=3 → 通过
- 嵌套深度=4 → 拦截
- 空公式列表 → 通过
- 单公式无依赖 → 通过
- 聚合公式依赖关系正确解析
- 覆盖率: 90%+
- 预计: 2h
Phase 2: 表达式引擎集成(~6h)
T2.1 引入 Aviator 依赖
- 范围: orge-dependencies/pom.xml
- 预计: 0.5h
T2.2 实现 FormulaEngine
T2.3 实现公式验证服务
Phase 3: 业务集成(~11h)
T3.1 扩展 GenTableColumn + DB Migration
T3.2 发布服务集成公式校验
T3.3 动态CRUD 截入公式计算
T3.4 实现聚合公式引擎
T3.5 从表联动聚合重算
Phase 4: 接口与前端(~8.5h)
T4.1 公式配置 REST API
T4.2 前端公式配置界面
T4.3 前端公式字段只读展示
Phase 5: 测试(~6h)
T5.1 FormulaEngine 单元测试
T5.2 聚合公式测试
T5.3 集成测试
工时估算
| Phase |
内容 |
预计 |
| Phase 1 |
领域模型 + 依赖分析器 |
~8h |
| Phase 2 |
表达式引擎集成 |
~6h |
| Phase 3 |
业务集成 |
~11h |
| Phase 4 |
接口与前端 |
~8.5h |
| Phase 5 |
测试 |
~6h |
| 合计 |
|
~39.5h |
Phase 1 明确禁止项
第一阶段仅创建领域模型、枚举和分析器,明确禁止以下操作:
| 禁止项 |
原因 |
| ❌ Aviator 依赖 |
Phase 2 引入 |
| ❌ CRUD Hook |
Phase 3 实现 |
| ❌ PublishService 修改 |
Phase 3 实现 |
| ❌ 前端界面 |
Phase 4 实现 |
| ❌ REST API |
Phase 4 实现 |
| ❌ DB Migration |
Phase 3 实现 |
| ❌ GenTableColumn 修改 |
Phase 3 实现 |