refactor: 移除 Rock 发货处理中状态,新增异常派生筛选标记

- 新增迁移 028:历史 redeeming 回退为 bound,重建 pending 部分索引
- pending 语义改为 bound + redeem_requested_at 标记,不再写状态与状态日志
- 新增 anomaly 虚拟筛选项:基于状态日志派生异常标记,不改状态、不落库
- 状态列追加「⚠️ 异常」标签,统计新增 anomaly_stock
- 清理前后端 redeeming 相关分支与文案
This commit is contained in:
2026-11-14 15:40:19 +08:00
parent f0dea6a583
commit a9473990be
25 changed files with 620 additions and 219 deletions
@@ -0,0 +1,22 @@
-- 028: 移除 redeeming 状态,pending 改为纯标记字段;恢复 redeeming 历史数据
-- 背景:上游异步兑奖不再占用独立状态,Token 保持 bound,
-- 用 redeem_requested_at / redeemed_at 判定「发货确认中」。
-- 1) 回退历史 redeeming 数据:只回状态,不写状态日志,避免伪造流转。
UPDATE rock_tokens
SET status = 'bound',
updated_at = NOW()
WHERE status = 'redeeming'
AND redeemed_at IS NULL;
-- 2) 旧的 pending 索引依赖 status='redeeming',必须替换为标记口径。
DROP INDEX IF EXISTS idx_rock_tokens_redeem_next_retry_at;
CREATE INDEX IF NOT EXISTS idx_rock_tokens_redeem_pending
ON rock_tokens (redeem_next_retry_at)
WHERE redeem_requested_at IS NOT NULL
AND redeemed_at IS NULL;
COMMENT ON COLUMN rock_tokens.redeem_requested_at IS '提交上游兑换的时间(发货确认中标记,非状态)';
COMMENT ON COLUMN rock_tokens.redeem_next_retry_at IS '下一次允许轮询上游的时间(指数退避)';
COMMENT ON COLUMN rock_tokens.redeem_timeout_warned_at IS '超过等待上限仍未确认时写入的告警时间(仅标记)';