普通商品与聚水潭同步一致性 #64

Merged
limeng merged 1 commits from feature/limeng-product-catalog-sync into main 2026-08-15 19:10:52 +08:00
Collaborator

任务占用与边界

  • 任务名称:普通商品与聚水潭同步一致性
  • 实际开发者:limeng
  • 任务来源/团队分工:负责人确认实施普通商品持续同步方案
  • 目标结果:普通商品独立高频增量同步;每周可断点全量校准;页面显示同步延迟、最近校准和失败状态
  • 预计修改路径:同步命令与配置、生产激活脚本、普通商品 Repository/Controller/Blade、对应测试和镜像清单文档
  • 将写入的公共契约:business-mirror:sync-product-catalog、upstream_mirrors.product_catalog、upstream_mirrors.table_sync.dedicated_datasets、ProductCatalogMirrorRepository::syncStatus、普通商品生产同步调度
  • 仅复用、明确不修改的公共契约:operations_replica.rpt.jst_sku、ops_jst_sku、business_mirror_table_states、BusinessMirrorSynchronizer::sync、business.pages.show、read-admin-panel
  • 数据源、表/视图和字段:operations_replica / rpt.jst_sku;稳定键 autoid;增量字段 modified;页面范围 sku_type = normal
  • 上游 source_key / scope:复用 operations_replica / operations_replica.rpt.jst_sku,未修改来源配置和 scope
  • 权限名、菜单键或共享组件:复用现有普通商品页面权限和导航,未修改
  • 明确不修改的范围:未新增迁移,未改变商品字段、金额、权限、菜单、其他业务镜像;未执行生产全量同步、数据修复或部署

开工碰撞检查

  • Codex 已执行 scripts/codex-task-preflight.ps1
  • 已检查最新 main 和所有远程任务分支
  • 已搜索主线既有页面、接口、Repository 和数据查询
  • 已把“将写入”和“仅复用、不修改”的公共契约分开;仅复用项不作为单独阻断条件
  • 未发现实际写入重叠

相关分支、重叠项与协调结论:无实际写入重叠;扩展通用轮转排除范围后已更新 WIP PR 并重新预检通过。

实际改动

  • 完成内容:新增普通商品专用同步命令;每分钟最多 5 批、每批 1000 行;通用轮转排除 jst_sku;168 小时后仅在周日 02:00-08:00 启动可断点全量校准;页面展示健康、延迟、增量同步、全量校准、失败和首次同步状态。
  • Codex 实际修改的文件:app/Console/Commands/SyncBusinessMirrors.php、app/Console/Commands/SyncProductCatalogMirror.php、app/Http/Controllers/Business/Pages.php、config/upstream_mirrors.php、两个生产激活脚本、docs/上游业务镜像清单.md、普通商品 Repository/Blade、5 个测试文件。
  • 新增或变更的公共契约:新增 business-mirror:sync-product-catalog;新增 upstream_mirrors.product_catalog 和 dedicated_datasets;新增 ProductCatalogMirrorRepository::syncStatus。
  • 与原计划的差异:为防止专用任务与通用轮转重复处理同一数据集,补充修改 SyncBusinessMirrors 排除列表及其测试;已在修改前更新 PR 并重新预检。

验证证据

  • 正常流程:本地真实页面读取 547,217 行镜像,状态为“同步正常”;款式编码 ZSJ0089 筛选从 547,217 条缩小为 356 条,重置恢复完整列表。
  • 空数据/错误输入/无权限场景:页面测试覆盖镜像未建立、首次同步未完成、同步失败继续显示旧数据、无侧边栏权限返回 403;既有价格区间倒序修正测试继续通过。
  • 受影���旧功能:BusinessMirrorSynchronizerTest 全部通过,覆盖增量回看、稳定游标、断点续传、全量空源保护和 generation 清理;通用轮转仍处理其他数据集。
  • 自动测试及结果:相关 PHP 测试 25 项、145 个断言通过;发布调度测试 1 项、20 个断言通过;页面/Repository复验 10 项、68 个断言通过;git diff --check 通过。
  • 实际页面、接口或只读业务查询结果:桌面 1275x920 与窄屏 390x844 浏览器验证通过;窄屏无整页横向溢出,表格仅局部横向滚动;控制台无 error/warning;命令列表已注册 business-mirror:sync-product-catalog。

风险检查

  • 不涉及金额、权限、审批、数据库迁移、生产配置或数据修复
  • 如涉及上述高风险内容,已在下方写明影响、回滚和所需授权
  • 未提交 .env、密码、Token、私钥、真实财务数据、生产日志或构建产物
  • 前端改动符合 DESIGN.md;无经批准偏差

高风险影响、回滚和授权状态:修改生产激活脚本生成的后台调度内容。每周全量校准复用现有 generation 机制,只在完整扫描成功后删除镜像中上游已不存在的旧行;失败或中断保留上一版镜像。当前未执行生产同步、部署、迁移或数据修复。回滚方式为发布上一镜像版本;实际生产部署仍需单独授权。

合并前复查

  • 已重新拉取远程引用并用实际修改范围再次运行碰撞检查
  • PR 不再是 WIP:,所有测试结果已经补齐
  • Codex 已重新读取原始需求和验收标准,并逐文件审核 origin/main...任务分支 的完整 diff
  • Codex 自审确认无越界修改、重复实现、敏感内容、未处理冲突和未验证结果
  • 合并顺序不会覆盖其他未合并任务
  • 已授权当前任务的 Codex 执行 Squash merge、验证 main 并清理任务分支
  • 如涉及生产迁移、数据修复、删除、覆盖配置或部署,已另行取得对应高风险授权
## 任务占用与边界 - 任务名称:普通商品与聚水潭同步一致性 - 实际开发者:limeng - 任务来源/团队分工:负责人确认实施普通商品持续同步方案 - 目标结果:普通商品独立高频增量同步;每周可断点全量校准;页面显示同步延迟、最近校准和失败状态 - 预计修改路径:同步命令与配置、生产激活脚本、普通商品 Repository/Controller/Blade、对应测试和镜像清单文档 - 将写入的公共契约:`business-mirror:sync-product-catalog`、`upstream_mirrors.product_catalog`、`upstream_mirrors.table_sync.dedicated_datasets`、`ProductCatalogMirrorRepository::syncStatus`、普通商品生产同步调度 - 仅复用、明确不修改的公共契约:`operations_replica.rpt.jst_sku`、`ops_jst_sku`、`business_mirror_table_states`、`BusinessMirrorSynchronizer::sync`、`business.pages.show`、`read-admin-panel` - 数据源、表/视图和字段:`operations_replica / rpt.jst_sku`;稳定键 `autoid`;增量字段 `modified`;页面范围 `sku_type = normal` - 上游 `source_key` / `scope`:复用 `operations_replica` / `operations_replica.rpt.jst_sku`,未修改来源配置和 scope - 权限名、菜单键或共享组件:复用现有普通商品页面权限和导航,未修改 - 明确不修改的范围:未新增迁移,未改变商品字段、金额、权限、菜单、其他业务镜像;未执行生产全量同步、数据修复或部署 ## 开工碰撞检查 - [x] Codex 已执行 `scripts/codex-task-preflight.ps1` - [x] 已检查最新 `main` 和所有远程任务分支 - [x] 已搜索主线既有页面、接口、Repository 和数据查询 - [x] 已把“将写入”和“仅复用、不修改”的公共契约分开;仅复用项不作为单独阻断条件 - [x] 未发现实际写入重叠 相关分支、重叠项与协调结论:无实际写入重叠;扩展通用轮转排除范围后已更新 WIP PR 并重新预检通过。 ## 实际改动 - 完成内容:新增普通商品专用同步命令;每分钟最多 5 批、每批 1000 行;通用轮转排除 `jst_sku`;168 小时后仅在周日 02:00-08:00 启动可断点全量校准;页面展示健康、延迟、增量同步、全量校准、失败和首次同步状态。 - Codex 实际修改的文件:`app/Console/Commands/SyncBusinessMirrors.php`、`app/Console/Commands/SyncProductCatalogMirror.php`、`app/Http/Controllers/Business/Pages.php`、`config/upstream_mirrors.php`、两个生产激活脚本、`docs/上游业务镜像清单.md`、普通商品 Repository/Blade、5 个测试文件。 - 新增或变更的公共契约:新增 `business-mirror:sync-product-catalog`;新增 `upstream_mirrors.product_catalog` 和 `dedicated_datasets`;新增 `ProductCatalogMirrorRepository::syncStatus`。 - 与原计划的差异:为防止专用任务与通用轮转重复处理同一数据集,补充修改 `SyncBusinessMirrors` 排除列表及其测试;已在修改前更新 PR 并重新预检。 ## 验证证据 - 正常流程:本地真实页面读取 547,217 行镜像,状态为“同步正常”;款式编码 `ZSJ0089` 筛选从 547,217 条缩小为 356 条,重置恢复完整列表。 - 空数据/错误输入/无权限场景:页面测试覆盖镜像未建立、首次同步未完成、同步失败继续显示旧数据、无侧边栏权限返回 403;既有价格区间倒序修正测试继续通过。 - 受影���旧功能:`BusinessMirrorSynchronizerTest` 全部通过,覆盖增量回看、稳定游标、断点续传、全量空源保护和 generation 清理;通用轮转仍处理其他数据集。 - 自动测试及结果:相关 PHP 测试 25 项、145 个断言通过;发布调度测试 1 项、20 个断言通过;页面/Repository复验 10 项、68 个断言通过;`git diff --check` 通过。 - 实际页面、接口或只读业务查询结果:桌面 1275x920 与窄屏 390x844 浏览器验证通过;窄屏无整页横向溢出,表格仅局部横向滚动;控制台无 error/warning;命令列表已注册 `business-mirror:sync-product-catalog`。 ## 风险检查 - [ ] 不涉及金额、权限、审批、数据库迁移、生产配置或数据修复 - [x] 如涉及上述高风险内容,已在下方写明影响、回滚和所需授权 - [x] 未提交 `.env`、密码、Token、私钥、真实财务数据、生产日志或构建产物 - [x] 前端改动符合 `DESIGN.md`;无经批准偏差 高风险影响、回滚和授权状态:修改生产激活脚本生成的后台调度内容。每周全量校准复用现有 generation 机制,只在完整扫描成功后删除镜像中上游已不存在的旧行;失败或中断保留上一版镜像。当前未执行生产同步、部署、迁移或数据修复。回滚方式为发布上一镜像版本;实际生产部署仍需单独授权。 ## 合并前复查 - [x] 已重新拉取远程引用并用实际修改范围再次运行碰撞检查 - [x] PR 不再是 `WIP:`,所有测试结果已经补齐 - [x] Codex 已重新读取原始需求和验收标准,并逐文件审核 `origin/main...任务分支` 的完整 diff - [x] Codex 自审确认无越界修改、重复实现、敏感内容、未处理冲突和未验证结果 - [x] 合并顺序不会覆盖其他未合并任务 - [x] 已授权当前任务的 Codex 执行 Squash merge、验证 `main` 并清理任务分支 - [ ] 如涉及生产迁移、数据修复、删除、覆盖配置或部署,已另行取得对应高风险授权
limeng added 1 commit 2026-08-15 19:08:20 +08:00
limeng changed title from WIP: 普通商品与聚水潭同步一致性 to 普通商品与聚水潭同步一致性 2026-08-15 19:10:32 +08:00
limeng merged commit 1993996a96 into main 2026-08-15 19:10:52 +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#64
No description provided.