Files
break 370fd3e67f
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m49s
update
2026-09-03 09:28:28 +08:00

1.6 KiB
Raw Blame History

Context

step2 套餐使用 SQL 已从 tb_package 读取流量、名称及价格配置快照,但遗漏计时条款快照列;新记录因此使用表默认空值和零值,触发数据库完整性校验失败。

Goals / Non-Goals

Goals:

  • 从 SQL 已连接的目标套餐行直接写入四个计时条款快照。
  • 保持现有套餐选择、状态、优先级和冲突幂等键不变。

Non-Goals:

  • 不修改套餐使用表、触发器或历史记录。
  • 不推断或修正目标套餐自身的计时条款配置。

Decisions

  • INSERT 列表和对应 SELECT 中加入 p.expiry_basep.calendar_type 及按周期类型规范化后的时长快照:natural_month 保留 p.duration_months 并写零天数,by_day 保留 p.duration_days 并写零月数。这与正常下单的领域快照规则一致;目标套餐的非适用时长字段不进入使用记录快照。
  • 不在 SQL 使用 COALESCE 或常量兜底有效时长。目标套餐配置无效时应由数据库完整性约束拒绝,不能静默写入错误快照。

Risks / Trade-offs

  • [目标套餐存在无效计时配置] → SQL 将被触发器拒绝;在正式执行前用隔离数据库检查生成 SQL并修正目标套餐配置。
  • [执行旧生成文件] → 仍会失败;必须重新生成并替换 step2_02_package_usages.sql

Migration Plan

  1. 修改生成器并重新生成 step2 输出。
  2. 在隔离环境执行新的套餐使用 SQL确认无快照触发器错误。
  3. 维护者在生产环境按事务执行新生成文件;失败时事务自动回滚,无需数据回滚。