diff --git a/src/modules/energy/hydrogen/drill/prototype-real-drills.tsx b/src/modules/energy/hydrogen/drill/prototype-real-drills.tsx
index 54623cf..c45749a 100644
--- a/src/modules/energy/hydrogen/drill/prototype-real-drills.tsx
+++ b/src/modules/energy/hydrogen/drill/prototype-real-drills.tsx
@@ -1237,7 +1237,7 @@ export function PrototypeDrillModal({
) : null}
-{cleanLabel === "待核对订单" ?
核对功能上线期初:{HYDROGEN_VERIFY_START_DATE}(含)。仅统计当前查询范围与上线期初之后的交集;此前订单不计入待核对。
: null}
+{cleanLabel === "待核对订单" ? 核对功能上线期初:{HYDROGEN_VERIFY_START_DATE}(含)。仅统计当前查询范围与上线期初之后的交集,且只包含有车牌、已关联羚牛车辆的订单;无车牌、未关联羚牛车辆及上线期初之前的订单不计入待核对。
: null}
{cleanLabel === "加氢利润" && customerBearingScope ? (
利润口径:客户承担订单的对客总价 ¥
diff --git a/src/server/routes/energy/repository.ts b/src/server/routes/energy/repository.ts
index b43b304..4473953 100644
--- a/src/server/routes/energy/repository.ts
+++ b/src/server/routes/energy/repository.ts
@@ -768,6 +768,10 @@ export function buildFilterClauses(input: {
"LOWER(COALESCE(NULLIF(TRIM(b.verify_status), ''), 'unverified')) <> 'verified'",
// 待核对只统计核对上线期初(含当日)之后的订单,期初之前的历史订单不算待核对。
`b.refuel_time >= '${HYDROGEN_VERIFY_START_DATE}'`,
+ // 无车牌的订单没有核对对象;未关联羚牛车辆(vehicle_id 为 NULL 或 0)的订单
+ // 无法与车辆库对账,两者都不进入待核对范围。
+ "NULLIF(TRIM(b.license_plate), '') IS NOT NULL",
+ "COALESCE(b.vehicle_id, 0) <> 0",
);
return { clauses, params };
}
diff --git a/src/server/routes/energy/routes.test.ts b/src/server/routes/energy/routes.test.ts
index e288b6c..d5787c8 100644
--- a/src/server/routes/energy/routes.test.ts
+++ b/src/server/routes/energy/routes.test.ts
@@ -35,7 +35,13 @@ interface CacheCall {
test("待核对的汇总和下钻统一从核对上线期初起统计,不影响其他核对范围", async () => {
// 期初日期以字面量锁定:它同时被前端文案引用,改动必须是有意的。
assert.equal(HYDROGEN_VERIFY_START_DATE, "2026-01-01");
- const cutoverClause = `b.refuel_time >= '${HYDROGEN_VERIFY_START_DATE}'`;
+ const unverifiedOnlyClauses = [
+ // 期初之前的订单不算待核对。
+ `b.refuel_time >= '${HYDROGEN_VERIFY_START_DATE}'`,
+ // 无车牌、或未关联羚牛车辆(vehicle_id 为 NULL/0)的订单没有核对对象。
+ "NULLIF(TRIM(b.license_plate), '') IS NOT NULL",
+ "COALESCE(b.vehicle_id, 0) <> 0",
+ ];
for (const scope of ["unverified", "all", "verified"]) {
for (const endpoint of ["overview", "drill"]) {
const calls: QueryCall[] = [];
@@ -48,7 +54,13 @@ 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(cutoverClause), scope === "unverified");
+ for (const clause of unverifiedOnlyClauses) {
+ assert.equal(
+ sql.includes(clause),
+ scope === "unverified",
+ `${endpoint}/${scope} 对待核对限定条件「${clause}」的处理不符合预期`,
+ );
+ }
}
}
}