refactor(stage14): 单站日报 10 条查询移入 repository(能源域四分之三)
改动
- energy/hydrogen-station-board.ts 的 10 条查询全部移入 energy/repository.ts,
参数表达式逐条对应(含区间、站点、以及租户与手工充值来源的固定顺序)。
- 相关 SQL 片段助手搬进 constants.ts 并导出:
NORMALIZED_PLATE / NORMALIZED_PLATE_UNICODE / EXTERNAL_CUSTOMER_MAP_CTE,
以及 HYDROGEN_TENANT_ID / MANUAL_RECHARGE_SOURCE。
它们本质是 SQL,继续留在路由里会让"路由不含 SQL"形同虚设;放 constants.ts
是因为被多条查询共享,避免复制。
- 路由文件随之删掉 4 个只为 SQL 服务的 constants 导入(HYDROGEN_BASE_WHERE /
_B / HYDROGEN_LOCAL / HYDROGEN_TABLE),它们已不再被该文件使用。
- 架构守卫允许 constants.ts 存放共享 SQL 片段,并注明理由。
提取方式
- 用平衡括号扫描从原文件按顺序取出 10 条 SQL 与各自的参数数组(含查询 10 的多行参数),
按调用点跨度精确替换,避免手工转写 200 余行 SQL。
验证
- energy/routes.test.ts 的 13 个既有用例在提取前后均通过,其中包含单站看板的
SQL 与参数断言(迁移未改变查询文本、参数顺序与响应口径)。
- 全量 lint / test(191) / build 全绿,可达性 0 未引用文件。
未完成
- hydrogen-bi-v2.ts 仍有 7 条带 ${sqlWhere} / ${groupOrder} 等动态插值的查询,
需要把 where 组装函数一并搬进 repository;完成后再把 energy 加入守护清单。
This commit is contained in:
@@ -10,3 +10,30 @@ export const HYDROGEN_BASE_WHERE_B = `b.del_flag = '0'`;
|
||||
export const HYDROGEN_FUEL_ONLY_WHERE = `${HYDROGEN_BASE_WHERE} AND COALESCE(record_source, '') <> 'external_recharge_manual'`;
|
||||
export const HYDROGEN_FUEL_ONLY_WHERE_B = `${HYDROGEN_BASE_WHERE_B} AND COALESCE(b.record_source, '') <> 'external_recharge_manual'`;
|
||||
export const ELECTRIC_LOCAL = `charging_start_time`;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// 单站看板的 SQL 片段与租户常量。
|
||||
// 这些是 SQL 的一部分,放在 constants.ts 而不是路由里,避免 SQL 拼装散落两处。
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/** 租户只由服务端配置决定,不接受浏览器传值。 */
|
||||
export const HYDROGEN_TENANT_ID = process.env.HYDROGEN_TENANT_ID?.trim() || '000000';
|
||||
export const MANUAL_RECHARGE_SOURCE = 'external_recharge_manual';
|
||||
export const NORMALIZED_PLATE = (column: string) =>
|
||||
`UPPER(REPLACE(REPLACE(REPLACE(TRIM(${column}), ' ', ''), '.', ''), '·', ''))`;
|
||||
export const NORMALIZED_PLATE_UNICODE = (column: string) =>
|
||||
`CONVERT(${NORMALIZED_PLATE(column)} USING utf8mb4) COLLATE utf8mb4_unicode_ci`;
|
||||
export const EXTERNAL_CUSTOMER_MAP_CTE = `
|
||||
WITH external_vehicle_candidates AS (
|
||||
SELECT ${NORMALIZED_PLATE_UNICODE('plate_number')} AS normalizedPlate,
|
||||
MAX(NULLIF(TRIM(actual_user), '')) AS customerName,
|
||||
COUNT(DISTINCT NULLIF(TRIM(actual_user), '')) AS customerCount
|
||||
FROM hydrogen_order_transfer_external_vehicle_user
|
||||
WHERE NULLIF(TRIM(plate_number), '') IS NOT NULL
|
||||
GROUP BY ${NORMALIZED_PLATE_UNICODE('plate_number')}
|
||||
), external_vehicle_map AS (
|
||||
SELECT normalizedPlate, customerName
|
||||
FROM external_vehicle_candidates
|
||||
WHERE customerCount = 1
|
||||
AND customerName IS NOT NULL
|
||||
)`;
|
||||
|
||||
Reference in New Issue
Block a user