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)
42 lines
2.3 KiB
Go
42 lines
2.3 KiB
Go
package adtracking
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
type AdTrackingLink struct {
|
|
ID uint64 `gorm:"primaryKey" json:"id"`
|
|
Name string `gorm:"size:128;not null" json:"name"`
|
|
Code string `gorm:"size:64;not null;uniqueIndex:uk_ad_tracking_links_code" json:"code"`
|
|
ChannelType string `gorm:"size:64;not null;default:'other';index:idx_ad_tracking_links_channel" json:"channel_type"`
|
|
TargetURL string `gorm:"size:512;not null;default:'https://hao858.com/'" json:"target_url"`
|
|
Status string `gorm:"size:16;not null;default:'active';index:idx_ad_tracking_links_status" json:"status"`
|
|
CostCent int64 `gorm:"not null;default:0" json:"cost_cent"`
|
|
Notes string `gorm:"size:500;not null;default:''" json:"notes"`
|
|
CreatedBy uint64 `gorm:"not null;default:0" json:"created_by"`
|
|
CreatedAt time.Time `gorm:"index:idx_ad_tracking_links_created" json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
func (AdTrackingLink) TableName() string {
|
|
return "ad_tracking_links"
|
|
}
|
|
|
|
type AdTrackingClick struct {
|
|
ID uint64 `gorm:"primaryKey" json:"id"`
|
|
LinkID uint64 `gorm:"not null;index:idx_ad_tracking_clicks_link_created,priority:1" json:"link_id"`
|
|
Code string `gorm:"size:64;not null;index:idx_ad_tracking_clicks_code_created,priority:1" json:"code"`
|
|
IP string `gorm:"size:64;not null;default:'';index:idx_ad_tracking_clicks_ip_created,priority:1" json:"ip"`
|
|
UserAgent string `gorm:"size:512;not null;default:''" json:"user_agent"`
|
|
DeviceType string `gorm:"size:32;not null;default:'unknown'" json:"device_type"`
|
|
OS string `gorm:"size:32;not null;default:'unknown'" json:"os"`
|
|
Browser string `gorm:"size:32;not null;default:'unknown'" json:"browser"`
|
|
Referer string `gorm:"size:512;not null;default:''" json:"referer"`
|
|
VisitorID string `gorm:"size:64;not null;default:'';index:idx_ad_tracking_clicks_visitor,priority:1" json:"visitor_id"`
|
|
CreatedAt time.Time `gorm:"index:idx_ad_tracking_clicks_link_created,priority:2;index:idx_ad_tracking_clicks_code_created,priority:2;index:idx_ad_tracking_clicks_ip_created,priority:2;index:idx_ad_tracking_clicks_visitor,priority:2" json:"created_at"`
|
|
}
|
|
|
|
func (AdTrackingClick) TableName() string {
|
|
return "ad_tracking_clicks"
|
|
}
|