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

30 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Context
step2 套餐使用 SQL 已从 `tb_package` 读取流量、名称及价格配置快照,但遗漏计时条款快照列;新记录因此使用表默认空值和零值,触发数据库完整性校验失败。
## Goals / Non-Goals
**Goals:**
- 从 SQL 已连接的目标套餐行直接写入四个计时条款快照。
- 保持现有套餐选择、状态、优先级和冲突幂等键不变。
**Non-Goals:**
- 不修改套餐使用表、触发器或历史记录。
- 不推断或修正目标套餐自身的计时条款配置。
## Decisions
-`INSERT` 列表和对应 `SELECT` 中加入 `p.expiry_base``p.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. 维护者在生产环境按事务执行新生成文件;失败时事务自动回滚,无需数据回滚。