-- 实名即生效套餐沉默期:套餐记录字段(add-package-silence-period,技术方案 §3.1)。 -- 沉默期按每笔套餐计算,字段只建在套餐记录上,资产上不建沉默期字段。 -- 过期时 status 保持 0,由激活闸门按 silence_status 拦截。 -- 状态与时间类可空;计数类 NOT NULL DEFAULT 0;布尔 NOT NULL DEFAULT false(PostgreSQL 11+ 常量默认值不重写整表)。 ALTER TABLE tb_package_usage ADD COLUMN silence_status VARCHAR(16), ADD COLUMN silence_start_at TIMESTAMPTZ, ADD COLUMN silence_period_days INTEGER, ADD COLUMN silence_deadline_at TIMESTAMPTZ, ADD COLUMN silence_extended_days INTEGER NOT NULL DEFAULT 0, ADD COLUMN silence_paid_extended_days INTEGER NOT NULL DEFAULT 0, ADD COLUMN silence_extension_count INTEGER NOT NULL DEFAULT 0, ADD COLUMN silence_free_extension_used INTEGER NOT NULL DEFAULT 0, ADD COLUMN silence_expired_at TIMESTAMPTZ, ADD COLUMN silence_adjust_pending BOOLEAN NOT NULL DEFAULT FALSE; ALTER TABLE tb_package_usage ADD CONSTRAINT ck_package_usage_silence_status CHECK (silence_status IS NULL OR silence_status IN ('waiting', 'expired', 'ended')); COMMENT ON COLUMN tb_package_usage.silence_status IS '沉默期状态:空-不适用 waiting-待实名 expired-沉默期已过期(status 保持 0) ended-截止前已实名'; COMMENT ON COLUMN tb_package_usage.silence_start_at IS '沉默期起算时间(购买支付成功时间)'; COMMENT ON COLUMN tb_package_usage.silence_period_days IS '最终沉默期天数(套餐默认值或购买时调整值)'; COMMENT ON COLUMN tb_package_usage.silence_deadline_at IS '当前沉默期截止时间(截止日 23:59:59 Asia/Shanghai,延期后更新)'; COMMENT ON COLUMN tb_package_usage.silence_extended_days IS '累计已延期天数(全部延期)'; COMMENT ON COLUMN tb_package_usage.silence_paid_extended_days IS '其中付费延期(在线与线下)累计天数,与政策累计上限比较'; COMMENT ON COLUMN tb_package_usage.silence_extension_count IS '累计延期次数'; COMMENT ON COLUMN tb_package_usage.silence_free_extension_used IS '已使用的免费延期次数'; COMMENT ON COLUMN tb_package_usage.silence_expired_at IS '最近一次沉默期过期时间'; COMMENT ON COLUMN tb_package_usage.silence_adjust_pending IS '购买时调整沉默期的审批是否进行中(进行中不过期)';