diff --git a/src/server/routes/energy/index.ts b/src/server/routes/energy/index.ts index bdedcef..0933a3c 100644 --- a/src/server/routes/energy/index.ts +++ b/src/server/routes/energy/index.ts @@ -85,7 +85,9 @@ app.get('/hydrogen/overview', async (c) => { // Top5 加氢站(本年) const [top5Rows] = await pool.query( `SELECT b.hydrogen_station_id AS id, - COALESCE(s.short_name, s.name, os.fixed_station_name, os.station_name, + COALESCE(MAX(s.short_name), MAX(s.name), + MAX(os.fixed_station_name), MAX(os.station_name), + MAX(i.hydrogen_station_name), CASE WHEN b.hydrogen_station_id IS NULL THEN '未关联站点' ELSE CONCAT('未知站点 #', b.hydrogen_station_id) END) AS name, SUM(b.hydrogen_quantity) AS kg, @@ -93,6 +95,7 @@ app.get('/hydrogen/overview', async (c) => { FROM tab_energy_hydrogen_bill b LEFT JOIN tab_hydrogen_site s ON s.id = b.hydrogen_station_id LEFT JOIN tab_outside_hydrogen_site os ON os.inner_site_id = b.hydrogen_station_id + LEFT JOIN tab_import_hydrogen_order i ON i.bill_code = b.bill_code WHERE b.is_deleted = 0 AND b.hydrogen_time >= ? AND YEAR(${HYDROGEN_LOCAL}) = YEAR(CURDATE()) @@ -161,17 +164,22 @@ app.get('/hydrogen/daily', async (c) => { ].join(' AND '); // 站点级聚合(每日 × 每站)。前端组装成 day → stations + // 站点名 fallback 顺序:内部站表 → 外部站表 → 导入订单表(tab_import_hydrogen_order.hydrogen_station_name,按 bill_code 关联) + // 单价用「按量加权」的实际效率价:SUM(费用)/SUM(量),同价组自动等于原价(不再产生意外小数) const [stationRows] = await pool.query( `SELECT DATE_FORMAT(${HYDROGEN_LOCAL}, '%Y-%m-%d') AS d, b.hydrogen_station_id AS stationId, - COALESCE(s.short_name, s.name, os.fixed_station_name, os.station_name, - CASE WHEN b.hydrogen_station_id IS NULL THEN '未关联站点' - ELSE CONCAT('未知站点 #', b.hydrogen_station_id) END) AS stationName, - SUM(b.hydrogen_quantity) AS kg, - AVG(b.cost_price) AS pricePerKg + COALESCE(MAX(s.short_name), MAX(s.name), + MAX(os.fixed_station_name), MAX(os.station_name), + MAX(i.hydrogen_station_name), + CASE WHEN b.hydrogen_station_id IS NULL THEN '未关联站点' + ELSE CONCAT('未知站点 #', b.hydrogen_station_id) END) AS stationName, + ROUND(SUM(b.hydrogen_quantity), 2) AS kg, + ROUND(SUM(b.cost_expense) / NULLIF(SUM(b.hydrogen_quantity), 0), 2) AS pricePerKg FROM tab_energy_hydrogen_bill b LEFT JOIN tab_hydrogen_site s ON s.id = b.hydrogen_station_id LEFT JOIN tab_outside_hydrogen_site os ON os.inner_site_id = b.hydrogen_station_id + LEFT JOIN tab_import_hydrogen_order i ON i.bill_code = b.bill_code WHERE ${where} GROUP BY d, b.hydrogen_station_id ORDER BY d DESC, kg DESC`,