From c4e2c0334853f9ffc37f703235effa8958aa0a88 Mon Sep 17 00:00:00 2001 From: shishengliang Date: Fri, 11 Sep 2026 11:17:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(energy):=20=E5=BE=85=E6=A0=B8=E5=AF=B9?= =?UTF-8?q?=E4=B8=8A=E7=BA=BF=E6=9C=9F=E5=88=9D=E6=94=B9=E4=B8=BA=202026-0?= =?UTF-8?q?1-01=EF=BC=8C=E5=B9=B6=E7=BB=9F=E4=B8=80=E5=89=8D=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 待核对订单的起算日原先硬编码为 2026-05-01,散落在后端 SQL、看板诊断卡 和下钻提示三处,改一处就会与另两处口径不一致。 - 新增 shared/hydrogen-verify.ts 的 HYDROGEN_VERIFY_START_DATE 作为唯一来源 - repository 的 unverified 过滤条件改为引用该常量,起算日提前到 2026-01-01 - 看板桌面/移动诊断卡与待核对下钻提示同步显示新日期 - 契约测试锁定字面量,防止日期被无意改动 仅影响 verifyScope=unverified;all / verified 口径不变。 --- src/modules/energy/hydrogen/board/EnergyBiBoardApp.tsx | 5 +++-- .../energy/hydrogen/drill/prototype-real-drills.tsx | 3 ++- src/server/routes/energy/constants.ts | 3 +++ src/server/routes/energy/repository.ts | 4 +++- src/server/routes/energy/routes.test.ts | 6 +++++- src/shared/hydrogen-verify.ts | 9 +++++++++ 6 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 src/shared/hydrogen-verify.ts diff --git a/src/modules/energy/hydrogen/board/EnergyBiBoardApp.tsx b/src/modules/energy/hydrogen/board/EnergyBiBoardApp.tsx index da259cb..e1fb6a7 100644 --- a/src/modules/energy/hydrogen/board/EnergyBiBoardApp.tsx +++ b/src/modules/energy/hydrogen/board/EnergyBiBoardApp.tsx @@ -21,6 +21,7 @@ import { Zap, } from 'lucide-react'; import { exportAoaSheet } from '../../../../shared/xlsx'; +import { HYDROGEN_VERIFY_START_DATE } from '../../../../shared/hydrogen-verify'; import { MobileListFullscreenButton } from '../common/MobileListFullscreenButton'; import { SOURCE_LABEL, @@ -2136,7 +2137,7 @@ export const EnergyBiBoardApp: React.FC = () => { @@ -2155,7 +2156,7 @@ export const EnergyBiBoardApp: React.FC = () => {
月度环比{liveMonthComparison ? `${liveMonthComparison.value >= 0 ? '+' : ''}${liveMonthComparison.value.toFixed(1)}%` : '—'}{liveMonthComparison?.label ?? '暂无可比月份'}
单公斤毛利¥{unitProfitYuan}/kg按累计加氢量计算
- + diff --git a/src/modules/energy/hydrogen/drill/prototype-real-drills.tsx b/src/modules/energy/hydrogen/drill/prototype-real-drills.tsx index 0ca77cf..54623cf 100644 --- a/src/modules/energy/hydrogen/drill/prototype-real-drills.tsx +++ b/src/modules/energy/hydrogen/drill/prototype-real-drills.tsx @@ -5,6 +5,7 @@ import { ChevronDown, ChevronLeft, Download, Search, SlidersHorizontal, Truck, X import { MobileListFullscreenButton } from "../common/MobileListFullscreenButton"; import { fetchAllH2BiDrill, fetchH2BiDrill, fetchH2BiMeta } from "../api"; import { exportAoaSheet } from "../../../../shared/xlsx"; +import { HYDROGEN_VERIFY_START_DATE } from "../../../../shared/hydrogen-verify"; import { bearingLabels } from "../model/bearing-labels"; import { formatFixed } from "../model/display-format"; import type { @@ -1236,7 +1237,7 @@ export function PrototypeDrillModal({ ) : null} -{cleanLabel === "待核对订单" ?
核对功能上线期初:2026-05-01(含)。仅统计当前查询范围与上线期初之后的交集;此前订单不计入待核对。
: null} +{cleanLabel === "待核对订单" ?
核对功能上线期初:{HYDROGEN_VERIFY_START_DATE}(含)。仅统计当前查询范围与上线期初之后的交集;此前订单不计入待核对。
: null} {cleanLabel === "加氢利润" && customerBearingScope ? (
利润口径:客户承担订单的对客总价 ¥ diff --git a/src/server/routes/energy/constants.ts b/src/server/routes/energy/constants.ts index c2487c8..f8797cb 100644 --- a/src/server/routes/energy/constants.ts +++ b/src/server/routes/energy/constants.ts @@ -1,5 +1,8 @@ export const HYDROGEN_MIN_DATE = '2024-01-01'; +// 核对功能上线期初(含当日):待核对口径的唯一起算日,前端文案同样引用该常量。 +export { HYDROGEN_VERIFY_START_DATE } from '../../../shared/hydrogen-verify.js'; + // hydrogen_fuel_ledger.refuel_time 已是业务本地时间字面值,直接使用即可(不再 +8 小时) export const HYDROGEN_TABLE = 'hydrogen_fuel_ledger'; export const HYDROGEN_LOCAL = `refuel_time`; diff --git a/src/server/routes/energy/repository.ts b/src/server/routes/energy/repository.ts index de20e0c..b43b304 100644 --- a/src/server/routes/energy/repository.ts +++ b/src/server/routes/energy/repository.ts @@ -13,6 +13,7 @@ import { HYDROGEN_MIN_DATE, HYDROGEN_TABLE, HYDROGEN_TENANT_ID, + HYDROGEN_VERIFY_START_DATE, MANUAL_RECHARGE_SOURCE, NORMALIZED_PLATE, NORMALIZED_PLATE_UNICODE, @@ -765,7 +766,8 @@ export function buildFilterClauses(input: { if (verifyScope === "unverified") clauses.push( "LOWER(COALESCE(NULLIF(TRIM(b.verify_status), ''), 'unverified')) <> 'verified'", - "b.refuel_time >= '2026-05-01'", + // 待核对只统计核对上线期初(含当日)之后的订单,期初之前的历史订单不算待核对。 + `b.refuel_time >= '${HYDROGEN_VERIFY_START_DATE}'`, ); return { clauses, params }; } diff --git a/src/server/routes/energy/routes.test.ts b/src/server/routes/energy/routes.test.ts index a8498e2..e288b6c 100644 --- a/src/server/routes/energy/routes.test.ts +++ b/src/server/routes/energy/routes.test.ts @@ -20,6 +20,7 @@ import { registerHydrogenBiV2Routes, type HydrogenBiV2Dependencies, } from "./hydrogen-bi-v2.js"; +import { HYDROGEN_VERIFY_START_DATE } from "./constants.js"; interface QueryCall { sql: string; @@ -32,6 +33,9 @@ interface CacheCall { } test("待核对的汇总和下钻统一从核对上线期初起统计,不影响其他核对范围", async () => { + // 期初日期以字面量锁定:它同时被前端文案引用,改动必须是有意的。 + assert.equal(HYDROGEN_VERIFY_START_DATE, "2026-01-01"); + const cutoverClause = `b.refuel_time >= '${HYDROGEN_VERIFY_START_DATE}'`; for (const scope of ["unverified", "all", "verified"]) { for (const endpoint of ["overview", "drill"]) { const calls: QueryCall[] = []; @@ -44,7 +48,7 @@ test("待核对的汇总和下钻统一从核对上线期初起统计,不影 const ledgerQueries = calls.filter(({ sql }) => sql.includes("FROM hydrogen_fuel_ledger b")); assert.ok(ledgerQueries.length > 0); for (const { sql } of ledgerQueries) { - assert.equal(sql.includes("b.refuel_time >= '2026-05-01'"), scope === "unverified"); + assert.equal(sql.includes(cutoverClause), scope === "unverified"); } } } diff --git a/src/shared/hydrogen-verify.ts b/src/shared/hydrogen-verify.ts new file mode 100644 index 0000000..7b99213 --- /dev/null +++ b/src/shared/hydrogen-verify.ts @@ -0,0 +1,9 @@ +/** + * 核对功能上线期初(含当日)。 + * + * 「待核对订单」只统计这一天及之后的加氢订单:起算日之前的历史订单视为核对范围之外, + * 不计入待核对笔数与金额。该口径同时决定后端 SQL 过滤(energy/repository.ts)与前端 + * 展示文案(看板诊断卡、下钻弹窗提示),因此收敛到 shared 这一层,避免只改了一处导致 + * 口径与文案不一致。 + */ +export const HYDROGEN_VERIFY_START_DATE = '2026-01-01';