维护:增加商品路由审计并归档孤儿人工商品

This commit is contained in:
yml2213
2026-11-08 19:44:27 +08:00
parent 1634502363
commit f6e193e7f6
4 changed files with 245 additions and 2 deletions
@@ -0,0 +1,49 @@
-- 159_archive_orphan_manual_products.sql
--
-- man: 只表示来源,不能证明当前可履约。
-- 没有主路由、没有启用人工配置、也没有启用商品映射的 man 商品属于孤儿商品,
-- 只归档,不删除;历史订单、成本版本和成本快照继续保留。
WITH candidates AS (
SELECT product.id
FROM product_catalog product
WHERE product.status = 'active'
AND product.source_kind = 'manual'
AND NOT EXISTS (
SELECT 1
FROM sku_channel_routes route
WHERE route.internal_sku_id = product.internal_sku_id
AND route.enabled = TRUE
AND route.route_role = 'primary'
)
AND NOT EXISTS (
SELECT 1
FROM manual_fulfillment_configs config
WHERE config.enabled = TRUE
AND (
config.canonical_product_id = product.id
OR config.internal_sku_id = product.internal_sku_id
OR canonicalize_internal_sku(config.sku_key)
= canonicalize_internal_sku(substring(product.canonical_sku from 5))
)
)
AND NOT EXISTS (
SELECT 1
FROM channel_product_mappings mapping
WHERE mapping.canonical_product_id = product.id
AND mapping.enabled = TRUE
)
)
UPDATE product_catalog product
SET status = 'archived',
attributes_json = COALESCE(product.attributes_json, '{}'::jsonb) || jsonb_build_object(
'legacyManualArchived', TRUE,
'legacyManualArchiveReason', 'no_primary_route_no_config_no_mapping',
'legacyManualArchivedAt', NOW()
),
updated_at = NOW()
FROM candidates
WHERE product.id = candidates.id;
COMMENT ON COLUMN product_catalog.source_kind IS
'标准商品来源类型;来源不等于当前履约渠道,孤儿 man 商品只归档不删除';