排除普通商品历史残留记录 #78

Merged
limeng merged 1 commits from fix/limeng-product-catalog-history-exclusions into main 2026-08-25 15:34:40 +08:00
Collaborator

任务占用与边界

  • 任务名称:排除普通商品历史残留记录
  • 实际开发者:limeng / Codex
  • 目标结果:聚水潭当前完整导出中不存在的历史副本行不进入普通商品列表和导出,也不显示数据来源标记。
  • 实际修改路径:导入命令与服务、排除辅助表迁移、ProductCatalogMirrorRepository、相关测试、上游镜像文档。
  • 将写入公共契约:ProductCatalogMirrorRepository、product_catalog_authoritative_export_rows、product_catalog_exclusions、product_catalog_authority_states。
  • 仅复用:operations_replica.rpt.jst_sku、caiwu_business_mirror 现有连接和镜像同步。
  • 明确不修改:路由、Controller、权限、菜单、上游数据库和 ops_jst_sku 原始行。

开工碰撞检查

  • 已执行 scripts/codex-task-preflight.ps1
  • 已检查最新 main 和远程任务分支
  • 未发现实际写入重叠

实际改动

  • 流式读取聚水潭普通商品完整 XLSX,按商品编码去重并标准化大小写与 _x002B_ 转义。
  • 记录导出生成时间,只排除生成时间之前已创建但权威导出缺失的普通商品,避免误排除导出后的新增商品。
  • 新代次完整成功后原子替换排除清单;失败保留上一版。
  • 页面和导出统一通过排除表过滤,不删除 ops_jst_sku 原始镜像。

验证证据

  • 相关自动测试:26 passed,158 assertions。
  • 完整 XLSX:479,919 个唯一商品编码。
  • 真实镜像只读复制到本机隔离 MySQL 后对账:549,459 条普通商品;导出后新增 172 条;排除 69,368 条;导出后新增商品误排除 0 条。
  • ZWJ024718P393V01:确认进入排除清单。
  • SQLite 与 MySQL 均验证迁移、流式导入、重复编码、大小写、_x002B_、失败保留旧版、恢复商品和指定编码。
  • 临时 MySQL 验证库已删除。

风险检查

  • 涉及共享业务镜像辅助表迁移和首次校准导入。
  • 回滚:页面在排除表不存在时保持原行为;排除数据独立保存,不删除原始镜像;新导出可恢复此前排除商品。
  • 生产/共享业务库迁移与首次导入尚未授权,本 PR 不执行生产迁移或数据写入。
  • 不涉及金额、权限、审批、路由或上游写入。
  • 未提交 Excel、真实商品明细、凭据、日志或运行产物。
  • 前端改动:不适用。

合并前复查

  • 已重新 fetch 并用实际范围运行预检
  • 已逐文件审核 origin/main...当前分支完整 diff
  • 已确认无越界修改、重复实现、敏感内容和未处理冲突
  • 已授权当前任务 Codex 执行 Squash merge 并验证 main
  • 生产迁移与首次数据导入需另行授权
## 任务占用与边界 - 任务名称:排除普通商品历史残留记录 - 实际开发者:limeng / Codex - 目标结果:聚水潭当前完整导出中不存在的历史副本行不进入普通商品列表和导出,也不显示数据来源标记。 - 实际修改路径:导入命令与服务、排除辅助表迁移、ProductCatalogMirrorRepository、相关测试、上游镜像文档。 - 将写入公共契约:ProductCatalogMirrorRepository、product_catalog_authoritative_export_rows、product_catalog_exclusions、product_catalog_authority_states。 - 仅复用:operations_replica.rpt.jst_sku、caiwu_business_mirror 现有连接和镜像同步。 - 明确不修改:路由、Controller、权限、菜单、上游数据库和 ops_jst_sku 原始行。 ## 开工碰撞检查 - [x] 已执行 scripts/codex-task-preflight.ps1 - [x] 已检查最新 main 和远程任务分支 - [x] 未发现实际写入重叠 ## 实际改动 - 流式读取聚水潭普通商品完整 XLSX,按商品编码去重并标准化大小写与 `_x002B_` 转义。 - 记录导出生成时间,只排除生成时间之前已创建但权威导出缺失的普通商品,避免误排除导出后的新增商品。 - 新代次完整成功后原子替换排除清单;失败保留上一版。 - 页面和导出统一通过排除表过滤,不删除 ops_jst_sku 原始镜像。 ## 验证证据 - 相关自动测试:26 passed,158 assertions。 - 完整 XLSX:479,919 个唯一商品编码。 - 真实镜像只读复制到本机隔离 MySQL 后对账:549,459 条普通商品;导出后新增 172 条;排除 69,368 条;导出后新增商品误排除 0 条。 - ZWJ024718P393V01:确认进入排除清单。 - SQLite 与 MySQL 均验证迁移、流式导入、重复编码、大小写、`_x002B_`、失败保留旧版、恢复商品和指定编码。 - 临时 MySQL 验证库已删除。 ## 风险检查 - 涉及共享业务镜像辅助表迁移和首次校准导入。 - 回滚:页面在排除表不存在时保持原行为;排除数据独立保存,不删除原始镜像;新导出可恢复此前排除商品。 - 生产/共享业务库迁移与首次导入尚未授权,本 PR 不执行生产迁移或数据写入。 - 不涉及金额、权限、审批、路由或上游写入。 - 未提交 Excel、真实商品明细、凭据、日志或运行产物。 - 前端改动:不适用。 ## 合并前复查 - [x] 已重新 fetch 并用实际范围运行预检 - [x] 已逐文件审核 origin/main...当前分支完整 diff - [x] 已确认无越界修改、重复实现、敏感内容和未处理冲突 - [x] 已授权当前任务 Codex 执行 Squash merge 并验证 main - [x] 生产迁移与首次数据导入需另行授权
limeng added 1 commit 2026-08-25 15:32:10 +08:00
limeng changed title from WIP: 排除普通商品历史残留记录 to 排除普通商品历史残留记录 2026-08-25 15:33:15 +08:00
limeng merged commit ac708cb7a9 into main 2026-08-25 15:34:40 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WuYongJie/CaiWuXiTong#78
No description provided.