-- +goose Up CREATE TABLE ad_tracking_links ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(128) NOT NULL COMMENT '推广名称', code VARCHAR(64) NOT NULL COMMENT '自定义短码后缀', channel_type VARCHAR(64) NOT NULL DEFAULT 'other' COMMENT '渠道场景类型: cybercafe/campus/offline_promo/partner/online_ad/other', target_url VARCHAR(512) NOT NULL DEFAULT 'https://hao858.com/' COMMENT '目标跳转落地页', status VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态: active启用/disabled停用', cost_cent BIGINT NOT NULL DEFAULT 0 COMMENT '投放预算或成本(分)', notes VARCHAR(500) NOT NULL DEFAULT '' COMMENT '备注说明', created_by BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建管理员ID', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_ad_tracking_links_code (code), KEY idx_ad_tracking_links_status (status), KEY idx_ad_tracking_links_channel (channel_type), KEY idx_ad_tracking_links_created (created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='广告与推广追踪链接'; CREATE TABLE ad_tracking_clicks ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, link_id BIGINT UNSIGNED NOT NULL COMMENT '推广链接ID', code VARCHAR(64) NOT NULL COMMENT '推广短码', ip VARCHAR(64) NOT NULL DEFAULT '' COMMENT '访问客户端IP', user_agent VARCHAR(512) NOT NULL DEFAULT '' COMMENT '客户端UA', device_type VARCHAR(32) NOT NULL DEFAULT 'unknown' COMMENT '设备类型: pc/mobile/tablet/unknown', os VARCHAR(32) NOT NULL DEFAULT 'unknown' COMMENT '操作系统', browser VARCHAR(32) NOT NULL DEFAULT 'unknown' COMMENT '浏览器', referer VARCHAR(512) NOT NULL DEFAULT '' COMMENT '来源Referer', visitor_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '访客终端唯一ID', created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_ad_tracking_clicks_link_created (link_id, created_at), KEY idx_ad_tracking_clicks_code_created (code, created_at), KEY idx_ad_tracking_clicks_ip_created (ip, created_at), KEY idx_ad_tracking_clicks_visitor (visitor_id, created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='推广链接跳转点击流水'; ALTER TABLE users ADD COLUMN register_track_code VARCHAR(64) NULL DEFAULT NULL COMMENT '注册来源推广短码'; ALTER TABLE users ADD KEY idx_users_register_track_code (register_track_code); ALTER TABLE rental_orders ADD COLUMN source_track_code VARCHAR(64) NULL DEFAULT NULL COMMENT '订单来源推广短码'; ALTER TABLE rental_orders ADD KEY idx_rental_orders_source_track_code (source_track_code); INSERT INTO permissions (code, name, resource, action) VALUES ('ad_tracking:manage', '管理推广链接与数据追踪', 'ad_tracking', 'manage') ON DUPLICATE KEY UPDATE name = VALUES(name), resource = VALUES(resource), action = VALUES(action); INSERT IGNORE INTO role_permissions (role_id, permission_id) SELECT r.id, p.id FROM roles r, permissions p WHERE r.code IN ('super_admin', 'operator') AND p.code = 'ad_tracking:manage'; -- +goose Down DELETE rp FROM role_permissions rp JOIN permissions p ON p.id = rp.permission_id WHERE p.code = 'ad_tracking:manage'; DELETE FROM permissions WHERE code = 'ad_tracking:manage'; ALTER TABLE rental_orders DROP KEY idx_rental_orders_source_track_code; ALTER TABLE rental_orders DROP COLUMN source_track_code; ALTER TABLE users DROP KEY idx_users_register_track_code; ALTER TABLE users DROP COLUMN register_track_code; DROP TABLE IF EXISTS ad_tracking_clicks; DROP TABLE IF EXISTS ad_tracking_links;