Files
junhong_cmp_fiber/migrations/000230_add_asset_auto_renewal_attempt.down.sql
break d52be16802
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m15s
feat(资产钱包自动续费): 新增全局配置、每日扫描续购与可靠复机
- 新增单行配置表 tb_asset_auto_renewal_config 与尝试记录表 tb_asset_auto_renewal_attempt(迁移 000229/000230)
- 每日按上海自然日扫描,窗口内以同一资产钱包可用余额续购当前主套餐,资金/订单/套餐/审计同一事务闭合
- 唯一键保证每资产每日至多一次尝试,占位中断由后续扫描收敛,当日不重试
- 四类失败原因向客户与店铺各投递每日至多一条站内通知,并注册通知类型与个人客户白名单
- 续费成功后按条件经 Outbox 可靠投递复机,新增恢复扫描只查询回填,不使用即发即弃调用
- 配置读写仅超级管理员与平台账号,保存记录操作者、前后值快照并登记统一审计
- tasks 7.1–7.15 全部验证通过(本机隔离 PostgreSQL/Redis,零外部渠道调用)
2026-09-17 16:39:26 +08:00

29 lines
1.6 KiB
SQL
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.
-- 回滚资产钱包自动续费尝试记录表,与 up 严格成对。
-- 删除顺序与 up 的创建顺序严格倒序:先删索引与唯一键,再删表(表内 CHECK 约束随表一并移除,
-- 不留残余约束与索引)。
--
-- 不可逆说明ENG-MIG-001 例外条件):本迁移的 down 会删除 tb_asset_auto_renewal_attempt 与
-- 其中的每日尝试、资金扣款、续费订单与复机结果快照。已发生的续费事实仍可通过 tb_order、
-- tb_payment、tb_asset_wallet_transaction、tb_package_usage 与 tb_audit_event 复核,
-- 但「该资产当日是否已尝试/被跳过/复机结果」无法由数据库自身重建,
-- 因此 down 只在上述尝试事实已无留存需求时执行。
--
-- 守卫:存在仍处于处理中(占位后未收敛)的尝试行时直接阻断回滚,避免在未收敛状态下删除记录,
-- 使次日扫描无法把中断的尝试收敛为终态。
DO $$
BEGIN
IF EXISTS (SELECT 1 FROM tb_asset_auto_renewal_attempt WHERE deleted_at IS NULL AND status = 1 LIMIT 1) THEN
RAISE EXCEPTION '存在仍处于处理中的自动续费尝试记录,拒绝回滚以避免丢失未收敛的尝试事实';
END IF;
END $$;
LOCK TABLE tb_asset_auto_renewal_attempt IN ACCESS EXCLUSIVE MODE;
DROP INDEX IF EXISTS idx_asset_auto_renewal_attempt_asset;
DROP INDEX IF EXISTS idx_asset_auto_renewal_attempt_resume_unresolved;
DROP INDEX IF EXISTS idx_asset_auto_renewal_attempt_unfinished;
DROP INDEX IF EXISTS uq_asset_auto_renewal_attempt_key;
DROP TABLE IF EXISTS tb_asset_auto_renewal_attempt;