package common import ( "fmt" "reflect" ) // 账号身份 const ( PlayerRoleNormal = iota PlayerRoleRobot = 100 ) // 玩家状态 const ( PlayerStatusNormal = iota + 1 PlayerStatusMatching PlayerStatusPlaying ) // 玩家是否在线 const ( PlayerOnline = iota + 1 PlayerOffline ) type PlayerDBInfo struct { Id int `gorm:"primary_key;AUTO_INCREMENT;column:id" json:"id" redis:"id"` ADID string `gorm:"column:adid;type:varchar(256);comment:玩家adjustID" json:"adid" redis:"adid"` GPSADID string `gorm:"column:gps_adid;type:varchar(256);comment:玩家google广告ID" json:"gps_adid" redis:"gps_adid"` Openid *string `gorm:"column:openid;type:varchar(128);uniqueIndex:channel_openid;comment:唯一识别号" json:"-" redis:"openid"` IP string `gorm:"column:ip;type:varchar(256);comment:玩家登录ip" json:"ip" redis:"ip"` Pass string `gorm:"column:pass;type:varchar(64)" json:"pass" redis:"pass"` Nick string `gorm:"column:nick;type:varchar(64)" json:"nick" redis:"nick"` Mobile string `gorm:"column:mobile;default:null;type:varchar(64);uniqueIndex:channel_mobile" json:"mobile" redis:"mobile"` Avatar string `gorm:"column:avatar;type:varchar(512);default:''" json:"avatar" redis:"avatar"` DeviceId string `gorm:"column:deviceid;type:varchar(256);default:'';comment:设备号" json:"deviceid" redis:"deviceid"` SessionID string `gorm:"-" json:"sessionID" redis:"sessionID"` AccountName string `gorm:"column:account_name;default:null;uniqueIndex:channel_account_name;commont:账户名" json:"account_name" redis:"account_name"` GateID string `gorm:"-" json:"gateID" redis:"gateID"` Token string `gorm:"-" json:"token" redis:"token"` Birth int64 `gorm:"column:birth;type:bigint(20);default:0;comment:账号创建时间,时间戳" json:"birth" redis:"birth"` Role int `gorm:"column:role;type:smallint(8);default:0;comment:玩家角色0普通玩家,100机器人" json:"role" redis:"role"` ChannelID int `gorm:"column:channel_id;type:bigint(20);uniqueIndex:channel_openid;uniqueIndex:channel_mobile;uniqueIndex:channel_account_name;default:1;comment:渠道id" json:"channel_id" redis:"channel_id"` AccountType int `gorm:"column:account_type;comment:0游客,1fb,2gp" json:"account_type" redis:"account_type"` Status int `gorm:"column:status;type:tinyint(4);default:1;comment:账号状态,1正常,2封禁" json:"status" redis:"status"` Online int `gorm:"column:online;type:tinyint(4);default:2;comment:是否在线,1在线,2不在线" json:"online" redis:"online"` Tag string `gorm:"column:tag; type:varchar(512);default:'';comment:后台管理给账户打的标签,用户不可见" json:"tag" redis:"tag"` Platform int `gorm:"column:platform;type:int(11);default:1;comment:最新登录平台" json:"platform" redis:"platform"` LastLogin int64 `gorm:"column:last_login;type:bigint(20);default:0;comment:最近登录时间" json:"last_login" redis:"last_login"` Country string `gorm:"column:country;type:varchar(64);default:'';comment:国家" json:"country" redis:"country"` } func (u *PlayerDBInfo) TableName() string { return "users" } // PlayerSession 玩家会话信息 type PlayerSession struct { SessionID string `json:"sessionID" redis:"sessionID"` GateID string `json:"gateID" redis:"gateID"` Nick string `json:"nick" redis:"nick"` } // FacebookUserInfo facebook返回的登录接口 type FacebookUserInfo struct { ID string Name string Picture struct { Data struct { URL string `json:"url"` Height int Width int IsSilhouette bool } `json:"data"` } `json:"picture"` } // GooglePlayUserInfo googlePlay返回的登录接口 type GooglePlayUserInfo struct { ID string `json:"sub"` Email string Name string Given_name string Family_name string Picture string Locale string Verified_email bool } // PlayerStatus 玩家状态 // type PlayerStatus struct { // GameName string `json:"GameName" redis:"GameName"` // UUID string `json:"UUID" redis:"UUID"` // TableID string `json:"TableID" redis:"TableID"` // ActiveTime int64 `json:"ActiveTime" redis:"ActiveTime"` // WorkID int `json:"WorkID" redis:"WorkID"` // MatchID uint32 `json:"MatchID" redis:"MatchID"` // Status uint32 `json:"Status" redis:"Status"` // GameID uint32 `json:"GameID" redis:"GameID"` // } // func (s *PlayerStatus) MarshalBinary() ([]byte, error) { // return json.Marshal(s) // } // func (s *PlayerStatus) UnmarshalBinary(data []byte) error { // return json.Unmarshal(data, s) // } // NormalPlayerSql 返回查询正常用户的sql条件语句 func NormalPlayerSql(channel ...*int) string { sql := "" for _, v := range channel { if v == nil { continue } if sql == "" { sql += fmt.Sprintf("(channel_id = %v", *v) } else { sql += fmt.Sprintf(" or channel_id = %v", *v) } } if len(sql) > 0 { sql += ")" } sql += fmt.Sprintf(" and role <> %v and status = %v", PlayerRoleRobot, AccountStatusNormal) return sql } // PlayerData 保存一些玩家记录 type PlayerData struct { UID int `gorm:"column:uid;not null;type:int(11);uniqueIndex:uid"` LastSysEmailDraw int64 `gorm:"column:last_sys_email_draw;type:bigint(20);default:0;comment:最近一次接收系统邮件的时间"` LastAppSpinDraw int64 `gorm:"column:last_app_spin_draw;type:bigint(20);default:0;comment:上次领取app下载转盘的时间"` FeedbackTime int64 `gorm:"column:feedback_time;type:bigint(20);default:0;comment:完成问卷调查的时间"` DayBet int64 `gorm:"column:day_bet;type:bigint(20);default:0;comment:日打码"` DayBetTime int64 `gorm:"column:day_bet_time;type:bigint(20);default:0;comment:修改时间"` } func (u *PlayerData) TableName() string { return "player_data" } // PlayerRed 玩家红点信息 type PlayerRed struct { ID uint `gorm:"primarykey"` UID int `gorm:"column:uid;not null;type:int(11);uniqueIndex:uid"` Mail int `gorm:"column:mail;type:int(11);comment:未读取邮件数" json:"Mail"` } func (u *PlayerRed) TableName() string { return "player_red" } const ( ItemStatusZero = iota ItemStatusNormal // 正常 ItemStatusInvalid // 不可用 ItemStatusAll ) // 物品的枚举 const ( ItemZero = iota ItemDiscountTicket ItemAll ) // PlayerItems 玩家道具 type PlayerItems struct { ID int `gorm:"primarykey"` UID int `gorm:"column:uid;type:int(11)"` ItemID int `gorm:"column:item_id;default:0;comment:物品id"` Time int64 `gorm:"column:time;type:bigint(20);default:0;comment:获得的时间"` Status int `gorm:"column:status;type:int(11);default:0;comment:物品状态"` Exi1 int64 `gorm:"column:exi1;type:bigint(20);default:0;comment:物品标识字段1"` Exi2 int64 `gorm:"column:exi2;type:bigint(20);default:0;comment:物品标识字段2"` } func (p *PlayerItems) TableName() string { return "player_items" } // PlayerH5Data 玩家H5数据 type PlayerH5Data struct { UID int `gorm:"primary_key;column:uid;type:int(11)"` Collect int `gorm:"column:collect;type:int(11);default:1;comment:是否已领取H5收藏奖励,1未领取,2已领取"` Download int `gorm:"column:download;type:int(11);default:1;comment:是否已领取H5下载奖励,1未领取,2已领取"` } func (p *PlayerH5Data) TableName() string { return "player_h5data" } var ( PlayerRechargeTableName = "player_currency_recharge" // 玩家充值账户 ) // PlayerCurrency 玩家货币数据(此结构只能往后新增字段,前面字段不能修改顺序) type PlayerCurrency struct { UID int `gorm:"primary_key;column:uid;type:int(11)"` ChannelID int `gorm:"column:channel_id;type:bigint(20);default:1;comment:渠道id"` INR int64 `gorm:"column:inr;type:bigint(20);default:0;comment:卢比"` USDT int64 `gorm:"column:usdt;type:bigint(20);default:0;comment:usdt"` } func (p *PlayerCurrency) TableName() string { return "player_currency" } func (p *PlayerCurrency) GetBalanceByType(ct CurrencyType) int64 { ref := reflect.ValueOf(p).Elem() val := ref.Field(int(ct) + 1) if val.IsValid() { return val.Int() } return 0 } func (p *PlayerCurrency) SetBalance(ct CurrencyType, value int64) { ref := reflect.ValueOf(p).Elem() val := ref.Field(int(ct) + 1) if val.IsValid() { val.SetInt(value) } } // PlayerProfile 玩家生涯数据 type PlayerProfile struct { UID int `gorm:"primary_key;column:uid;type:int(11)"` ChannelID int `gorm:"column:channel_id;type:bigint(20);default:1;comment:渠道id"` NeedBet int64 `gorm:"column:need_bet;type:bigint(20);comment:当前所需下注量"` TotalBet int64 `gorm:"column:total_bet;type:bigint(20);comment:总下注"` TotalCounts int64 `gorm:"column:total_counts;type:bigint(20);comment:总下注次数"` TotalSettle int64 `gorm:"column:total_settle;type:bigint(20);comment:总派发"` } func (p *PlayerProfile) TableName() string { return "player_profile" } // Level vip等级 // Bet 下注额 // Exp vip经验 // Draws 已经领取的vip等级奖励,从右至左,等级低到高 // // Cashback 当前可领取的cashback type VipData struct { ID int `gorm:"primary_key;AUTO_INCREMENT;column:id" json:"ID"` UID int `gorm:"column:uid;not null;type:int(11);uniqueIndex:uid" json:"UID"` Level int `gorm:"column:level;not null;type:int(11);default:0;comment:vip等级" json:"Level"` Bet int64 `gorm:"column:bet;not null;type:bigint(20);default:0;comment:下注额" json:"Bet"` Exp int64 `gorm:"column:exp;not null;type:bigint(20);default:0;comment:vip经验" json:"Exp"` Draws int64 `gorm:"column:draws;not null;type:bigint(20);default:0;comment:已经领取的vip等级奖励,从右至左,等级低到高" json:"Draws"` Profit int64 `gorm:"column:profit;not null;type:bigint(20);default:0;comment:计算周期内的盈亏" json:"Profit"` ProfitTime int64 `gorm:"column:profit_time;not null;type:bigint(20);default:0;comment:开始计算时间节点" json:"ProfitTime"` Cashback int64 `gorm:"column:cashback;not null;type:bigint(20);default:0;comment:当前可领取的cashback" json:"Cashback"` } func (c *VipData) TableName() string { return "vip_data" } type TronData struct { ID int `gorm:"primary_key;AUTO_INCREMENT;column:id"` UID int `gorm:"column:uid;not null;type:int(11);uniqueIndex:uid"` Addr string `gorm:"column:addr; type:varchar(256);default:'';comment:钱包地址"` Usdt int64 `gorm:"column:usdt;type:bigint(20);default:0;comment:地址里的u存量,单位1e6"` } func (c *TronData) TableName() string { return "tron_data" } // PlayerStatus 玩家状态 type PlayerStatus struct { ModuleName string `json:"ModuleName" redis:"ModuleName"` WorkID int `json:"WorkID" redis:"WorkID"` GameID int `json:"GameID" redis:"GameID"` SubID int `json:"SubID" redis:"SubID"` TableID string `json:"TableID" redis:"TableID"` } // 玩家广告相关数据 type PlayerADData struct { ID int `gorm:"primarykey"` UID int `gorm:"column:uid;type:int(11);index:uid"` IP string `gorm:"column:ip;type:varchar(256);comment:玩家ip"` FBC string `gorm:"column:fbc;type:varchar(256);comment:玩家点击识别号"` FBP string `gorm:"column:fbp;type:varchar(256);comment:玩家浏览器识别号"` ChannelID int `gorm:"column:channel_id;type:bigint(20);default:1000;comment:渠道id"` UserAgent string `gorm:"column:user_agent;type:varchar(256);comment:玩家浏览器版本"` } func (c *PlayerADData) TableName() string { return "player_ad_data" } // 玩家购买记录 type PlayerPayData struct { ID uint `gorm:"primarykey"` UID int `gorm:"column:uid;not null;type:int(11);uniqueIndex:uid"` BreakGift string `gorm:"column:break_gift;type:varchar(256);default:'';comment:已购买破产礼包的档位"` SubBreakGift []int `gorm:"-"` // FirstPay string `gorm:"column:first_pay;default:'';type:varchar(256);comment:首次购买商品记录"` // SubFirstPay []int `gorm:"-"` } func (c *PlayerPayData) TableName() string { return "player_pay_data" }