package static //func getAccountTel(platform string, id int) (string, error) { // acc := &mongomodel.Account{} // cc, err := mymongo.GetUserCollection(platform, mongomodel.UserAccount) // if err != nil { // logger.Logger.Errorf("get collection %s error %v", mongomodel.UserAccount, err) // return "", err // } // dd := cc.FindOne(context.TODO(), bson.M{"snid": id}, options.FindOne().SetProjection(bson.M{"tel": 1})) // err = dd.Err() // if err != nil { // if errors.Is(err, mongo.ErrNoDocuments) { // logger.Logger.Tracef("getAccountTel %v not found in user_account", id) // return "", nil // } // logger.Logger.Errorf("getAccountTel %v get user_account err: %v", id, err) // return "", err // } // if err := dd.Decode(acc); err != nil { // logger.Logger.Errorf("getAccountTel %v decode user_account err: %v", id, err) // return "", err // } // return acc.Tel, nil //} // //// 游戏结束离开 //func checkGameOver(db *mymysql.Database, login *mysqlmodel.UserLogin, platform string, id int) (bool, error) { // // 最早的一条掉线记录并且是游戏结束离开 // a := &mongomodel.LoginLog{} // c, err := mymongo.GetLogCollection(platform, mongomodel.LogLogin) // if err != nil { // logger.Logger.Errorf("get collection %s error %v", mongomodel.LogLogin, err) // return false, err // } // d := c.FindOne(context.TODO(), bson.M{"snid": id, "logtype": mongomodel.LogTypeDrop, "gameid": 0, "lastgameid": bson.D{{"$gt", 0}}}, // options.FindOne().SetSort(bson.D{{"time", 1}})) // err = d.Err() // if err != nil { // if errors.Is(err, mongo.ErrNoDocuments) { // logger.Logger.Tracef("checkGameOver %v not found in log_login", id) // return false, nil // } // logger.Logger.Errorf("checkGameOver %v get log_login err: %v", id, err) // return false, err // } // if err := d.Decode(a); err != nil { // logger.Logger.Errorf("checkGameOver %v decode log_login err: %v", id, err) // return false, err // } // // // account tel // tel, err := getAccountTel(platform, id) // if err != nil { // logger.Logger.Warnf("get account tel %v err: %v", id, err) // } // // update := &mysqlmodel.UserLogin{ // //OfflineTs: int(a.Ts), // OfflineTime: a.Time, // OutType: mysqlmodel.OutTypeGameOver, // GameID: a.LastGameID, // Tel: tel, // DeviceName: a.DeviceName, // AppVersion: a.AppVersion, // BuildVersion: a.BuildVersion, // AppChannel: a.AppChannel, // ChannelId: a.ChannelId, // } // // if err := db.Model(login).Select( // "OfflineTime", "OutType", "GameID", "DeviceName", "AppVersion", "BuildVersion", "AppChannel", "Tel", // ).Updates(update).Error; err != nil { // logger.Logger.Errorf("checkLogin %v update user_login err: %v", id, err) // return false, err // } // // return true, nil //} // //// 游戏中离开 //func checkGaming(db *mymysql.Database, login *mysqlmodel.UserLogin, platform string, id int) (bool, error) { // // 最早的一条掉线记录并且是游戏中掉线 // a := &mongomodel.LoginLog{} // c, err := mymongo.GetLogCollection(platform, mongomodel.LogLogin) // if err != nil { // logger.Logger.Errorf("get collection %s error %v", mongomodel.LogLogin, err) // return false, err // } // d := c.FindOne(context.TODO(), bson.M{"snid": id, "logtype": mongomodel.LogTypeDrop, "gameid": bson.D{{"$gt", 0}}}, // options.FindOne().SetSort(bson.D{{"time", 1}})) // err = d.Err() // if err != nil { // if errors.Is(err, mongo.ErrNoDocuments) { // logger.Logger.Tracef("checkGaming %v not found in log_login", id) // return false, nil // } // logger.Logger.Errorf("checkGaming %v get log_login err: %v", id, err) // return false, err // } // if err := d.Decode(a); err != nil { // logger.Logger.Errorf("checkGaming %v decode log_login err: %v", id, err) // return false, err // } // // // account tel // tel, err := getAccountTel(platform, id) // if err != nil { // logger.Logger.Warnf("get account tel %v err: %v", id, err) // } // // update := &mysqlmodel.UserLogin{ // //OfflineTs: int(a.Ts), // OfflineTime: a.Time, // OutType: mysqlmodel.OutTypeGaming, // GameID: a.GameId, // Tel: tel, // DeviceName: a.DeviceName, // AppVersion: a.AppVersion, // BuildVersion: a.BuildVersion, // AppChannel: a.AppChannel, // ChannelId: a.ChannelId, // } // // if err := db.Model(login).Select( // "OfflineTime", "OutType", "GameID", "DeviceName", "AppVersion", "BuildVersion", "AppChannel", "Tel", // ).Updates(update).Error; err != nil { // logger.Logger.Errorf("checkLogin %v update user_login err: %v", id, err) // return false, err // } // // return true, nil //} // //// 登录后离开 //func checkLogin(db *mymysql.Database, login *mysqlmodel.UserLogin, platform string, id int) (bool, error) { // // 最早的一条掉线记录 // a := &mongomodel.LoginLog{} // c, err := mymongo.GetLogCollection(platform, mongomodel.LogLogin) // if err != nil { // logger.Logger.Errorf("get collection %s error %v", mongomodel.LogLogin, err) // return false, err // } // d := c.FindOne(context.TODO(), bson.M{"snid": id, "logtype": mongomodel.LogTypeDrop}, options.FindOne().SetSort(bson.D{{"time", 1}})) // err = d.Err() // if err != nil { // if errors.Is(err, mongo.ErrNoDocuments) { // logger.Logger.Tracef("checkLogin %v not found in log_login", id) // return false, nil // } // logger.Logger.Errorf("checkLogin %v get log_login err: %v", id, err) // return false, err // } // if err := d.Decode(a); err != nil { // logger.Logger.Errorf("checkLogin %v decode log_login err: %v", id, err) // return false, err // } // // // account tel // tel, err := getAccountTel(platform, id) // if err != nil { // logger.Logger.Warnf("get account tel %v err: %v", id, err) // } // // update := &mysqlmodel.UserLogin{ // //OfflineTs: int(a.Ts), // OfflineTime: a.Time, // OutType: mysqlmodel.OutTypeLogin, // Tel: tel, // DeviceName: a.DeviceName, // AppVersion: a.AppVersion, // BuildVersion: a.BuildVersion, // AppChannel: a.AppChannel, // ChannelId: a.ChannelId, // } // // if err := db.Model(login).Select( // "OfflineTime", "OutType", "DeviceName", "AppVersion", "BuildVersion", "AppChannel", "Tel", // ).Updates(update).Error; err != nil { // logger.Logger.Errorf("checkLogin %v update user_login err: %v", id, err) // return false, err // } // // return true, nil //} // //// 注册后离开 //func checkRegister(db *mymysql.Database, login *mysqlmodel.UserLogin, platform string, id int) (bool, error) { // a := &mongomodel.Account{} // c, err := mymongo.GetUserCollection(platform, mongomodel.UserAccount) // if err != nil { // logger.Logger.Errorf("get collection %s error %v", mongomodel.UserAccount, err) // return false, err // } // d := c.FindOne(context.TODO(), bson.M{"snid": id}) // err = d.Err() // if err != nil { // if errors.Is(err, mongo.ErrNoDocuments) { // logger.Logger.Warnf("checkRegister %v not found in user_account", id) // return false, nil // } // logger.Logger.Errorf("checkRegister %v get user_account err: %v", id, err) // return false, err // } // if err := d.Decode(a); err != nil { // logger.Logger.Errorf("checkRegister %v decode user_account err: %v", id, err) // return false, err // } // // // account tel // tel, err := getAccountTel(platform, id) // if err != nil { // logger.Logger.Warnf("get account tel %v err: %v", id, err) // } // // login.Snid = id // //login.OnlineTs = int(a.RegisterTs) // login.OnlineTime = a.RegisteTime // //login.OfflineTs = int(a.RegisterTs) // login.OfflineTime = a.RegisteTime // login.OutType = mysqlmodel.OutTypRegister // login.Tel = tel // login.DeviceName = a.DeviceName // login.AppVersion = a.AppVersion // login.BuildVersion = a.BuildVersion // login.AppChannel = a.AppChannel // login.ChannelId = a.ChannelId // // if err := db.Create(login).Error; err != nil { // logger.Logger.Errorf("checkRegister create err: %v", err) // return false, err // } // return true, nil //} // UserLogin 玩家跳出统计 //func UserLogin(platform string, ids []*mysqlmodel.UserID) error { // f := func(id int) error { // // 玩家是否已经统计结束,已经是游戏结束状态 // login := &mysqlmodel.UserLogin{} // db, err := mymysql.GetDatabase(platform) // if err != nil { // logger.Logger.Errorf("UserLogin get db err: %v", err) // return err // } // if err = db.Where("snid = ?", id).Find(login).Error; err != nil { // logger.Logger.Errorf("UserLogin find %v err: %v", id, err) // return err // } // // switch login.OutType { // case mysqlmodel.OutTypeGameOver: // return nil // // case mysqlmodel.OutTypeGaming: // _, err := checkGameOver(db, login, platform, id) // if err != nil { // logger.Logger.Errorf("UserLogin checkGameOver %v err: %v", id, err) // return err // } // return nil // // case mysqlmodel.OutTypeLogin: // ret, err := checkGameOver(db, login, platform, id) // if err != nil { // logger.Logger.Errorf("UserLogin checkGameOver %v err: %v", id, err) // return err // } // if ret { // return nil // } // ret, err = checkGaming(db, login, platform, id) // if err != nil { // logger.Logger.Errorf("UserLogin checkGaming %v err: %v", id, err) // return err // } // if ret { // return nil // } // // case mysqlmodel.OutTypRegister: // ret, err := checkGameOver(db, login, platform, id) // if err != nil { // logger.Logger.Errorf("UserLogin checkGameOver %v err: %v", id, err) // return err // } // if ret { // return nil // } // ret, err = checkGaming(db, login, platform, id) // if err != nil { // logger.Logger.Errorf("UserLogin checkGaming %v err: %v", id, err) // return err // } // if ret { // return nil // } // ret, err = checkLogin(db, login, platform, id) // if err != nil { // logger.Logger.Errorf("UserLogin checkLogin %v err: %v", id, err) // return err // } // if ret { // return nil // } // // default: // ret, err := checkRegister(db, login, platform, id) // if err != nil { // logger.Logger.Errorf("UserLogin checkRegister %v err: %v", id, err) // return err // } // if !ret { // logger.Logger.Warnf("UserLogin not found user_account checkRegister %v err: %v", id, err) // return nil // } // // ret, err = checkGameOver(db, login, platform, id) // if err != nil { // logger.Logger.Errorf("UserLogin checkGameOver %v err: %v", id, err) // return err // } // if ret { // return nil // } // ret, err = checkGaming(db, login, platform, id) // if err != nil { // logger.Logger.Errorf("UserLogin checkGaming %v err: %v", id, err) // return err // } // if ret { // return nil // } // ret, err = checkLogin(db, login, platform, id) // if err != nil { // logger.Logger.Errorf("UserLogin checkLogin %v err: %v", id, err) // return err // } // if ret { // return nil // } // return nil // } // // return nil // } // // for _, v := range ids { // if err := f(v.Snid); err != nil { // return err // } // } // // return nil //}