Files
hfb_sys/backend/migrations/000064_ad_tracking.sql
T
yml2213 2b11d70ebe feat(adtracking): 新增推广链接追踪与数据大盘,支持自定义短码、注册与下单归因及二维码物料生成
1. 数据库新增 000064_ad_tracking.sql 迁移,创建 ad_tracking_links 和 ad_tracking_clicks 表,并在 users、rental_orders 增加归因字段
2. 后端新增 adtracking 模块,挂载 GET /r/:code 302 智能重定向、点击流水异步记录、转化率/GMV聚合统计及管理接口
3. 用户认证 (auth) 与订单创建 (order) 链路贯通,实现注册用户与订单成交推广短码全链路归因
4. 前端管理后台左侧新增【推广追踪】目录,支持大盘指标总览、推广链接 CRUD、状态启停、一键复制短链及二维码下载 (PNG)
2026-09-10 11:05:47 +08:00

74 lines
3.6 KiB
SQL

-- +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;