liliang před 8 měsíci
rodič
revize
fca2d7ba1c

+ 1 - 2
game/config/data/kolConfig.json

@@ -1,5 +1,5 @@
 [
-		{"userid":"2ayKXEqEax3","mark":"a9af795bcf10427d6d5736de1349f951fcc9","ppt_boolean":1},
+		{"userid":"be2Uf1a2ea72G92Qbc8bedibb6bA","mark":"a9af795bcf10427d6d5736de1349f951fcc9","ppt_boolean":1},
 		{"userid":"","mark":"800b8184a0cfcf83d3f19b20612c5defa103","ppt_boolean":0},
 		{"userid":"","mark":"a6b4225756e39b7e33d2bc2cfc3c8bbe70c4","ppt_boolean":0},
 		{"userid":"","mark":"21e9c4017ddb885a54011a502bb15e6ec766","ppt_boolean":0},
@@ -16,7 +16,6 @@
 		{"userid":"","mark":"9389170225359538b1c0bbefbac39424190f","ppt_boolean":0},
 		{"userid":"","mark":"8862cac6069726d23cb0bf71a65802dce4e6","ppt_boolean":0},
 		{"userid":"","mark":"5b89d10473bea7ed7e40e282b7dff9d2778c","ppt_boolean":0},
-		{"userid":"","mark":"13843f7ed0584c487f506717398ee02e6d3f","ppt_boolean":0},
 		{"userid":"","mark":"86be3876630cdbfe1a0b0816a0d11441981c","ppt_boolean":0},
 		{"userid":"","mark":"345beb6c15416ceb208710db39c1affa944b","ppt_boolean":0},
 		{"userid":"","mark":"4ae9ce625a4ddbeb0549bc1f423deb985840","ppt_boolean":0},

+ 9 - 8
game/game_cluster/internal/mdb/component.go

@@ -1,6 +1,7 @@
 package mdb
 
 import (
+	"crypto/tls"
 	"github.com/go-redis/redis/v8"
 	mhayaMongo "github.com/mhaya/components/mongo"
 	clog "github.com/mhaya/logger"
@@ -36,15 +37,15 @@ func (p *ActorDB) OnInit() {
 		clog.Panic("game_db_id not found")
 	}
 	redisConfig := cprofile.GetConfig("redis")
-	//tlsConfig := &tls.Config{
-	//	MinVersion:               tls.VersionTLS12,
-	//	PreferServerCipherSuites: true,
-	//}
+	tlsConfig := &tls.Config{
+		MinVersion:               tls.VersionTLS12,
+		PreferServerCipherSuites: true,
+	}
 	RDB = redis.NewUniversalClient(&redis.UniversalOptions{
-		Addrs:    []string{redisConfig.GetString("address")},
-		Password: redisConfig.GetString("password"),
-		DB:       redisConfig.GetInt("db"),
-		//TLSConfig: tlsConfig,
+		Addrs:     []string{redisConfig.GetString("address")},
+		Password:  redisConfig.GetString("password"),
+		DB:        redisConfig.GetInt("db"),
+		TLSConfig: tlsConfig,
 	})
 
 	if p.App().NodeId() == "m-center" {

+ 17 - 10
game/game_cluster/internal/mdb/models/player.go

@@ -150,10 +150,10 @@ func (p *Player) Init() {
 func (p *Player) InitDaily() {
 
 	if !mhayaTime.CreateFromTimestamp(p.DailyRefreshTime).IsToday() {
-		//刷新每日任务
-		p.DailyTask.RefreshDailyTask()
-		//刷新抽奖每日分享
-		p.Share.RefreshShare()
+		////刷新每日任务
+		//p.DailyTask.RefreshDailyTask()
+		////刷新抽奖每日分享
+		//p.Share.RefreshShare()
 		//刷新是否有排行榜奖励
 		p.RankReward.InitRank(p.UserName, 1)
 		//更新时间到当天
@@ -857,17 +857,20 @@ func (p *Player) SetInvite(pid string) bool {
 	key := fmt.Sprintf("%v:1:%v", constant.InviteKey, p.UserName)
 	ret, ok := data.DiscreteRuleConfig.Get(InviteMaxExpireTime)
 	if !ok {
+		mhayaLogger.Warn("SetInvite return 1")
 		return false
 	}
 	t, _ := mhayaString.ToInt64(ret.Condition)
 	err := mdb.RDB.Set(context.Background(), key, pid, time.Duration(t)*24*time.Hour).Err()
 	if err != nil {
+		mhayaLogger.Warn("SetInvite return 1")
 		return false
 	}
 
 	key2 := fmt.Sprintf("%v:%v:%v", constant.InviteKey, InvitePlayer, p.Pid)
 	lRange, _ := mdb.RDB.LRange(context.Background(), key2, 0, -1).Result()
 	if slices.Contains(lRange, p.UserName) {
+		mhayaLogger.Warn("SetInvite return 1")
 		return false
 	}
 	mdb.RDB.LPush(context.Background(), key2, p.UserName)
@@ -877,17 +880,20 @@ func (p *Player) SetInvite(pid string) bool {
 
 	mKey := fmt.Sprintf("%v:%v:%v", constant.InviteTagKey, InvitePlayer, p.UserName)
 
-	key4 := fmt.Sprintf("%v:%v:%v", constant.InviteTagKey, InvitePlayer, pTag)
+	mhayaLogger.Debugf("SetInvite finish 1")
 	if pTag != "" {
 		mdb.RDB.Set(context.Background(), mKey, pTag, 0)
-		mdb.RDB.Incr(context.Background(), key4)
+		tagKey := fmt.Sprintf("%v:%v:%v", constant.InviteTagKey, 2, pTag)
+		mdb.RDB.Incr(context.Background(), tagKey)
 	} else {
 		kol, _ := data.KolConfig.Get(p.Pid)
 		if kol != nil {
 			mdb.RDB.Set(context.Background(), mKey, kol.Mark, 0)
-			mdb.RDB.Incr(context.Background(), key4)
+			tagKey := fmt.Sprintf("%v:%v:%v", constant.InviteTagKey, 2, kol.Mark)
+			mdb.RDB.Incr(context.Background(), tagKey)
 		}
 	}
+	mhayaLogger.Debugf("SetInvite finish 2")
 	return true
 
 }
@@ -950,6 +956,9 @@ func (p *Player) ClaimDailyTaskReward(id int) param.ChangeData {
 
 // 初始化邀请节点奖励
 func (p *Player) InitInviteNodeReword() {
+	//key := fmt.Sprintf("%v:%v", constant.InviteNodeHistoryKey, p.UserName)
+	//mdb.RDB.Del(context.Background(), key)
+
 	icfg := data.InviteConfig.GetAll()
 
 	var maxCondition int
@@ -966,9 +975,6 @@ func (p *Player) InitInviteNodeReword() {
 		}
 	}
 
-	key := fmt.Sprintf("%v:%v", constant.InviteNodeHistoryKey, p.UserName)
-	mdb.RDB.Del(context.Background(), key)
-
 	if (len(p.InviteNodeReward) == 0) || isUpdate {
 		// 初次邀请和更新奖励配置
 		p.RefreshInviteNodeReward(icfg)
@@ -981,6 +987,7 @@ func (p *Player) InitInviteNodeReword() {
 		for _, item := range p.InviteNodeReward {
 			beforeNum += int64(item.Condition)
 		}
+		mhayaLogger.Debugf("刷新邀请奖励周期")
 		key := fmt.Sprintf("%v:%v", constant.InviteNodeHistoryKey, p.UserName)
 		mdb.RDB.IncrBy(context.Background(), key, beforeNum)
 	}

+ 2 - 0
game/game_cluster/nodes/adminapi/entity/user.go

@@ -49,4 +49,6 @@ type UserListResp struct {
 	Status            int    `json:"status" bson:"status"`                       // 状态
 	TagNum            int    `json:"tagNum" bson:"tagNum"`                       // 邀请裂变标签人数
 	Total             int64  `json:"total" bson:"total"`                         // 邀请裂变标签人数
+	CurPlan           int    `json:"curPlan" bson:"curPlan"`                     // 当前任务完成进度
+	TotalPlan         int    `json:"TotalPlan" bson:"totalPlan"`                 // 总进度
 }

+ 18 - 0
game/game_cluster/nodes/adminapi/service/user.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"github.com/mhaya/game/game_cluster/internal/data"
 	"go.mongodb.org/mongo-driver/mongo/options"
+	"slices"
 	"time"
 
 	"github.com/mhaya/game/game_cluster/internal/constant"
@@ -82,6 +83,21 @@ func GetUserList(req *entity.UserReq) []*entity.UserListResp {
 			tagNum, _ = mdb.RDB.Get(context.Background(), key).Int()
 		}
 
+		var totalPlan int
+		var curPlan int
+		ids := []int{1000, 1001}
+		for _, item := range account.FirstClaimReward {
+			totalPlan++
+			id := item.Reward[0].ItemID
+			if slices.Contains(ids, id) {
+				continue
+			}
+
+			if item.IsClaim == 1 {
+				curPlan++
+			}
+		}
+
 		result = append(result, &entity.UserListResp{
 			UserName:          account.UserName,
 			UserNameMaybe:     account.UserNameMaybe,
@@ -120,6 +136,8 @@ func GetUserList(req *entity.UserReq) []*entity.UserListResp {
 			IsCashOut:         account.IsCashOut,
 			TagNum:            tagNum,
 			Total:             count,
+			TotalPlan:         totalPlan,
+			CurPlan:           curPlan,
 		})
 	}
 	return result

+ 27 - 21
game/game_cluster/nodes/game/module/player/actor_player.go

@@ -95,17 +95,17 @@ func (p *actorPlayer) OnInit() {
 
 	p.Remote().Register("unitTest", p.unitTest)
 
-	p.Timer().Add(10*time.Second, p.refreshRoll)
-	p.Timer().Add(3*time.Second, p.SetRewardToDB)
+	//p.Timer().Add(10*time.Second, p.refreshRoll)
+	p.Timer().Add(60*time.Second, p.SetRewardToDB)
 	p.Timer().Add(1*time.Minute, p.setRedis)
-	p.Timer().Add(10*time.Second, p.setDb)
+	p.Timer().Add(60*time.Second, p.setDb)
 	//p.Timer().Add(30*time.Second, p.setInviteReward)
 
 	//p.Timer().Add(1*time.Second, p.addRoll)
 
 	p.Timer().Add(10*time.Second, p.playerSessionClose)
 
-	p.Timer().Add(1*time.Minute, p.upatePlayerLevelStat)
+	//p.Timer().Add(1*time.Minute, p.upatePlayerLevelStat)
 
 	//在线用户定时刷新
 	p.Timer().Add(1*time.Minute, p.initDaily)
@@ -114,9 +114,9 @@ func (p *actorPlayer) OnInit() {
 
 	//p.Timer().AddOnce(5*time.Second, p.getAndUpdateAvatar) //排行榜头像
 
-	p.Timer().Add(30*time.Second, p.updPassWordTime)
+	//p.Timer().Add(30*time.Second, p.updPassWordTime)
 
-	p.Timer().Add(1*time.Minute, p.updCashOut)
+	//p.Timer().Add(1*time.Minute, p.updCashOut)
 
 	//p.Timer().Add(10*time.Second, p.invite) //检查邀请信息
 }
@@ -154,8 +154,10 @@ func (p *actorPlayer) initHourly() {
 
 func (p *actorPlayer) initDaily() {
 	if p.isOnline {
-		p.Player.InitDaily()
-		p.dirty = true
+		go func() {
+			p.Player.InitDaily()
+			p.dirty = true
+		}()
 	}
 }
 
@@ -207,25 +209,29 @@ func (p *actorPlayer) setRedis() {
 }
 
 func (p *actorPlayer) SetRewardToDB() {
-	if p.Player != nil {
-		for k, r := range p.Player.PlayerReward {
-			_, err := mdb.MDB.Collection(constant.CNamePlayerReward).InsertOne(context.Background(), r)
-			if err != nil {
-				clog.Errorf("[actorPlayer] set invite to db error: %v", err)
+	go func() {
+		if p.Player != nil {
+			for k, r := range p.Player.PlayerReward {
+				_, err := mdb.MDB.Collection(constant.CNamePlayerReward).InsertOne(context.Background(), r)
+				if err != nil {
+					clog.Errorf("[actorPlayer] set invite to db error: %v", err)
+				}
+				delete(p.Player.PlayerReward, k)
 			}
-			delete(p.Player.PlayerReward, k)
 		}
-	}
+	}()
 }
 
 func (p *actorPlayer) setDb() {
-	if p.isOnline && p.dirty {
-		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.Warnf("[actorPlayer] setDb ret=%v, err = %s exit!", ret, err)
+	go func() {
+		if p.isOnline && p.dirty {
+			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.Warnf("[actorPlayer] setDb ret=%v, err = %s exit!", ret, err)
+			}
+			p.dirty = false
 		}
-		p.dirty = false
-	}
+	}()
 }
 
 // 获取和更新头像

+ 6 - 1
game/game_cluster/nodes/game/module/player/claim.go

@@ -10,6 +10,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"
+	mhayaLogger "github.com/mhaya/logger"
 )
 
 func (p *actorPlayer) claim(req *param.ClaimReq) (*param.ChangeData, int32) {
@@ -162,7 +163,6 @@ func (p *actorPlayer) ClaimInviteNodeReward(id int) (*param.ChangeData, int32) {
 	// 领取
 	p.Player.Item.AddItem(reward)
 	p.Player.InviteNodeReward[id].IsClaim = 1
-	p.Player.ClaimInviteNum += 1
 	p.Player.SetPlayerRewardLog(models.SourceInviteNode, id, reward, []data.ItemReward{}, nil)
 
 	// 统计收益
@@ -174,7 +174,11 @@ func (p *actorPlayer) ClaimInviteNodeReward(id int) (*param.ChangeData, int32) {
 		maxCondition += value.Condition
 	}
 
+	p.Player.ClaimInviteNum += icfg[id].Condition
+
 	// 走到最后一个节点主动触发奖励重置
+	mhayaLogger.Debugf("ClaimInviteNum = ", p.Player.ClaimInviteNum)
+	mhayaLogger.Debugf("maxCondition = ", maxCondition)
 	if p.Player.ClaimInviteNum >= maxCondition {
 		p.Player.RefreshInviteNodeReward(icfg)
 
@@ -184,6 +188,7 @@ func (p *actorPlayer) ClaimInviteNodeReward(id int) (*param.ChangeData, int32) {
 			beforeNum += int64(item.Condition)
 		}
 		key := fmt.Sprintf("%v:%v", constant.InviteNodeHistoryKey, p.Player.UserName)
+		mhayaLogger.Debugf("走到最后一个节点主动触发奖励重置 id = ", id)
 		mdb.RDB.IncrBy(context.Background(), key, beforeNum)
 	}
 

+ 13 - 2
game/game_cluster/nodes/game/module/player/invite.go

@@ -32,6 +32,7 @@ func (p *actorPlayer) botInvite() {
 }
 
 func (p *actorPlayer) invite(req *param.InviteReq) int32 {
+	clog.Debugf("invite execute => parenName = ", req.ParentName)
 	if !p.isOnline {
 		return code.PlayerNotLogin
 	}
@@ -44,10 +45,15 @@ func (p *actorPlayer) invite(req *param.InviteReq) int32 {
 		return code.Error
 	}
 
+	//如果邀请是自己不处理
+	if p.Player.UserName == req.ParentName {
+		return code.InviteEmpoweringOthersError
+	}
+
 	//req.ParentName 是邀请玩家id
 	p.dirty = true
 	p.Player.Pid = req.ParentName
-
+	clog.Debugf("invite execute => p.Player.Pid = p.Player.Pid = ", p.Player.Pid)
 	p.Player.SetInvite(req.ParentName)
 	//添加日志
 
@@ -148,6 +154,7 @@ func (p *actorPlayer) inviteRewardList(key string, isHistory bool) (*param.Invit
 	inviteReword, _ := data.DiscreteRuleConfig.Get(models.InviteRatio)
 	split := strings.Split(inviteReword.Condition, ",")
 	ratio, _ := strconv.ParseFloat(split[0], 64)
+	minClaim, _ := strconv.Atoi(split[1])
 
 	result, _ := mdb.RDB.HGetAll(context.Background(), key).Result()
 
@@ -183,6 +190,10 @@ func (p *actorPlayer) inviteRewardList(key string, isHistory bool) (*param.Invit
 	for k, v := range result {
 		num, _ := strconv.Atoi(v)
 
+		if num <= minClaim {
+			continue
+		}
+
 		info := mdb.RDB.HGet(context.Background(), constant.PlayerBaseKey, k).Val()
 		var playerBase param.PlayerBase
 		jsoniter.Unmarshal([]byte(info), &playerBase)
@@ -212,7 +223,7 @@ func (p *actorPlayer) inviteNodeReward() (*models.InviteNodeReward, int32) {
 
 	key := fmt.Sprintf("%v:%v:%v", constant.InviteKey, models.InvitePlayer, p.Player.UserName)
 	// 当前邀请人数
-	lRange, _ := mdb.RDB.LRange(context.Background(), key, 0, 5).Result()
+	lRange, _ := mdb.RDB.LRange(context.Background(), key, 0, -1).Result()
 	curInviteNum := len(lRange)
 	// 历史刷新周期已领取奖励的邀请人数
 	key2 := fmt.Sprintf("%v:%v", constant.InviteNodeHistoryKey, p.Player.UserName)

+ 1 - 1
game/game_cluster/nodes/game/module/player/signin.go

@@ -48,7 +48,7 @@ func (p *actorPlayer) signInList() (*models.SignIn, int32) {
 func (p *actorPlayer) SignInOp() (*param.ChangeData, int32) {
 	si := p.Player.SinIn.Sign
 	if p.Player.SinIn.Num > len(si)-1 {
-		return nil, code.PlayerSignInError
+		//return nil, code.PlayerSignInError
 	}
 	var sign param.ChangeData
 	p.Player.SinIn.SignDailyTime = mhayaTime.Now().Unix()

+ 1 - 1
game/game_cluster/nodes/game/module/player/stat.go

@@ -46,7 +46,7 @@ func (p *actorPlayer) itemStat(item map[int]*data.ItemReward) {
 			//models.SetDailyRecord(p.Account.Platform, p.Account.Channel, models.DailyRecordTotalPoints, v.Amount)
 			// 记录周流水
 			p.setItemWeekRecord(v)
-			// 邀请裂变
+			// 邀请裂变好友列表
 			p.setInviteRatioRecord(v.Amount)
 			// 设置邀请人的每日奖励(邀请裂变贡献)
 			p.inviteScore(v.Amount)

+ 14 - 2
game/game_cluster/nodes/web/controller/invite.go

@@ -10,7 +10,7 @@ import (
 )
 
 func (p *Controller) invite(c *mhayaGin.Context) {
-
+	mhayaLogger.Debugf("execute => invite()")
 	var pa param.InviteReq
 	if err := c.BindJSON(&pa); err != nil {
 		mhayaLogger.Warnf("if guide err {. params=%s", pa)
@@ -22,13 +22,25 @@ func (p *Controller) invite(c *mhayaGin.Context) {
 		return
 	}
 
-	_, err := p.Auth(c)
+	token, err := p.Auth(c)
 	if code.IsFail(err) {
 		mhayaLogger.Warnf("if invite token err {. params=%s", c.GetHeader(constant.Token))
 		code.RenderResult(c, code.AccountTokenValidateFail)
 		return
 	}
 
+	ctl, ok := p.GetChildActor(token.PlayerID)
+	if !ok {
+		code.RenderResult(c, code.Error)
+		return
+	}
+	errCode := ctl.CallWait(token.TargetPath, "invite", &pa, nil)
+	if code.IsFail(errCode) {
+		mhayaLogger.Warnf("[invite] param = %v, errCode = %v", errCode)
+		code.RenderResult(c, errCode)
+		return
+	}
+
 	code.RenderResult(c, code.OK)
 }
 

+ 1 - 1
game/game_cluster/robot_client/main.go

@@ -44,7 +44,7 @@ func main() {
 
 	// 发送请求的 goroutine
 	go func() {
-		for i := *userOffset; i < *count; i++ {
+		for i := *userOffset; i < *count+*userOffset; i++ {
 			<-reqCh
 			go func() {
 				defer wg.Done()

+ 1 - 0
game/go.mod

@@ -9,6 +9,7 @@ require (
 	github.com/gin-gonic/gin v1.10.0
 	github.com/go-redis/redis/v8 v8.11.5
 	github.com/go-sql-driver/mysql v1.8.1
+	github.com/google/uuid v1.3.1
 	github.com/json-iterator/go v1.1.12
 	github.com/mhaya v1.3.13
 	github.com/mhaya/components/cron v1.3.13

+ 2 - 0
game/go.sum

@@ -60,6 +60,8 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gops v0.3.28 h1:2Xr57tqKAmQYRAfG12E+yLcoa2Y42UJo2lOrUFL9ark=
 github.com/google/gops v0.3.28/go.mod h1:6f6+Nl8LcHrzJwi8+p0ii+vmBFSlB4f8cOOkTJ7sk4c=
+github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
+github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
 github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=