共享业务镜像库与商品价格同步样板 #52

Merged
WuYongJie merged 1 commits from feature/WuYongJie-business-mirror-product-prices into main 2026-08-14 15:21:49 +08:00
Owner

目标

将“商品价格”从按页查询快照改为项目共享业务镜像表,解决第一页有数据、翻页却需要另一份冷快照的问题,并建立后续业务表物化同步的可复用样板。

实际修改范围

  • 新增独立逻辑库连接 business_mirror,默认与系统配置库复用同一 MariaDB/TLS/账号,但数据和表结构分库保存。
  • 新增 business_mirror_sync_states、product_price_mirror_rows 迁移。
  • 新增 business-mirror:sync-product-prices,支持可断点首次全量同步及 48 小时重叠增量同步。
  • 商品价格上游固定读取 operations_replica / rpt.Bulk_Price_Limit,使用 datetime2(7)+业务ID+条码稳定游标,小批量参数化只读查询。
  • 商品价格页面改为读取共享镜像并使用真实总数分页;首次全量未完成时明确提示,不将部分数据显示成完整结果。
  • 生产激活脚本只在获得迁移授权时创建镜像库/授权/执行迁移;定时刷新与旧快照共用上游互斥锁。
  • 更新团队规则和开发部署文档,明确快照是过渡方案,新业务查询采用镜像表。

写入公共契约

  • DB connection: business_mirror
  • logical DB: caiwu_business_mirror
  • dataset: supplier-payables.product-prices
  • tables: business_mirror_sync_states, product_price_mirror_rows
  • command: business-mirror:sync-product-prices

仅复用、不修改

  • upstream source: operations_replica
  • upstream view: rpt.Bulk_Price_Limit
  • existing business route/view and shared system-database credentials

验证

  • 关键测试:15 passed,118 assertions。
  • 覆盖:稳定游标、参数绑定、首次全量门槛、断点批量同步、第二页、总数、通配符字面筛选、相同业务ID/条码不同完成时间不丢行、页面未初始化提示。
  • 隔离 MariaDB:迁移 up 创建两表,down 删除两表,临时数据库已清理。
  • PHP 语法 12 个改动文件通过;4 个部署脚本 bash -n 通过;git diff --check 通过。
  • 全量 PHPUnit:414 tests / 2169 assertions,其中 406 passed;1 error + 7 failures 均位于既有金额空字符串、侧栏设计、银行对账、通用业务路由/公司/仪表盘测试,与本分支文件和镜像链路无关;本次 15 个目标测试全部通过。

高风险与回滚

  • 本 PR 含生产数据库新库/新表迁移,但尚未在生产执行,也未触发首次全量同步。
  • 正式部署前必须备份共享 MariaDB,并由负责人单独授权创建 caiwu_business_mirror、执行迁移和读取上游生成首份镜像。
  • 首次同步完成前页面保持明确“同步中”状态;失败保留已写入数据和断点,旧页面不会伪造空数据。
  • 回滚应用版本不会删除镜像库;如需删除镜像表必须另行明确授权执行迁移回滚。
## 目标 将“商品价格”从按页查询快照改为项目共享业务镜像表,解决第一页有数据、翻页却需要另一份冷快照的问题,并建立后续业务表物化同步的可复用样板。 ## 实际修改范围 - 新增独立逻辑库连接 `business_mirror`,默认与系统配置库复用同一 MariaDB/TLS/账号,但数据和表结构分库保存。 - 新增 `business_mirror_sync_states`、`product_price_mirror_rows` 迁移。 - 新增 `business-mirror:sync-product-prices`,支持可断点首次全量同步及 48 小时重叠增量同步。 - 商品价格上游固定读取 `operations_replica / rpt.Bulk_Price_Limit`,使用 datetime2(7)+业务ID+条码稳定游标,小批量参数化只读查询。 - 商品价格页面改为读取共享镜像并使用真实总数分页;首次全量未完成时明确提示,不将部分数据显示成完整结果。 - 生产激活脚本只在获得迁移授权时创建镜像库/授权/执行迁移;定时刷新与旧快照共用上游互斥锁。 - 更新团队规则和开发部署文档,明确快照是过渡方案,新业务查询采用镜像表。 ## 写入公共契约 - DB connection: `business_mirror` - logical DB: `caiwu_business_mirror` - dataset: `supplier-payables.product-prices` - tables: `business_mirror_sync_states`, `product_price_mirror_rows` - command: `business-mirror:sync-product-prices` ## 仅复用、不修改 - upstream source: `operations_replica` - upstream view: `rpt.Bulk_Price_Limit` - existing business route/view and shared system-database credentials ## 验证 - 关键测试:15 passed,118 assertions。 - 覆盖:稳定游标、参数绑定、首次全量门槛、断点批量同步、第二页、总数、通配符字面筛选、相同业务ID/条码不同完成时间不丢行、页面未初始化提示。 - 隔离 MariaDB:迁移 up 创建两表,down 删除两表,临时数据库已清理。 - PHP 语法 12 个改动文件通过;4 个部署脚本 `bash -n` 通过;`git diff --check` 通过。 - 全量 PHPUnit:414 tests / 2169 assertions,其中 406 passed;1 error + 7 failures 均位于既有金额空字符串、侧栏设计、银行对账、通用业务路由/公司/仪表盘测试,与本分支文件和镜像链路无关;本次 15 个目标测试全部通过。 ## 高风险与回滚 - 本 PR 含生产数据库新库/新表迁移,但尚未在生产执行,也未触发首次全量同步。 - 正式部署前必须备份共享 MariaDB,并由负责人单独授权创建 `caiwu_business_mirror`、执行迁移和读取上游生成首份镜像。 - 首次同步完成前页面保持明确“同步中”状态;失败保留已写入数据和断点,旧页面不会伪造空数据。 - 回滚应用版本不会删除镜像库;如需删除镜像表必须另行明确授权执行迁移回滚。
WuYongJie added 1 commit 2026-08-14 15:16:04 +08:00
WuYongJie changed title from WIP: 共享业务镜像库与商品价格同步样板 to 共享业务镜像库与商品价格同步样板 2026-08-14 15:21:12 +08:00
WuYongJie merged commit e08cfca1e9 into main 2026-08-14 15:21:49 +08:00
WuYongJie deleted branch feature/WuYongJie-business-mirror-product-prices 2026-08-14 15:21:50 +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#52
No description provided.