hyapp-server/scripts/mysql/061_vip_daily_coin_rebate.sql

76 lines
4.3 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.

-- VIP 每日金币返现由 wallet-service 独占:日 run 固化 UTC 日切金额矩阵,用户返现行保存资格、窗口和领取交易。
-- 本迁移可重复执行;不猜测任一等级金额,历史空配置会安全关闭,等待运营填 metadata_json.coin_amount 后再启用。
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
USE hyapp_wallet;
CREATE TABLE IF NOT EXISTS vip_daily_coin_rebate_runs (
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
task_day CHAR(10) NOT NULL COMMENT 'UTC 日期YYYY-MM-DD',
run_id VARCHAR(96) NOT NULL COMMENT '稳定批任务 ID',
day_start_ms BIGINT NOT NULL COMMENT 'UTC 当日开始epoch ms',
day_end_ms BIGINT NOT NULL COMMENT 'UTC 次日开始,排他结束 epoch ms',
config_version BIGINT NOT NULL COMMENT '创建 run 时 VIP 配置版本',
level_amounts_json JSON NOT NULL COMMENT '等级到返现金额的不可变快照',
status VARCHAR(32) NOT NULL COMMENT 'running/completed',
last_user_id BIGINT NOT NULL DEFAULT 0 COMMENT '已扫描会员游标',
scanned_count BIGINT NOT NULL DEFAULT 0 COMMENT '累计扫描会员数',
created_count BIGINT NOT NULL DEFAULT 0 COMMENT '累计创建返现数',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
completed_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '完成时间UTC epoch ms',
PRIMARY KEY (app_code, task_day),
UNIQUE KEY uk_vip_rebate_run_id (app_code, run_id),
KEY idx_vip_rebate_run_status (app_code, status, task_day)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='VIP 每日金币返现运行快照';
CREATE TABLE IF NOT EXISTS vip_daily_coin_rebates (
app_code VARCHAR(32) NOT NULL COMMENT '应用编码,用于多租户隔离',
rebate_id VARCHAR(96) NOT NULL COMMENT '返现事实 ID',
run_id VARCHAR(96) NOT NULL COMMENT '来源日 run ID',
task_day CHAR(10) NOT NULL COMMENT 'UTC 日期YYYY-MM-DD',
user_id BIGINT NOT NULL COMMENT '领取用户 ID',
vip_level INT NOT NULL COMMENT 'UTC 日切时付费 VIP 等级快照',
vip_name VARCHAR(64) NOT NULL COMMENT 'VIP 名称快照',
coin_amount BIGINT NOT NULL COMMENT '返现金币正整数快照',
status VARCHAR(32) NOT NULL COMMENT 'claimable/claimedexpired 由查询层投影',
available_at_ms BIGINT NOT NULL COMMENT '领取开始UTC epoch ms',
expires_at_ms BIGINT NOT NULL COMMENT '领取排他结束UTC epoch ms',
config_version BIGINT NOT NULL COMMENT '来源 run 的 VIP 配置版本',
claimed_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '实际领取时间UTC epoch ms',
wallet_transaction_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '领取入账交易 ID',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, rebate_id),
UNIQUE KEY uk_vip_rebate_user_day (app_code, task_day, user_id),
KEY idx_vip_rebate_user_day (app_code, user_id, task_day, rebate_id),
KEY idx_vip_rebate_expiry (app_code, status, expires_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='VIP 每日金币返现领取事实';
UPDATE vip_level_benefits
SET status = 'disabled', trial_enabled = FALSE
WHERE benefit_code = 'daily_coin_rebate'
AND (
JSON_EXTRACT(metadata_json, '$.coin_amount') IS NULL
OR JSON_TYPE(JSON_EXTRACT(metadata_json, '$.coin_amount')) <> 'INTEGER'
OR CAST(JSON_UNQUOTE(JSON_EXTRACT(metadata_json, '$.coin_amount')) AS DECIMAL(65, 0)) <= 0
OR CAST(JSON_UNQUOTE(JSON_EXTRACT(metadata_json, '$.coin_amount')) AS DECIMAL(65, 0)) > 9223372036854775807
);
UPDATE vip_level_benefits
SET trial_enabled = FALSE, execution_scope = 'wallet'
WHERE benefit_code = 'daily_coin_rebate';
UPDATE vip_level_benefits
SET execution_scope = 'notice'
WHERE benefit_code = 'online_global_notice';
-- 已经先上线过领取交易的环境补齐统一 VIP command guard同 command 不能再被购买、发卡或另一返现复用。
INSERT IGNORE INTO vip_command_locks (
app_code, command_id, biz_type, request_hash, created_at_ms, updated_at_ms
)
SELECT app_code, command_id, biz_type, request_hash, created_at_ms, updated_at_ms
FROM wallet_transactions
WHERE biz_type = 'vip_daily_coin_rebate';