-- +goose Up -- 分销站点结算冷却期:订单完成后 N 天自动释放到可提现余额,0 表示立即释放。 ALTER TABLE distribution_sites ADD COLUMN settlement_hold_days INT NOT NULL DEFAULT 7 COMMENT '订单完成后结算释放冷却天数,0=立即释放'; -- 财务快照记录释放时间:release_at 为订单完成时间 + 站点冷却期,released_at 为实际入账时间。 ALTER TABLE distribution_order_financials ADD COLUMN release_at DATETIME(6) NULL COMMENT '预计释放时间(订单完成时间+站点冷却期)', ADD COLUMN released_at DATETIME(6) NULL COMMENT '实际释放入账时间', ADD KEY idx_distribution_financial_release (settlement_status, release_at); -- 回填历史已完成订单的释放时间,使其纳入自动释放。 UPDATE distribution_order_financials f JOIN rental_orders ro ON ro.id = f.order_id JOIN distribution_sites s ON s.id = f.site_id SET f.release_at = DATE_ADD(COALESCE(ro.settled_at, f.created_at), INTERVAL s.settlement_hold_days DAY) WHERE f.settlement_status = 'pending' AND f.release_at IS NULL AND ro.status = 'completed'; -- +goose Down ALTER TABLE distribution_order_financials DROP KEY idx_distribution_financial_release, DROP COLUMN released_at, DROP COLUMN release_at; ALTER TABLE distribution_sites DROP COLUMN settlement_hold_days;