重构:硬切商品来源并移除旧运维入口
This commit is contained in:
+29
-14
@@ -3,7 +3,7 @@ type: 权威架构与实施计划
|
||||
description: 订单、内部 SKU、履约路由、履约执行、商品、成本与财务的唯一权威口径及重构计划。
|
||||
tags: [订单, 内部SKU, 履约, 商品, 成本, 财务, 迁移]
|
||||
status: authoritative
|
||||
version: 2.1
|
||||
version: 2.2
|
||||
updated_at: 2026-11-08
|
||||
---
|
||||
|
||||
@@ -12,7 +12,7 @@ updated_at: 2026-11-08
|
||||
> 状态:**唯一权威文档**。
|
||||
> 最后校准:2026-11-08。
|
||||
> 生产基线:迁移 `146`。
|
||||
> 开发基线:迁移 `167`(仅本地,尚未部署生产)。
|
||||
> 开发基线:迁移 `168`(仅本地,尚未部署生产)。
|
||||
>
|
||||
> 从本文件生效起,订单、内部 SKU、履约渠道、履约载体、标准商品、成本和财务相关实现,
|
||||
> 只能以本文件为业务口径。其他旧分析只作为历史资料,不再具备设计或验收效力。
|
||||
@@ -332,7 +332,7 @@ finance_journal_* -- 总账凭证,可重建
|
||||
|
||||
2026-11-08 生产只读核对结果:
|
||||
|
||||
- 生产迁移 `146`,本地开发基线迁移 `167`。
|
||||
- 生产迁移 `146`,本地开发基线迁移 `168`。
|
||||
- 启用标准商品 `1127`:`aff:` 30、`tpl:` 903、`tpv:` 46、`man:` 148。
|
||||
- `man:` 商品中只有 105 个当前主渠道为人工;41 个已走其他主渠道,2 个无主渠道。
|
||||
- 人工页头部显示 `107`,商品列表显示 `148`,相差的 41 个就是跨渠道旧商品。
|
||||
@@ -612,6 +612,8 @@ assigned 且 carrier_status=missing 必须进入异常队列
|
||||
并进入 `missing_internal_sku` 异常,而不是触发非空约束。
|
||||
- 迁移 `167`:建立 `v_finance_order_item_scope`,统一销售事实、重建与审计的收入、
|
||||
退款、商品、渠道和业务日口径;增加销售凭证按日查询索引。
|
||||
- 迁移 `168`:商品来源 `source_kind` 增加数据库约束;商品筛选、人工 SKU 清单和成本
|
||||
分支统一读取 `source_kind` / `internal_sku_id`,运行期不再按 `canonical_sku` 前缀判断来源。
|
||||
- 商品列表、总览、渠道映射和商品下拉统一读取商品当前渠道。
|
||||
- 运行期代码停止写入 `product_channel_capabilities`,该表仅保留到兼容期结束。
|
||||
- 只读审计:`npm run audit:product-routing -- --strict`。
|
||||
@@ -619,7 +621,7 @@ assigned 且 carrier_status=missing 必须进入异常队列
|
||||
- 自动/卡券/接单主渠道商品的人工配置均保留为显式 `fallback`,没有被误升为人工主渠道。
|
||||
- 1 个无主路由、无人工配置、无启用映射的 `man:` 商品已归档,未删除历史引用。
|
||||
- 旧 `internal_sku_channels` 已冻结:运行时不再读、不再写,也不再有视图或触发器依赖。
|
||||
- 空库从迁移 `001` 顺序执行到 `167` 已通过;新库不再保留任何旧履约影子同步触发器。
|
||||
- 空库从迁移 `001` 顺序执行到 `168` 已通过;新库不再保留任何旧履约影子同步触发器。
|
||||
- 无主路由的活动商品会进入“未路由”,不自动猜测渠道。
|
||||
|
||||
当前本地仍需业务处理的数据:
|
||||
@@ -751,7 +753,21 @@ npm run audit:finance -- --strict
|
||||
|
||||
### 阶段 6:停止旧写路径并删除兼容层
|
||||
|
||||
状态:履约与财务派生写入路径已在本地收敛;商品、成本、人工配置的全局兼容清理与生产观察期仍需后续完成。
|
||||
状态:本地运行期旧写路径已收敛;兼容数据表和冻结字段保留到生产观察期结束。
|
||||
|
||||
本地已完成:
|
||||
|
||||
- 删除会直接写已改名订单项列的 `reclassify-post-cutover.ts` 和
|
||||
`merge-duplicate-products.ts`。
|
||||
- 删除重复的 `finance:rebuild-cutover` 入口,部署脚本统一调用
|
||||
`finance:rebuild-derived --execute --confirm=REBUILD_DERIVED`。
|
||||
- 删除失效的 `finance:sync` 脚本别名。
|
||||
- 商品来源筛选、归一纠正、成本分支、人工 SKU 清单统一读取
|
||||
`product_catalog.source_kind` 与 `internal_sku_id`。
|
||||
- 商品创建写入口显式写入 `source_kind`,数据库约束只允许
|
||||
`affiliate_dash / work_order / third_party_voucher / manual / unclassified`。
|
||||
- `product_channel_capabilities`、`manual_sku_registry`、`internal_sku_channels` 和历史
|
||||
`legacy_*` 字段继续保留为审计留存,不在生产观察期前删除。
|
||||
|
||||
只有前五个阶段持续稳定后才允许:
|
||||
|
||||
@@ -845,14 +861,13 @@ docs/archive/
|
||||
|
||||
## 十三、当前下一步
|
||||
|
||||
本轮只完成文档和计划,不修改业务代码、不执行生产数据清理。
|
||||
本地阶段 0–6 已按硬切方案完成,生产仍停留在迁移 `146`。后续顺序固定为:
|
||||
|
||||
后续按以下顺序启动:
|
||||
|
||||
1. 完成阶段 1 的只读审计脚本与冲突清单。
|
||||
2. 确定 `internal_skus`、`sku_channel_routes`、`product_catalog.source_kind`
|
||||
的最终字段和迁移顺序。
|
||||
3. 先建立投影,不直接切换写路径。
|
||||
4. 清理派生数据前先做可恢复备份。
|
||||
5. 每个阶段单独验收,不合并成一次性大迁移。
|
||||
1. 生成生产升级清单并做全量备份,不在本地继续扩展新模型。
|
||||
2. 在生产依次执行迁移 `147 → 168`,每阶段运行对应严格审计;
|
||||
无法确定的数据进入未路由或待分类,不做猜测。
|
||||
3. 执行一次 `finance:rebuild-derived` 的 dry-run,核对 A 级数据守恒后,
|
||||
再按窗口执行 `--execute --confirm=REBUILD_DERIVED`。
|
||||
4. 观察一个完整财务期间,确认页面、履约、事实和总账持续对平。
|
||||
5. 观察期结束后,再单独发布兼容表、旧脚本别名和 `legacy_*` 字段的删除迁移。
|
||||
|
||||
|
||||
+5
-4
@@ -219,7 +219,7 @@ docker compose ps
|
||||
docker compose logs -f backend
|
||||
```
|
||||
|
||||
## 财务/成本上线后的初始化(迁移 103–105)
|
||||
## 财务/成本上线后的初始化(当前开发基线 168)
|
||||
|
||||
代码与迁移只负责建表;**存量订单回填、备用金账户、积分余额、商品目录、人工 SKU 不会自动创建**。
|
||||
部署成功后按「回填 → 商品初始化 → 财务同步 → 验收」四步走:
|
||||
@@ -234,7 +234,7 @@ bash deploy/post-deploy.sh --only=backfill # ① 收入回填 + ② 履约
|
||||
> 不要在商品目录为空时直接跑 `--only=sync`:财务同步会为每个未归一订单项写一条
|
||||
> `product_mapping_missing` 成本异常(生产规模 90 天实测约 36 万条),后台异常队列会被淹没。
|
||||
|
||||
脚本包含 `revenue:backfill`、渠道/成本管道重建(`finance:rebuild-cutover`)与只读验收;任何一步都能重跑,
|
||||
脚本包含 `revenue:backfill`、财务派生数据重建(`finance:rebuild-derived`)与只读验收;任何一步都能重跑,
|
||||
`--only=backfill|sync|verify` 可单独执行。
|
||||
|
||||
> 生产 backend 镜像没有 `tsx` 与 `scripts/`,脚本通过 `tools` 镜像执行
|
||||
@@ -255,14 +255,15 @@ bash deploy/post-deploy.sh --only=backfill # ① 收入回填 + ② 履约
|
||||
商品归一完成后执行:
|
||||
|
||||
```bash
|
||||
bash deploy/post-deploy.sh --only=sync # ③ 成本快照 / 销售事实
|
||||
bash deploy/post-deploy.sh --only=sync # ③ 成本快照 / 销售事实 / 总账调整
|
||||
```
|
||||
|
||||
> 工具镜像每次运行都会重建(层缓存下只需几秒),确保 `git pull` 后执行的是当前脚本。
|
||||
|
||||
### 4. 总账与验收
|
||||
|
||||
5. 财务 → 总账与对账 → 同步销售事实到总账 → 检查试算平衡;按需关账/导入平台账单。
|
||||
5. 财务 → 总账与对账 → 检查试算平衡;`post-deploy.sh` 已按日追加销售事实调整凭证,
|
||||
之后按需关账/导入平台账单。
|
||||
|
||||
```bash
|
||||
bash deploy/post-deploy.sh --only=verify # ④ 只读验收
|
||||
|
||||
Reference in New Issue
Block a user