refactor: expose electric data freshness

This commit is contained in:
kkfluous
2026-08-07 15:22:04 +08:00
parent 21f5e5388a
commit 0d849fcbb1
6 changed files with 46 additions and 18 deletions
+4 -3
View File
@@ -7,7 +7,7 @@ test('returns the published mileage metric contract', async () => {
const payload = await response.json();
assert.equal(response.status, 200);
assert.equal(payload.catalogVersion, 4);
assert.equal(payload.catalogVersion, 5);
assert.deepEqual(payload.domains, ['mileage']);
assert.ok(payload.metrics.some((metric: { id: string }) => metric.id === 'mileage.assessment_completion_rate'));
});
@@ -27,10 +27,11 @@ test('returns the published electric metric contract', async () => {
const payload = await response.json();
assert.equal(response.status, 200);
assert.equal(payload.catalogVersion, 4);
assert.equal(payload.catalogVersion, 5);
assert.deepEqual(payload.domains, ['electric']);
assert.ok(payload.metrics.some((metric: { id: string }) => metric.id === 'electric.charge_total_fee'));
assert.ok(payload.metrics.some((metric: { id: string }) => metric.id === 'electric.blended_cost_intensity'));
assert.ok(payload.metrics.some((metric: { id: string }) => metric.id === 'electric.data_freshness'));
});
test('returns the published ETC metric contract', async () => {
@@ -38,7 +39,7 @@ test('returns the published ETC metric contract', async () => {
const payload = await response.json();
assert.equal(response.status, 200);
assert.equal(payload.catalogVersion, 4);
assert.equal(payload.catalogVersion, 5);
assert.deepEqual(payload.domains, ['etc']);
assert.ok(payload.metrics.some((metric: { id: string }) => metric.id === 'etc.total_amount'));
assert.ok(payload.metrics.some((metric: { id: string }) => metric.id === 'etc.bill_receivable'));
+4 -1
View File
@@ -527,7 +527,8 @@ app.get('/electric/overview', async (c) => {
SUM(CASE WHEN DATE_FORMAT(start_time, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
THEN fee ELSE 0 END) AS monthFee,
SUM(CASE WHEN DATE(start_time) = CURDATE() THEN kwh ELSE 0 END) AS todayKwh,
SUM(CASE WHEN DATE(start_time) = CURDATE() THEN fee ELSE 0 END) AS todayFee
SUM(CASE WHEN DATE(start_time) = CURDATE() THEN fee ELSE 0 END) AS todayFee,
DATE_FORMAT(MAX(start_time), '%Y-%m-%d %H:%i:%s') AS latestRecordAt
FROM bi_ele_charge_record`,
);
const k = kpiRows[0] ?? {};
@@ -537,6 +538,7 @@ app.get('/electric/overview', async (c) => {
const monthFee = Number(k.monthFee) || 0;
const todayKwh = Number(k.todayKwh) || 0;
const todayFee = Number(k.todayFee) || 0;
const latestRecordAt = k.latestRecordAt ? String(k.latestRecordAt) : null;
// 本月每日(用于柱图)
const [trendRows] = await pool.query<RowDataPacket[]>(
@@ -589,6 +591,7 @@ app.get('/electric/overview', async (c) => {
return {
kpi: { totalKwh, totalFee, monthKwh, monthFee, todayKwh, todayFee, todayChainPct },
trend: trendArr,
latestRecordAt,
};
}, { force });
return c.json(data);