Compare commits

...

4 Commits

Author SHA1 Message Date
sk aa3a713699 evt_online添加渠道信息 2024-04-25 09:46:57 +08:00
sk 0cba0b0b25 Merge branch 'develop' into tongji 2024-04-24 17:22:25 +08:00
sk 3a5039727b 优化账号表 2024-04-23 15:10:48 +08:00
sk 7ecebe62e6 账号表补充渠道信息 2024-04-23 14:28:13 +08:00
6 changed files with 185 additions and 163 deletions

View File

@ -59,6 +59,11 @@ func (svc *AccountSvc) AccountIsExist(args *model.AccIsExistArg, ret *model.AccR
}
acc := &model.Account{}
defer func() {
// 修改旧数据
// 补充渠道信息
svc.setParam(acc)
}()
switch args.LoginType {
case common.LoginTypeGuest:
@ -229,6 +234,35 @@ func (svc *AccountSvc) AccountIsExist(args *model.AccIsExistArg, ret *model.AccR
return nil
}
func (svc *AccountSvc) setParam(acc *model.Account) {
if acc == nil || (acc.Channel != "" && acc.Channel != "0") {
return
}
c := PlayerDataCollection(acc.Platform)
if c == nil {
return
}
p := new(model.PlayerData)
err := c.Find(bson.M{"snid": acc.SnId}).One(p)
if err != nil {
logger.Logger.Errorf("setChannel error:%v", err)
return
}
c = AccountCollection(acc.Platform)
if c == nil {
return
}
acc.Channel = p.Channel
if acc.Channel != "" {
err = c.Update(bson.M{"_id": acc.AccountId}, bson.D{{"$set", bson.D{{"channel", acc.Channel}}}})
if err != nil {
logger.Logger.Errorf("setChannel error:%v", err)
}
}
}
func (svc *AccountSvc) AccountTelIsRegiste(args *model.AccIsExistArg, exist *bool) error {
caccounts := AccountCollection(args.Platform)
if caccounts != nil {
@ -446,22 +480,22 @@ func (svc *AccountSvc) EditAccountPwd(acc *model.Account, ret *model.AccRet) err
return caccounts.Update(bson.M{"_id": acc.AccountId}, bson.D{{"$set", bson.D{{"backpassword", acc.TelPassWord}, {"telpassword", hashsum}}}})
}
func (svc *AccountSvc) ResetBackAccountPwd(args *model.AccIdArg, ret *model.AccRet) error {
caccounts := AccountCollection(args.Platform)
if caccounts == nil {
return ErrAccDBNotOpen
}
var acc model.Account
err := caccounts.Find(bson.M{"_id": bson.ObjectIdHex(args.AccId)}).One(&acc)
if err != nil {
return err
}
if len(acc.BackPassWord) > 0 {
return caccounts.Update(bson.M{"_id": acc.AccountId}, bson.D{{"$set", bson.D{{"telpassword", acc.BackPassWord}}}})
}
return nil
}
//func (svc *AccountSvc) ResetBackAccountPwd(args *model.AccIdArg, ret *model.AccRet) error {
// caccounts := AccountCollection(args.Platform)
// if caccounts == nil {
// return ErrAccDBNotOpen
// }
//
// var acc model.Account
// err := caccounts.Find(bson.M{"_id": bson.ObjectIdHex(args.AccId)}).One(&acc)
// if err != nil {
// return err
// }
// if len(acc.BackPassWord) > 0 {
// return caccounts.Update(bson.M{"_id": acc.AccountId}, bson.D{{"$set", bson.D{{"telpassword", acc.BackPassWord}}}})
// }
// return nil
//}
/*
* 修改帐号密码
@ -506,7 +540,7 @@ func (svc *AccountSvc) UpdateAccountPlatformInfo(acc *model.Account, ret *model.
return caccounts.Update(bson.M{"_id": acc.AccountId},
bson.D{{"$set", bson.M{"platform": acc.Platform,
"channel": acc.Channel, "promoter": acc.Promoter, "inviterid": acc.InviterId, "packegetag": acc.PackegeTag, "promotertree": acc.PromoterTree}}})
"channel": acc.Channel, "packegetag": acc.PackegeTag}}})
}
func (svc *AccountSvc) GetRobotAccounts(limit int, accs *[]model.Account) error {

View File

@ -147,8 +147,8 @@ func (svc *PlayerDataSvc) GetPlayerData(args *model.GetPlayerDataArgs, ret *mode
name = "Guest"
}
pd = model.NewPlayerData(args.Acc, name, id, a.Channel, a.Platform, a.Promoter, a.InviterId, a.PromoterTree, a.Params,
a.Tel, a.PackegeTag, dataParams.Ip, 0, dataParams.UnionId, a.DeviceInfo, a.SubPromoter, a.TagKey, a.AccountType)
pd = model.NewPlayerData(args.Acc, name, id, a.Channel, a.Platform, a.Params,
a.Tel, a.PackegeTag, dataParams.Ip, 0, dataParams.UnionId, a.DeviceInfo, a.TagKey, a.AccountType)
if pd != nil {
err = cplayerdata.Insert(pd)
if err != nil {
@ -222,8 +222,8 @@ func (svc *PlayerDataSvc) CreatePlayerDataByThird(args *model.CreatePlayer, ret
}
var dataParams model.PlayerParams
json.Unmarshal([]byte(a.Params), &dataParams)
pd = model.NewPlayerDataThird(acc, name, args.HeadUrl, id, a.Channel, a.Platform, a.Promoter, a.InviterId,
a.PromoterTree, a.Params, a.Tel, a.PackegeTag, dataParams.Ip, a.SubPromoter, a.TagKey, a.AccountType, a.DeviceOs)
pd = model.NewPlayerDataThird(acc, name, args.HeadUrl, id, a.Channel, a.Platform, a.Params,
a.Tel, a.PackegeTag, dataParams.Ip, a.TagKey, a.AccountType, a.DeviceOs)
if pd != nil {
err = cplayerdata.Insert(pd)
if err != nil {
@ -292,9 +292,8 @@ func (svc *PlayerDataSvc) CreatePlayerDataOnRegister(args *model.PlayerDataArg,
}
var dataParams model.PlayerParams
json.Unmarshal([]byte(a.Params), &dataParams)
pd = model.NewPlayerData(acc, name, id, a.Channel, a.Platform, a.Promoter, a.InviterId,
a.PromoterTree, a.Params, a.Tel, a.PackegeTag, dataParams.Ip, int64(args.AddCoin),
"", a.DeviceInfo, a.SubPromoter, a.TagKey, a.AccountType)
pd = model.NewPlayerData(acc, name, id, a.Channel, a.Platform, a.Params, a.Tel, a.PackegeTag,
dataParams.Ip, int64(args.AddCoin), "", a.DeviceInfo, a.TagKey, a.AccountType)
pd.HeadUrl = args.HeadUrl
if pd != nil {
err = cplayerdata.Insert(pd)
@ -342,8 +341,8 @@ func (svc *PlayerDataSvc) GetPlayerDataBySnId(args *model.GetPlayerDataBySnIdArg
name = "Guest"
}
pd := model.NewPlayerData(a.AccountId.Hex(), name, a.SnId, a.Channel, a.Platform, a.Promoter, a.InviterId, a.PromoterTree, a.Params,
a.Tel, a.PackegeTag, dataParams.Ip, 0, dataParams.UnionId, a.DeviceInfo, a.SubPromoter, a.TagKey, a.AccountType)
pd := model.NewPlayerData(a.AccountId.Hex(), name, a.SnId, a.Channel, a.Platform, a.Params,
a.Tel, a.PackegeTag, dataParams.Ip, 0, dataParams.UnionId, a.DeviceInfo, a.TagKey, a.AccountType)
if pd != nil {
err = cplayerdata.Insert(pd)
if err != nil {

View File

@ -17,36 +17,31 @@ import (
// 登录次数,最后登录最后登出时间并不准确
type Account struct {
AccountId bson.ObjectId `bson:"_id"`
SnId int32 //玩家账号直接在这里生成
UserName string //Service Provider AccountId
PassWord string //昵称密码
TelPassWord string //帐号密码
BackPassWord string //备份账号密码
//VIP int32 //VIP帐号 等级
Platform string //平台
Channel string //渠道
Promoter string //推广员
SubPromoter string //子推广员
InviterId int32 //邀请人ID
PromoterTree int32 //推广树ID
Tel string //电话号码
Params string //其他参数
DeviceOs string //系统
PackegeTag string //包标识
Package string //包名 android:包名 ios:bundleid
DeviceInfo string //设备信息
LoginTimes int //登录次数
State int64 //冻结到期时间戳
RegisteTime time.Time //注册时间
LastLoginTime time.Time //最后一次登录时间
LastLogoutTime time.Time //最后一次登出时间
Flag int32 //二次推广用户标记
Remark string //备注信息
TagKey int32 //包标识关键字
AccountType int32 //1.google 2.facebook
RegisterTs int64 // 注册时间戳
TelPassWordExpire int64 // 手机验证码登录过期时间戳
AccountId bson.ObjectId `bson:"_id"`
SnId int32 //玩家账号直接在这里生成
UserName string //Service Provider AccountId
PassWord string //昵称密码
TelPassWord string //帐号密码
BackPassWord string //备份账号密码
Platform string //平台
Channel string //渠道
Tel string //电话号码
Params string //其他参数
DeviceOs string //系统
PackegeTag string //包标识
Package string //包名 android:包名 ios:bundleid
DeviceInfo string //设备信息
LoginTimes int //登录次数
State int64 //冻结到期时间戳
RegisteTime time.Time //注册时间
LastLoginTime time.Time //最后一次登录时间
LastLogoutTime time.Time //最后一次登出时间
Flag int32 //二次推广用户标记
Remark string //备注信息
TagKey int32 //包标识关键字
AccountType int32 //1.google 2.facebook
RegisterTs int64 // 注册时间戳
TelPassWordExpire int64 // 手机验证码登录过期时间戳
}
func NewAccount() *Account {
@ -128,11 +123,7 @@ func InsertAccount(userName, passWord, platform, channel, promoter, params, devi
acc.Platform = platform
acc.Channel = channel
acc.Params = params
acc.SubPromoter = subPromoter
acc.DeviceOs = deviceOs
acc.Promoter = promoter
acc.InviterId = inviterId
acc.PromoterTree = promoterTree
acc.LastLoginTime = tCur
acc.RegisteTime = tCur
acc.LoginTimes = 1
@ -166,10 +157,7 @@ func InsertTelAccount(userName, passWord, platform, channel, promoter, params st
acc.TelPassWord = telpassword
acc.Platform = platform
acc.Channel = channel
acc.Promoter = promoter
acc.Params = params
acc.InviterId = inviterId
acc.PromoterTree = promoterTree
acc.LastLoginTime = tCur
acc.RegisteTime = tCur
acc.LoginTimes = 1
@ -493,13 +481,10 @@ func UpdateAccountPlatformInfo(account string, platform, channel, promoter, invi
return ErrRPClientNoConn
}
args := &Account{
AccountId: bson.ObjectIdHex(account),
Platform: strconv.Itoa(int(platform)),
Channel: strconv.Itoa(int(channel)),
Promoter: strconv.Itoa(int(promoter)),
PromoterTree: promoterTree,
InviterId: inviterid,
PackegeTag: packTag,
AccountId: bson.ObjectIdHex(account),
Platform: strconv.Itoa(int(platform)),
Channel: strconv.Itoa(int(channel)),
PackegeTag: packTag,
}
ret := &AccRet{}
err := rpcCli.CallWithTimeout("AccountSvc.UpdateAccountPlatformInfo", args, ret, time.Second*30)

View File

@ -709,9 +709,9 @@ func (this *PlayerData) GetPlayerDataEncoder() (bytes.Buffer, error) {
return buf, err
}
func NewPlayerData(acc string, name string, id int32, channel, platform, promoter string, inviterId,
promoterTree int32, params, tel string, packTag, ip string, addCoin int64, unionid, deviceInfo string,
subPromoter string, tagkey, accountType int32) *PlayerData {
func NewPlayerData(acc string, name string, id int32, channel, platform string, params, tel string,
packTag, ip string, addCoin int64, unionid, deviceInfo string,
tagkey, accountType int32) *PlayerData {
if len(name) == 0 {
logger.Logger.Trace("New player name is empty.")
return nil
@ -726,47 +726,42 @@ func NewPlayerData(acc string, name string, id int32, channel, platform, promote
isRobot := channel == common.Channel_Rob
pd := &PlayerData{
Id: bson.NewObjectId(),
AccountId: acc,
AccountType: accountType,
Name: name,
Channel: channel,
Platform: platform,
SnId: id,
InviterId: inviterId,
PromoterTree: promoterTree,
Head: rand.Int31n(common.HeadRange),
//Coin: int64(GameParamData.NewPlayerCoin) + addCoin,
SafeBoxPassword: pwd,
Ip: ip,
RegIp: ip,
Params: params,
Tel: tel,
SubBeUnderAgentCode: subPromoter,
AgentType: 0,
LastLoginTime: tNow.Local(),
LastLogoutTime: tNow.AddDate(0, 0, -1).Local(),
CreateTime: tNow.Local(),
Ver: VER_PLAYER_MAX - 1,
HeadOutLine: 1,
VIP: 0,
CoinPayTotal: 0,
MoneyPayTotal: 0,
IsRob: isRobot,
BeUnderAgentCode: promoter,
PackageID: packTag,
WBLevel: 0,
WBCoinTotalOut: 0,
WBCoinTotalIn: 0,
WBCoinLimit: 0,
YesterdayGameData: NewPlayerGameCtrlData(),
TodayGameData: NewPlayerGameCtrlData(),
TotalGameData: make(map[int][]*PlayerGameTotal),
GDatas: make(map[string]*PlayerGameInfo),
TagKey: tagkey,
ShopTotal: make(map[int32]*ShopTotal),
ShopLastLookTime: make(map[int32]int64),
IsFoolPlayer: make(map[string]bool),
Id: bson.NewObjectId(),
AccountId: acc,
AccountType: accountType,
Name: name,
Channel: channel,
Platform: platform,
SnId: id,
Head: rand.Int31n(common.HeadRange),
SafeBoxPassword: pwd,
Ip: ip,
RegIp: ip,
Params: params,
Tel: tel,
AgentType: 0,
LastLoginTime: tNow.Local(),
LastLogoutTime: tNow.AddDate(0, 0, -1).Local(),
CreateTime: tNow.Local(),
Ver: VER_PLAYER_MAX - 1,
HeadOutLine: 1,
VIP: 0,
CoinPayTotal: 0,
MoneyPayTotal: 0,
IsRob: isRobot,
PackageID: packTag,
WBLevel: 0,
WBCoinTotalOut: 0,
WBCoinTotalIn: 0,
WBCoinLimit: 0,
YesterdayGameData: NewPlayerGameCtrlData(),
TodayGameData: NewPlayerGameCtrlData(),
TotalGameData: make(map[int][]*PlayerGameTotal),
GDatas: make(map[string]*PlayerGameInfo),
TagKey: tagkey,
ShopTotal: make(map[int32]*ShopTotal),
ShopLastLookTime: make(map[int32]int64),
IsFoolPlayer: make(map[string]bool),
//测试数据
PowerList: []int32{1}, //默认炮台
UnMaxPower: 10, //初始化炮倍最小倍数
@ -781,47 +776,43 @@ func NewPlayerData(acc string, name string, id int32, channel, platform, promote
return pd
}
func NewPlayerDataThird(acc string, name, headUrl string, id int32, channel, platform, promoter string, inviterId,
promoterTree int32, params, tel string, packTag, ip string, subPromoter string, tagkey, accountType int32, deviceOS string) *PlayerData {
func NewPlayerDataThird(acc string, name, headUrl string, id int32, channel, platform string, params, tel string,
packTag, ip string, tagkey, accountType int32, deviceOS string) *PlayerData {
if len(name) == 0 {
logger.Logger.Trace("New player name is empty.")
return nil
}
tNow := time.Now()
pd := &PlayerData{
Id: bson.NewObjectId(),
AccountId: acc,
Name: name,
Channel: channel,
Platform: platform,
SnId: id,
InviterId: inviterId,
PromoterTree: promoterTree,
Head: rand.Int31n(common.HeadRange),
HeadUrl: headUrl,
Id: bson.NewObjectId(),
AccountId: acc,
Name: name,
Channel: channel,
Platform: platform,
SnId: id,
Head: rand.Int31n(common.HeadRange),
HeadUrl: headUrl,
//Coin: int64(GameParamData.NewPlayerCoin),
Ip: ip,
RegIp: ip,
Params: params,
Tel: tel,
SubBeUnderAgentCode: subPromoter,
LastLoginTime: tNow.Local(),
LastLogoutTime: tNow.AddDate(0, 0, -1).Local(),
CreateTime: tNow.Local(),
Ver: VER_PLAYER_MAX - 1,
HeadOutLine: 1,
IsRob: false,
BeUnderAgentCode: promoter,
PackageID: packTag,
YesterdayGameData: NewPlayerGameCtrlData(),
TodayGameData: NewPlayerGameCtrlData(),
TotalGameData: make(map[int][]*PlayerGameTotal),
GDatas: make(map[string]*PlayerGameInfo),
TagKey: tagkey,
ShopTotal: make(map[int32]*ShopTotal),
ShopLastLookTime: make(map[int32]int64),
AccountType: accountType,
DeviceOS: deviceOS,
Ip: ip,
RegIp: ip,
Params: params,
Tel: tel,
LastLoginTime: tNow.Local(),
LastLogoutTime: tNow.AddDate(0, 0, -1).Local(),
CreateTime: tNow.Local(),
Ver: VER_PLAYER_MAX - 1,
HeadOutLine: 1,
IsRob: false,
PackageID: packTag,
YesterdayGameData: NewPlayerGameCtrlData(),
TodayGameData: NewPlayerGameCtrlData(),
TotalGameData: make(map[int][]*PlayerGameTotal),
GDatas: make(map[string]*PlayerGameInfo),
TagKey: tagkey,
ShopTotal: make(map[int32]*ShopTotal),
ShopLastLookTime: make(map[int32]int64),
AccountType: accountType,
DeviceOS: deviceOS,
}
pd.InitNewData(params)

View File

@ -8,11 +8,14 @@ import (
)
// GenerateOnline 在线统计
func GenerateOnline(online map[string]int) *RabbitMQData {
m := map[int]int{} // 平台:真人数
func GenerateOnline(online map[string]map[string]int) *RabbitMQData {
m := map[string]map[int]int{} // 渠道:平台:真人数
for k, v := range online {
i, _ := strconv.Atoi(k)
m[i] = v
m[k] = map[int]int{}
for k1, v1 := range v {
pf, _ := strconv.Atoi(k1)
m[k][pf] = v1
}
}
params := make(map[string]interface{})
params["Online"] = m

View File

@ -7,12 +7,12 @@ import (
)
var PlayerOnlineSington = &PlayerOnlineEvent{
Online: make(map[string]int),
OnlineCh: make(map[string]map[string]int),
}
type PlayerOnlineEvent struct {
Online map[string]int
Check bool
OnlineCh map[string]map[string]int
Check bool
}
func (p *PlayerOnlineEvent) ModuleName() string {
@ -23,30 +23,40 @@ func (p *PlayerOnlineEvent) Init() {
}
// 每五秒钟统计一次在线数据
// 没有登录,登出,掉线情况直接不统计
// 没有登录,登出,掉线情况不统计
func (p *PlayerOnlineEvent) Update() {
if !p.Check {
return
}
p.Check = false
m := map[string]int{}
onlineCh := map[string]map[string]int{}
for _, player := range PlayerMgrSington.sidMap {
if player != nil && !player.IsRob && player.IsOnLine() {
m[player.Platform] = m[player.Platform] + 1
info, ok := onlineCh[player.Channel]
if !ok {
onlineCh[player.Channel] = map[string]int{}
info = onlineCh[player.Channel]
}
info[player.Platform] += 1
}
}
if len(m) == len(p.Online) {
for k, v := range m {
if p.Online[k] != v {
if len(onlineCh) == len(p.OnlineCh) {
for k, v := range onlineCh {
if len(v) != len(p.OnlineCh[k]) {
goto here
}
for k1, v1 := range v {
if v1 != p.OnlineCh[k][k1] {
goto here
}
}
}
return
}
here:
p.Online = m
LogChannelSingleton.WriteMQData(model.GenerateOnline(p.Online))
p.OnlineCh = onlineCh
LogChannelSingleton.WriteMQData(model.GenerateOnline(p.OnlineCh))
}
func (p *PlayerOnlineEvent) Shutdown() {