Files
inkreach-prefect/docs/sql/2026-09-28-goods-status-allow-pause.sql
yeuimu c030eca178
CI / test (pull_request) Successful in 1m35s
fix: RIIN 商品状态补 COMPLETE/PAUSE 映射,修复 Goods.status 大面积 NULL
问题:RIIN 商品级 goodsStatus 复用平台状态枚举,COMPLETE/PAUSE 无映射,
.get() 返回 None 落库为 NULL,累计 206 万行(占 RIIN 商品 33.75%),
终态订单不再被 refresh_pending 刷新而长期滞留。该缺口继承自
inkreach-bi-auth-mng TS 版,且 TS 的 warnUnknown 告警在移植时被省略,
导致从未暴露。

修复:
- RIIN_GOODS_STATUS_MAP 补 COMPLETE=已完成、PAUSE=暂停
- 对齐 TS 版 warnUnknown:四个状态映射函数对未知值告警(同值只报一次)
- docs/sql:Goods.status 约束新增允许"暂停"(原约束拒绝,已在库执行)
- scripts/backfill_riin_goods_status.py:存量 NULL 按"已发货"订单终态
  近似回填(幂等、分批);"已关闭"与非终态订单走 by-orders 重拉真值
- tests/test_mappers.py:9 个单测全过;实单 GSU1S555400MFLL e2e 验证
  4 行 NULL → 已完成/暂停
2026-09-28 03:02:05 +00:00

14 lines
784 B
SQL

-- 2026-09-28 Goods.status 约束新增允许 '暂停'
-- 背景:RIIN 商品级 goodsStatus 复用平台状态枚举,存在 PAUSE(暂停),
-- 原约束未包含该值,导致映射层只能落 NULL(chk_goods_status 拒绝其余新值)。
-- 配套:mappers.py 的 RIIN_GOODS_STATUS_MAP 补 COMPLETE/PAUSE。
-- 执行方式(两步,避免阻塞 ETL 写入;VALIDATE 只锁 SHARE UPDATE EXCLUSIVE):
ALTER TABLE "Goods" DROP CONSTRAINT chk_goods_status;
ALTER TABLE "Goods" ADD CONSTRAINT chk_goods_status CHECK (
status IS NULL OR status = ANY (ARRAY[
'备货中', '已删除', '已取消', '已完成', '待付款', '待确认',
'搁置中', '待发货', '已发货', '退款中', '暂停'
])
) NOT VALID;
ALTER TABLE "Goods" VALIDATE CONSTRAINT chk_goods_status;