Files
web_huangguo2_server/pub/common/statcenter/stat.go
T
2026-09-29 10:47:38 +08:00

228 lines
11 KiB
Go

package statcenter
import (
"time"
"videoweb/pub/pubdef"
"github.com/shopspring/decimal"
)
type KFKTopic string
const (
STAT_APPID int32 = pubdef.AppId
USER_REG KFKTopic = "user_register" // 用户注册
USER_RECH KFKTopic = "user_recharge" // 用户充值(成功)
USER_RECH_ALL KFKTopic = "user_recharge_all" // 全部充值订单
USER_ACCE KFKTopic = "user_access" // 用户访问
USER_BINDING KFKTopic = "user_binding" // 用户绑定(邮箱/正式注册)
USER_INVITE KFKTopic = "user_invite" // 用户邀请绑定
VipJob KFKTopic = "vip" // VIP 购买(兼容旧任务)
RechargeAll KFKTopic = "rechargeAll" // 全部充值(兼容旧任务名)
RegisterLightJob KFKTopic = "registerLight" // H5 轻量注册
ConsumeRecordJob KFKTopic = "consume_record" // 产品消费流水
CardSellJob KFKTopic = "card_sell" // 会员卡销售流水
AI_SELL_JOB KFKTopic = "ai_sell" // AI 消费(本项目无此业务)
)
const (
StatVipCard = iota // 会员卡
StatValueAddSer // 增值/其他消费
StatVideoUnlock // 视频解锁
)
const (
CurrencyTypeGold = iota // 金币
CurrencyTypeCash // 现金
)
// StatcenterSyncReq 统计中心增量同步请求
type StatcenterSyncReq struct {
Job string `json:"job" bson:"job"` // 同步任务类型
UserId uint64 `json:"userId" bson:"userId"` // 用户(注册)
PlatformId string `json:"platformId" bson:"platformId"` // 原始平台Id(访问/流水)
SuccessTime time.Time `json:"successTime"` // 游标时间(购买会员、提现、充值)
MaxSize int64 `json:"maxSize" bson:"maxSize"` // 最大条数
}
// StatcenterSyncResp 统计中心增量同步响应
type StatcenterSyncResp struct {
Code int `json:"code"` // 200正常 其他异常
Msg string `json:"msg"` // 错误消息
Job string `json:"job" bson:"job"` // 类型
VisitList []UserVisitMsg `json:"visitList"` // 日活记录(旧字段,兼容)
AccessList []UserVisitMsg `json:"accessList"` // 日活记录
RegisterList []UserRegisterMsg `json:"registerList"` // 注册记录
BindingList []UserBindingMsg `json:"bindingList"` // 用户绑定记录
InviteList []UserInviteBindMsg `json:"inviteList"` // 邀请绑定
ConsumeList []ConsumeRecordMsg `json:"consumeList"` // 消费流水
RechargeList []UserRechargeMsg `json:"rechargeList"` // 充值记录
AllRechargeList []UserRechargeMsg `json:"allRechargeList"` // 全部支付订单
VipList []UserBuyVIPMsg `json:"buyVipList"` // VIP购买记录
CardSellList []CardSellMsg `json:"cardSellList"` // 会员卡销售流水
AiSellList []AiSellMsg `json:"aiSellList"` // AI销售流水
}
// 用户访问消息
type UserVisitMsg struct {
UserId uint64 `json:"userId" bson:"userId"` // 用户ID
PlatformId string `json:"platformId" bson:"platformId"` // 原始平台流水Id
AppId int32 `json:"appId" bson:"appId"` // appID
SysType string `json:"sysType" bson:"sysType"` // 操作系统类型 安卓 IOS
DevType string `json:"devType,omitempty" bson:"devType"` // 设备型号
IP string `json:"ip,omitempty" bson:"ip"` // IP
Version string `json:"version,omitempty" bson:"version"` // APP版本号
DevID string `json:"devID,omitempty" bson:"devID"` // 设备ID
VisitAt time.Time `json:"visitAt,omitempty" bson:"visitAt"` // 访问时间
IsDirect bool `json:"isDirect,omitempty"` // true:是直推用户
DistrictCode string `json:"districtCode,omitempty"` // 渠道码
RegisterTime time.Time `json:"registerTime,omitempty"` // 用户注册时间
}
// 用户注册消息
type UserRegisterMsg struct {
UserId uint64 `json:"userId" bson:"userId" binding:"required"` // 用户ID
AppId int32 `json:"appId" bson:"appId" binding:"required"` // appID
SysType string `json:"sysType" bson:"sysType" binding:"required"` // 操作系统类型 安卓 IOS
PlatformId string `json:"platformId" bson:"platformId"` // 原始平台流水Id
DevType string `json:"devType" bson:"devType"` // 设备类型
Mobile string `json:"mobile" bson:"mobile"` // 手机号
IP string `json:"ip,omitempty" bson:"ip"` // IP
Name string `json:"name" bson:"name"` // 名称
IsDirect bool `json:"isDirect" bson:"isDirect" binding:"required"` // true:是直推用户
DistrictCode string `json:"districtCode" bson:"districtCode" ` // 渠道码
PromSeqe string `json:"promSeqe,omitempty" bson:"promSeqe"` // 全名代理
PromCode string `json:"promCode,omitempty" bson:"promCode"` // 推广序列
PUC string `json:"puc" bson:"puc"` // 应用中心推广
RegisterTime time.Time `json:"registerTime,omitempty" bson:"registerTime" binding:"required"` // 注册时间
}
// UserBindingMsg 用户绑定(本项目对应邮箱正式注册)
type UserBindingMsg struct {
UserId uint64 `json:"userId"` // 用户ID
AppId int32 `json:"appId"` // appID
PlatformId string `json:"platformId"` // 原始平台流水Id
SysType string `json:"sysType"` // 操作系统类型
DevType string `json:"devType"` // 设备类型
Mobile string `json:"mobile"` // 手机号/绑定账号(本项目填邮箱)
BindingTime *time.Time `json:"bindingTime"` // 绑定时间
}
// UserInviteBindMsg 邀请绑定
type UserInviteBindMsg struct {
UserId uint64 `json:"userId" bson:"userId" binding:"required"`
AppId int32 `json:"appId" bson:"appId" binding:"required"`
ParentPromCode string `json:"parentPromCode,omitempty" bson:"promSeqe"`
InviteTime time.Time `json:"inviteTime,omitempty" bson:"inviteTime" binding:"required"`
}
// ConsumeRecordMsg 消费流水
type ConsumeRecordMsg struct {
AppID int32 `json:"appID" bson:"appID"`
UID uint64 `json:"uid" bson:"uid"`
Type int `json:"type" bson:"type"` // 消费类型
CurrencyType int `json:"currencyType" bson:"currencyType"` // 0金币 1人民币
Money decimal.Decimal `json:"money" bson:"money"` // 人民币 元
Amount decimal.Decimal `json:"amount" bson:"amount"` // 金币
Uniq string `json:"uniq" bson:"uniq"`
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
}
// AiSellMsg AI 销售流水
type AiSellMsg struct {
AppID int32 `json:"appID" bson:"appID"`
UID uint64 `json:"uid" bson:"uid"`
UniqID string `json:"uniqID" bson:"uniqID"`
Amount int64 `json:"amount" bson:"amount"`
TranType string `json:"tranType" bson:"tranType"`
SysType string `json:"sysType" bson:"sysType"`
DevType string `json:"devType" bson:"devType"`
CurrencyType string `json:"currencyType" bson:"currencyType"`
TranCreatedAt time.Time `json:"tranCreatedAt" bson:"tranCreatedAt"`
IsRepurchase string `json:"isRepurchase" bson:"isRepurchase"`
}
// CardSellMsg 会员卡销售流水
type CardSellMsg struct {
AppID int32 `json:"appID" bson:"appID"`
UID uint64 `json:"uid" bson:"uid"`
UniqID string `json:"uniqID" bson:"uniqID"`
Amount int64 `json:"amount" bson:"amount"`
TranTypeInt int64 `json:"tranTypeInt" bson:"tranTypeInt"`
TranType string `json:"tranType" bson:"tranType"`
SysType string `json:"sysType" bson:"sysType"`
CurrencyType int `json:"currencyType" bson:"currencyType"` // 0金币 1现金
TranCreatedAt time.Time `json:"tranCreatedAt" bson:"tranCreatedAt"`
Product Product `json:"product" bson:"product"`
}
// Product 售卡产品信息
type Product struct {
ID string `json:"id"`
Name string `json:"name"`
DiscountedPrice int64 `json:"discountedPrice"`
}
// 用户充值消息
type UserRechargeMsg struct {
UserId uint64 `json:"userId" bson:"userId" binding:"required"`
AppId int32 `json:"appId" bson:"appId" binding:"required"`
PlatformId string `json:"platformId" bson:"platformId"`
SysType string `json:"sysType" bson:"sysType" binding:"required"`
DevType string `json:"devType" bson:"devType"`
ChannelName string `json:"channelName" bson:"channelName"`
CID string `json:"cid" bson:"cid"`
Type string `bson:"type" json:"type"`
OrderId string `json:"orderId" bson:"orderId" binding:"required"`
OID string `json:"oid" bson:"oid"`
Money int64 `json:"money" bson:"money" binding:"required"`
PayMoney int64 `json:"payMoney" bson:"payMoney" binding:"required"`
Status int `json:"status" bson:"status"`
Rate string `json:"rate"`
SuccessAt time.Time `json:"successAt,omitempty" bson:"successAt"`
PaymentAt time.Time `json:"paymentAt"`
ProductType int `json:"productType" bson:"productType"`
ChanShareMod int `json:"chanShareMod" bson:"chanShareMod"`
IsNewOrOldUser bool `json:"isNewOrOldUser" bson:"isNewOrOldUser"`
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
DistrictCode string `json:"districtCode" bson:"districtCode"`
RegisterTime time.Time `json:"registerTime,omitempty" bson:"registerTime"`
}
type BuyVIPType int64
const (
BuyVIPTypeMoney BuyVIPType = 0 + iota // 现金
BuyVIPTypeGold // 金币
)
// 用户购买VIP
type UserBuyVIPMsg struct {
AppId int32 `json:"appId" bson:"appId"`
UID uint64 `json:"uid" bson:"uid"`
PlatformId string `json:"platformId" bson:"platformId"`
Name string `json:"name" bson:"name"`
Money int64 `json:"money" bson:"money"`
Amount int64 `json:"amount" bson:"amount"`
BuyVIPType BuyVIPType `json:"buyVIPType" bson:"buyVIPType"`
OID string `json:"oid" bson:"oid"`
DeviceType string `json:"deviceType" bson:"deviceType"`
Status int `json:"status" bson:"status"`
SuccessAt time.Time `json:"successTime"`
IsDirect bool `json:"isDirect" bson:"isDirect"`
DistrictCode string `json:"districtCode" bson:"districtCode"`
PromCode string `json:"promCode" bson:"promCode"`
}
// MapOrderStatusToStat 将本项目订单状态映射为统计中心约定:2失败 3成功
func MapOrderStatusToStat(status pubdef.VipOrderStatus) int {
switch status {
case pubdef.VipOrderSuccess:
return 3
case pubdef.VipOrderFailed:
return 2
default:
return int(status)
}
}