① 新建 app/utils/threshold_parser.py 统一解析/判定(单一事实源):
- 支持负数(>=-100000)、闭区间 A~B、多条件 C1|C2;空串=未设置
- 判定顺序 red→green→yellow:红灯优先(消除宽黄灯遮蔽红灯),
green 先于 yellow(green 是主条件,yellow 是更宽兜底带)
② kpis.py / alert_generator.py 双实现收敛到统一解析器(消除重复维护)
③ thresholds.py suggest 输出可解析表达式(原黄色/适中型生成 `52.33~107.67`、`偏离55%` 等
区间/文字 → 用户点"自动建议"填入后静默失效;另修复大数目标生成 1.6e+06 科学计数法)
④ KPIDetail.vue 三个阈值输入加 placeholder/tooltip/帮助文案 + 保存前格式校验(非法即拒)
⑤ 存量 4 个不可解析表达式修正(id=46 C_REBATE_RATE / id=327 BH_SALES_10),
改前 mysqldump 备份 backend/scripts/backups/kpi_definitions.bak-20260911.sql +
threshold_rows_before_20260911.json(可回滚);不可解析 5→0
⑥ 单测 97 条 + 红黄绿判定回归 367 判定点(旧→新差异 14 条,含差异说明)
32 lines
775 B
JSON
32 lines
775 B
JSON
{
|
|
"created_at": "2026-09-11T17:11:24.159913",
|
|
"rows": [
|
|
{
|
|
"id": 46,
|
|
"kpi_code": "C_REBATE_RATE",
|
|
"kpi_name": "渠补率",
|
|
"target_value": 80.0,
|
|
"threshold_green": "52.33~107.67",
|
|
"threshold_yellow": "偏离55%",
|
|
"threshold_red": "偏离>55%"
|
|
},
|
|
{
|
|
"id": 327,
|
|
"kpi_code": "BH_SALES_10",
|
|
"kpi_name": "销售-任富海",
|
|
"target_value": 200.0,
|
|
"threshold_green": "",
|
|
"threshold_yellow": "偏离182878%",
|
|
"threshold_red": "偏离>182878%"
|
|
},
|
|
{
|
|
"id": 32,
|
|
"kpi_code": "F_EVA",
|
|
"kpi_name": "经济增加值(EVA)",
|
|
"target_value": 0.0,
|
|
"threshold_green": ">=0",
|
|
"threshold_yellow": ">=-100000",
|
|
"threshold_red": "<-100000"
|
|
}
|
|
]
|
|
} |