本次实现了一个完整的指标公式检查功能,包括核心业务逻辑、API接口、测试用例和详细文档。
metric_check位置: app/core/data_metric/metric_interface.py
功能:
指标名称 = 计算表达式)主要特性:
+, -, *, /, (), (), [], {}返回数据格式:
[
{
"variable": "变量名",
"name_zh": "中文名称",
"name_en": "英文名称",
"id": 节点ID,
"create_time": "创建时间",
"findit": 1或0
}
]
/api/data/metric/check位置: app/api/data_metric/routes.py
方法: POST
请求参数:
{
"formula": "销售额 = 单价 * 数量 + 运费"
}
响应格式:
{
"code": 200,
"message": "success",
"data": [
{
"variable": "单价",
"name_zh": "单价",
"name_en": "unit_price",
"id": 12345,
"create_time": "2024-01-15 10:30:00",
"findit": 1
}
]
}
app/core/data_metric/metric_interface.py
metric_check() 函数(第643-748行)app/api/data_metric/routes.py
data_metric_check() API接口(第289-316行)docs/api/metric-check-api.md
docs/features/metric-formula-check.md
tests/test_metric_check.py
IMPLEMENTATION_SUMMARY.md
输入: "销售额 = 单价 * 数量 + 100"
↓
按等号分割 → ["销售额", "单价 * 数量 + 100"]
↓
提取右侧 → "单价 * 数量 + 100"
↓
按运算符分割 → ["单价", "数量", "100"]
↓
过滤中文变量 → ["单价", "数量"]
↓
去重 → ["单价", "数量"]
↓
Neo4j查询 → [
{variable: "单价", findit: 1, ...},
{variable: "数量", findit: 1, ...}
]
MATCH (n:DataMeta)
WHERE n.name CONTAINS $variable
RETURN n, id(n) as node_id
LIMIT 1
特点:
CONTAINS 实现模糊匹配import requests
url = "http://localhost:5000/api/data/metric/check"
data = {
"formula": "利润率 = (销售收入 - 成本) / 销售收入 * 100"
}
response = requests.post(url, json=data)
result = response.json()
for item in result['data']:
if item['findit'] == 1:
print(f"✓ {item['variable']}: 找到匹配 (ID: {item['id']})")
else:
print(f"✗ {item['variable']}: 未找到匹配")
fetch('http://localhost:5000/api/data/metric/check', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
formula: '销售额 = 单价 * 数量'
})
})
.then(res => res.json())
.then(data => {
data.data.forEach(item => {
if (item.findit === 1) {
console.log(`✓ ${item.variable}: 找到`);
} else {
console.log(`✗ ${item.variable}: 未找到`);
}
});
});
# 运行所有测试
python -m pytest tests/test_metric_check.py -v
# 运行特定测试
python -m pytest tests/test_metric_check.py::TestMetricCheck::test_simple_formula -v
# 查看测试覆盖率
python -m pytest tests/test_metric_check.py --cov=app.core.data_metric --cov-report=html
✅ 简单公式(单个运算符) ✅ 复杂公式(多个运算符和括号) ✅ 中英文括号混用 ✅ 纯数字公式(无变量) ✅ 缺少等号 ✅ 变量去重 ✅ 部分匹配/完全未匹配 ✅ 数据库连接失败 ✅ API请求参数验证 ✅ API错误处理
# 已通过linter检查
✓ app/core/data_metric/metric_interface.py
✓ app/api/data_metric/routes.py
用户创建指标时,系统自动检查公式中的变量是否都已定义。
了解指标依赖哪些基础元数据,建立数据血缘关系。
提前发现未定义的变量,避免指标计算错误。
为用户提供变量的详细信息,辅助指标定义。
LIMIT 1 限制查询结果API文档: docs/api/metric-check-api.md
功能文档: docs/features/metric-formula-check.md
实现总结: IMPLEMENTATION_SUMMARY.md(本文件)
本次实现完成了以下目标:
✅ 创建了 metric_check 核心函数
✅ 实现了 /api/data/metric/check API接口
✅ 编写了完整的单元测试
✅ 创建了详细的API和功能文档
✅ 通过了代码质量检查
✅ 符合项目架构和编码规范
该功能可以立即投入使用,并为未来的功能扩展预留了接口。
确保依赖已安装
pip install flask py2neo
bash
python run.py
测试API
curl -X POST http://localhost:5000/api/data/metric/check \
-H "Content-Type: application/json" \
-d '{"formula": "销售额 = 单价 * 数量"}'
实现日期: 2024-10-30 实现者: Cursor AI Assistant 版本: 1.0.0