From 657e49f324fce00a6b260d4c4421432c5cf33783 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Sat, 31 Oct 2026 20:26:10 +0800 Subject: [PATCH] =?UTF-8?q?perf(pipeline):=20=E5=B7=B2=E5=85=A5=E9=98=9F?= =?UTF-8?q?=E7=9A=84=E5=BC=82=E5=B8=B8=E4=B8=8D=E5=86=8D=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=20upsert=EF=BC=8C=E6=9C=AA=E6=98=A0=E5=B0=84=E5=8F=AA=E7=AE=97?= =?UTF-8?q?=E5=B7=B2=E5=AE=9A=E6=B8=A0=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 载体/人工配置/人工成本三类扫描跳过已有未解决异常的订单项 - 成本中心「未映射订单项」只统计 assigned,待分类单归履约队列 --- .../cost-center-overview-service.ts | 3 ++- .../scheduler/finance-pipeline-jobs.ts | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/apps/backend/src/services/cost-center/cost-center-overview-service.ts b/apps/backend/src/services/cost-center/cost-center-overview-service.ts index 3b56cd0c..b7204500 100644 --- a/apps/backend/src/services/cost-center/cost-center-overview-service.ts +++ b/apps/backend/src/services/cost-center/cost-center-overview-service.ts @@ -90,7 +90,8 @@ export async function getAdminCostCenterOverview(params: { scope?: string } = {} SELECT COUNT(*)::int FROM order_items oi WHERE oi.canonical_product_id IS NULL - AND oi.fulfillment_status <> 'archived' + -- 只统计已定渠道的单:待分类单还没有渠道,不能算「未映射」。 + AND oi.fulfillment_status = 'assigned' AND ($1::text IS NULL OR COALESCE(oi.fulfillment_channel, CASE WHEN oi.fulfillment_status = 'archived' THEN 'archived' ELSE 'pending' END) = $1) ) AS unmapped_order_item_count `, diff --git a/apps/backend/src/services/scheduler/finance-pipeline-jobs.ts b/apps/backend/src/services/scheduler/finance-pipeline-jobs.ts index 9eef7e5b..568681ca 100644 --- a/apps/backend/src/services/scheduler/finance-pipeline-jobs.ts +++ b/apps/backend/src/services/scheduler/finance-pipeline-jobs.ts @@ -97,6 +97,14 @@ export async function runCarrierDispatchJob(job: JsonObject = {}) { SELECT 1 FROM manual_fulfillment_configs cfg WHERE cfg.sku_key = oi.manual_sku_key AND cfg.enabled ) + AND NOT EXISTS ( + SELECT 1 + FROM cost_exception_items i + JOIN cost_exceptions ce ON ce.id = i.exception_id + WHERE i.order_item_id = oi.id + AND ce.reason = 'manual_config_missing' + AND ce.status <> 'resolved' + ) ORDER BY oi.id LIMIT $1 `, @@ -126,6 +134,14 @@ export async function runCarrierDispatchJob(job: JsonObject = {}) { AND cs.order_item_id = oi.id AND cs.superseded_at IS NULL ) + AND NOT EXISTS ( + SELECT 1 + FROM cost_exception_items i + JOIN cost_exceptions ce ON ce.id = i.exception_id + WHERE i.order_item_id = oi.id + AND ce.reason = 'manual_cost_missing' + AND ce.status <> 'resolved' + ) ORDER BY oi.id LIMIT $1 `, @@ -156,6 +172,14 @@ export async function runCarrierDispatchJob(job: JsonObject = {}) { AND NOT EXISTS ( SELECT 1 FROM work_orders wo WHERE wo.order_item_id = oi.id ) + AND NOT EXISTS ( + SELECT 1 + FROM cost_exception_items i + JOIN cost_exceptions ce ON ce.id = i.exception_id + WHERE i.order_item_id = oi.id + AND ce.reason = 'carrier_missing' + AND ce.status <> 'resolved' + ) ORDER BY oi.id LIMIT $1 `,