ソースを参照

增加日志, 处理邀请收不到奖励, username重复的bug

xh 9 ヶ月 前
コミット
46c7a14c9e

+ 19 - 4
game/game_cluster/internal/mdb/models/player.go

@@ -506,7 +506,7 @@ func (p *Player) SetPassiveInviteReward() {
 	if !ok || !tok || c != p.Level {
 		return
 	}
-	//被动邀请
+	//获取邀请人
 	key := fmt.Sprintf("%v:1:%v", constant.InviteKey, p.UserName)
 	pUid := mdb.RDB.Get(context.Background(), key).Val()
 
@@ -523,19 +523,21 @@ func (p *Player) SetPassiveInviteReward() {
 
 	var addItem []data.ItemReward
 	if p.IsVip == 0 {
-		//主动邀请记录
+		//主动邀请记录, 设置邀请人数量+1
 		key = fmt.Sprintf("%v:%v:%v", constant.InviteKey, InvitePlayer, pUid)
 		mdb.RDB.IncrBy(context.Background(), key, 1)
 
 		addItem = append(addItem, ret2.Reward...)
 	} else {
 
+		//主动邀请记录, 设置邀请人数量+1
 		key = fmt.Sprintf("%v:%v:%v", constant.InviteKey, InviteVipPlayer, pUid)
 		mdb.RDB.IncrBy(context.Background(), key, 1)
 
 		addItem = append(addItem, ret3.Reward...)
 	}
 
+	//社区长额外奖励
 	if base.IsLeader == 1 {
 		ret, ok := data.DiscreteRuleConfig.Get(InvitePlayerByLeader)
 		if !ok {
@@ -622,17 +624,30 @@ func (p *Player) SetInviteReward() {
 }
 
 func (p *Player) SetInvite(uid string) bool {
-	key := fmt.Sprintf("%v:1:%v", constant.InviteKey, p.UserName)
+	//key := fmt.Sprintf("%v:1:%v", constant.InviteKey, p.UserName)
+	//ret, ok := data.DiscreteRuleConfig.Get(InviteMaxExpireTime)
+	//if !ok {
+	//	return false
+	//}
+	//t, _ := mhayaString.ToInt64(ret.Condition)
+	//err := mdb.RDB.Set(context.Background(), key, uid, time.Duration(t)*24*time.Hour).Err()
+	//if err != nil {
+	//	return false
+	//}
+	//return true
+
+	key := fmt.Sprintf("%v:1:%v", constant.InviteKey, uid)
 	ret, ok := data.DiscreteRuleConfig.Get(InviteMaxExpireTime)
 	if !ok {
 		return false
 	}
 	t, _ := mhayaString.ToInt64(ret.Condition)
-	err := mdb.RDB.Set(context.Background(), key, uid, time.Duration(t)*24*time.Hour).Err()
+	err := mdb.RDB.Set(context.Background(), key, p.UserName, time.Duration(t)*24*time.Hour).Err()
 	if err != nil {
 		return false
 	}
 	return true
+
 }
 
 func (p *Player) ClaimRankReward(id int) param.ChangeData {

+ 2 - 1
game/game_cluster/nodes/game/module/player/actor_player.go

@@ -22,6 +22,7 @@ import (
 	clog "github.com/mhaya/logger"
 	"github.com/mhaya/net/parser/pomelo"
 	"go.mongodb.org/mongo-driver/bson"
+	"go.mongodb.org/mongo-driver/mongo/options"
 	"io"
 	"net/http"
 	"net/url"
@@ -163,7 +164,7 @@ func (p *actorPlayer) SetRewardToDB() {
 
 func (p *actorPlayer) setDb() {
 	if p.isOnline && p.dirty {
-		ret, err := mdb.MDB.Collection(constant.CNamePlayer).UpdateOne(context.Background(), bson.M{"userName": p.Player.UserName}, bson.M{"$set": p.Player})
+		ret, err := mdb.MDB.Collection(constant.CNamePlayer).UpdateOne(context.Background(), bson.M{"openId": p.Player.OpenId}, bson.M{"$set": p.Player}, options.Update().SetUpsert(true))
 		if err != nil {
 			clog.Debugf("[actorPlayer] setDb ret=%v, err = %s exit!", ret, err)
 		}

+ 10 - 4
game/game_cluster/nodes/game/module/player/invite.go

@@ -8,6 +8,7 @@ import (
 	"github.com/mhaya/game/game_cluster/internal/mdb"
 	"github.com/mhaya/game/game_cluster/internal/mdb/models"
 	"github.com/mhaya/game/game_cluster/internal/param"
+	clog "github.com/mhaya/logger"
 )
 
 func (p *actorPlayer) invite(req *param.InviteReq) int32 {
@@ -18,13 +19,18 @@ func (p *actorPlayer) invite(req *param.InviteReq) int32 {
 		return code.InviteEmpoweringOthersError
 	}
 
+	exists := mdb.RDB.Exists(context.Background(), models.GetPlayBaseKey(req.ParentName)).Val()
+	if exists > 0 {
+		return code.Error
+	}
+
 	p.dirty = true
 	p.Player.Pid = req.ParentName
-	err := mdb.RDB.Get(context.Background(), models.GetPlayBaseKey(req.ParentName)).Err()
-	if err != nil {
-		return code.OK
-	}
+
 	p.Player.SetInvite(req.ParentName)
+	//添加日志
+
+	clog.Info("玩家邀请成功,玩家ID:%v,邀请玩家ID:%v", p.Player.UserName, req.ParentName)
 
 	return code.OK
 }

+ 173 - 0
game/game_cluster/nodes/tool/migrate.go

@@ -0,0 +1,173 @@
+package main
+
+import (
+	"context"
+	"database/sql"
+	"encoding/json"
+	"fmt"
+	_ "github.com/go-sql-driver/mysql"
+	"github.com/mhaya/game/game_cluster/internal/mdb/models"
+	"go.mongodb.org/mongo-driver/mongo"
+	"go.mongodb.org/mongo-driver/mongo/options"
+	"log"
+	"time"
+)
+
+// MySQL结构体
+type MySQLUser struct {
+	Username      string  `json:"username"`
+	Nickname      string  `json:"nickname"`
+	Pid           string  `json:"pid"`
+	Level         int     `json:"level"`
+	Money         float64 `json:"money"`
+	Score         int     `json:"score"`
+	Roll          int     `json:"roll"`
+	Invite        int     `json:"invite"`
+	AllRoll       int     `json:"allroll"`
+	RollDay       int     `json:"rollday"`
+	RollNums      int     `json:"rollnums"`
+	RollDays      int     `json:"rolldays"`
+	TonWall       string  `json:"tonwall"`
+	DrawsNumber   int     `json:"drawsnumber"`
+	DayLimit      int     `json:"daylimit"`
+	Jump          int     `json:"jump"`
+	DayRoll       int     `json:"dayroll"`
+	DayInvite     int     `json:"dayinvite"`
+	DatScore      int     `json:"datscore"`
+	WallTon       string  `json:"wallton"`
+	WallU         string  `json:"wallu"`
+	RollOneStatus int     `json:"rollonestatus"`
+	FirstReward   int     `json:"firsteward"`
+}
+
+// MySQL 数据读取
+func readFromMySQL() ([]MySQLUser, error) {
+	db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/dbname")
+	if err != nil {
+		return nil, err
+	}
+	defer db.Close()
+
+	rows, err := db.Query("SELECT * FROM users")
+	if err != nil {
+		return nil, err
+	}
+	defer rows.Close()
+
+	var users []MySQLUser
+	for rows.Next() {
+		var user MySQLUser
+		err := rows.Scan(
+			&user.Username,
+			&user.Nickname,
+			&user.Pid,
+			&user.Level,
+			&user.Money,
+			&user.Score,
+			&user.Roll,
+			&user.Invite,
+			&user.AllRoll,
+			&user.RollDay,
+			&user.RollNums,
+			&user.RollDays,
+			&user.TonWall,
+			&user.DrawsNumber,
+			&user.DayLimit,
+			&user.Jump,
+			&user.DayRoll,
+			&user.DayInvite,
+			&user.DatScore,
+			&user.WallTon,
+			&user.WallU,
+			&user.RollOneStatus,
+			&user.FirstReward,
+		)
+		if err != nil {
+			return nil, err
+		}
+		users = append(users, user)
+	}
+
+	return users, nil
+}
+
+// 数据转换
+func convertToMongo(user MySQLUser) (models.Player, error) {
+	var mongoUser models.Player
+	err := json.Unmarshal([]byte(fmt.Sprintf(`%v`, user)), &mongoUser)
+	if err != nil {
+		return mongoUser, err
+	}
+
+	// 填充其他字段
+	mongoUser.UserName = user.Username
+	mongoUser.NickName = user.Nickname
+	mongoUser.Pid = user.Pid
+	mongoUser.Level = user.Level
+	mongoUser.Exp = user.Score // 假设Exp和Score相同
+	mongoUser.CreateTime = time.Now().Unix()
+	mongoUser.UpdateTime = time.Now().Unix()
+	mongoUser.DailyRefreshTime = time.Now().Unix()
+	mongoUser.WeeklyRefreshTime = time.Now().Unix()
+	//mongoUser.RollDay = user.RollDay
+	mongoUser.Status = 1 // 默认状态
+	mongoUser.Index = 1  // 默认索引
+	mongoUser.TonWall = user.TonWall
+	mongoUser.JoinTime = time.Now().Unix()
+	mongoUser.JoinIP = "127.0.0.1"
+
+	// 初始化其他结构体
+	//mongoUser.Roll = &models.Roll{}
+	//mongoUser.Share = &models.RShare{}
+	//mongoUser.Item = models.RItemBasePack{}
+	//mongoUser.SinIn = models.RSignIn{}
+	//mongoUser.DailyTask = models.RDailyTask{}
+	//mongoUser.AchieveTask = models.RAchieveTask{}
+	//mongoUser.RankReward = models.RRankReward{}
+	//mongoUser.Invite = models.RInvite{}
+	//mongoUser.InviteReward = &models.RInviteReward{}
+	//mongoUser.PlayerReward = make(map[int]*models.RPlayerRewardBase)
+
+	return mongoUser, nil
+}
+
+// 插入MongoDB
+func insertIntoMongo(users []MySQLUser) error {
+	clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
+	client, err := mongo.Connect(context.TODO(), clientOptions)
+	if err != nil {
+		return err
+	}
+	defer client.Disconnect(context.TODO())
+
+	collection := client.Database("game").Collection("players")
+
+	for _, user := range users {
+		mongoUser, err := convertToMongo(user)
+		if err != nil {
+			return err
+		}
+
+		_, err = collection.InsertOne(context.TODO(), mongoUser)
+		if err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+// 主函数
+func main() {
+	users, err := readFromMySQL()
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	err = insertIntoMongo(users)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	log.Println("Data migration completed successfully.")
+}