diff --git a/src/modules/energy/HydrogenDaily.tsx b/src/modules/energy/HydrogenDaily.tsx
index 39ac03f..e37c59c 100644
--- a/src/modules/energy/HydrogenDaily.tsx
+++ b/src/modules/energy/HydrogenDaily.tsx
@@ -197,9 +197,9 @@ export default function HydrogenDaily() {
>
{s.name}
- · {s.pricePerKg}
+ · {s.pricePerKg == null ? '—' : s.pricePerKg}
- {s.pricePerKg}
+ {s.pricePerKg == null ? '—' : s.pricePerKg}
{s.kg.toLocaleString('zh-CN', { maximumFractionDigits: 2 })}
diff --git a/src/modules/energy/types.ts b/src/modules/energy/types.ts
index 5c3f4c7..a2d6b08 100644
--- a/src/modules/energy/types.ts
+++ b/src/modules/energy/types.ts
@@ -31,7 +31,7 @@ export interface HydrogenRegionShare {
export interface HydrogenStationRow {
name: string;
- pricePerKg: number;
+ pricePerKg: number | null;
kg: number;
chainPct: number;
}
diff --git a/src/server/routes/energy/index.ts b/src/server/routes/energy/index.ts
index 0933a3c..072144c 100644
--- a/src/server/routes/energy/index.ts
+++ b/src/server/routes/energy/index.ts
@@ -98,7 +98,7 @@ app.get('/hydrogen/overview', async (c) => {
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())
+ AND YEAR(DATE_ADD(b.hydrogen_time, INTERVAL 8 HOUR)) = YEAR(CURDATE())
GROUP BY b.hydrogen_station_id
ORDER BY kg DESC
LIMIT 5`,
@@ -164,10 +164,10 @@ app.get('/hydrogen/daily', async (c) => {
].join(' AND ');
// 站点级聚合(每日 × 每站)。前端组装成 day → stations
- // 站点名 fallback 顺序:内部站表 → 外部站表 → 导入订单表(tab_import_hydrogen_order.hydrogen_station_name,按 bill_code 关联)
- // 单价用「按量加权」的实际效率价:SUM(费用)/SUM(量),同价组自动等于原价(不再产生意外小数)
+ // 站点名 fallback:内部站表 → 外部站表 → 导入订单表(tab_import_hydrogen_order,按 bill_code 关联)
+ // 单价不重算:同价组显示原价,混合价组返回 NULL,前端显示「—」
const [stationRows] = await pool.query(
- `SELECT DATE_FORMAT(${HYDROGEN_LOCAL}, '%Y-%m-%d') AS d,
+ `SELECT DATE_FORMAT(DATE_ADD(b.hydrogen_time, INTERVAL 8 HOUR), '%Y-%m-%d') AS d,
b.hydrogen_station_id AS stationId,
COALESCE(MAX(s.short_name), MAX(s.name),
MAX(os.fixed_station_name), MAX(os.station_name),
@@ -175,7 +175,8 @@ app.get('/hydrogen/daily', async (c) => {
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
+ CASE WHEN MIN(b.cost_price) = MAX(b.cost_price) THEN MIN(b.cost_price)
+ ELSE NULL END 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
@@ -187,13 +188,13 @@ app.get('/hydrogen/daily', async (c) => {
// 站点环比:同站点上一条记录的 kg
// 按 stationId 分组、按日期升序计算
- type StationRow = { date: string; stationId: number; name: string; kg: number; pricePerKg: number };
+ type StationRow = { date: string; stationId: number; name: string; kg: number; pricePerKg: number | null };
const flat: StationRow[] = stationRows.map(r => ({
date: r.d as string,
stationId: Number(r.stationId),
name: r.stationName as string,
kg: Number(r.kg) || 0,
- pricePerKg: Number(r.pricePerKg) || 0,
+ pricePerKg: r.pricePerKg == null ? null : Number(r.pricePerKg),
}));
// 计算日级总量 + 日级环比
@@ -243,7 +244,7 @@ app.get('/hydrogen/daily', async (c) => {
.sort((a, b) => b.kg - a.kg)
.map(s => ({
name: s.name,
- pricePerKg: Math.round(s.pricePerKg * 100) / 100,
+ pricePerKg: s.pricePerKg == null ? null : Math.round(s.pricePerKg * 100) / 100,
kg: Math.round(s.kg * 100) / 100,
chainPct: stationChain.get(`${s.date}|${s.stationId}`) ?? 0,
})),