From 433a75f9d12d2d03f77d2292fc1f476c432e00c1 Mon Sep 17 00:00:00 2001 From: kkfluous Date: Sun, 3 May 2026 10:33:25 +0800 Subject: [PATCH] =?UTF-8?q?fix(mileage):=207=E5=A4=A9=E9=87=8C=E7=A8=8B?= =?UTF-8?q?=E8=B6=8B=E5=8A=BF=E5=BF=BD=E7=95=A5=E8=B4=9F=E5=80=BC=E8=84=8F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v_vehicle_daily_stats.daily_km 偶发负值(粤A00828F 在 5.1 录得 -82061km), 源于里程表回滚 / 换 GPS 设备。SQL 聚合时把负值置 0,避免一辆脏数据车 拖垮整组的当日趋势柱。 Co-Authored-By: Claude Opus 4.7 (1M context) --- src/server/routes/mileage/trend.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/routes/mileage/trend.ts b/src/server/routes/mileage/trend.ts index dde16ab..b757fc0 100644 --- a/src/server/routes/mileage/trend.ts +++ b/src/server/routes/mileage/trend.ts @@ -19,8 +19,10 @@ app.get('/', async (c) => { if (plates.length === 0) return c.json([]); } + // 单车日里程负值视为脏数据(里程表回滚 / 换 GPS 设备),不纳入统计 let sql = ` - SELECT DATE_FORMAT(stat_date, '%m-%d') as date, SUM(daily_km) as mileage + SELECT DATE_FORMAT(stat_date, '%m-%d') as date, + SUM(IF(daily_km < 0, 0, daily_km)) as mileage FROM v_vehicle_daily_stats WHERE stat_date >= DATE_SUB(CURDATE(), INTERVAL ? DAY) AND stat_date < CURDATE() `;