Ver código fonte

Merge remote-tracking branch 'refs/remotes/origin/dev-ll'

# Conflicts:
#	game/config/data/weeklySignInConfig.json
#	game/game_cluster/nodes/game/module/player/actor_player.go
#	game/game_cluster/nodes/game/module/player/invite.go
#	game/game_cluster/nodes/web/controller/controller.go
zhengtao 8 meses atrás
pai
commit
c325331f77

+ 46 - 4
extend/slice/slice_test.go

@@ -2,7 +2,11 @@ package mhayaSlice
 
 import (
 	"fmt"
+	mhayaString "github.com/mhaya/extend/string"
+	mhayaTime "github.com/mhaya/extend/time"
+	"slices"
 	"testing"
+	"time"
 )
 
 func TestUnique(t *testing.T) {
@@ -10,10 +14,48 @@ func TestUnique(t *testing.T) {
 	fmt.Println(list)
 }
 
+var currentTime = int64(1727366400)
+
 func TestUniques(t *testing.T) {
-	s1 := []string{"1", "2", "3"}
-	s2 := []string{"1", "2", "3"}
+	//s1 := []string{"1", "2", "3"}
+	//s2 := []string{"1", "2", "3"}
+	//
+	//list := Uniques[string](s1, s2)
+	//fmt.Println(list)
 
-	list := Uniques[string](s1, s2)
-	fmt.Println(list)
+	//var roolDay = time.Now().Unix()
+	var roolDay = int64(1727337600)
+
+	for i := 0; i < 10; i++ {
+		RefreshRoll(&roolDay)
+	}
+}
+
+func RefreshRoll(roolDay *int64) bool {
+	arr := []string{"8", "16", "24"}
+	slice := make([]int, 0)
+	for _, s := range arr {
+		hour, _ := mhayaString.ToInt(s)
+		slice = append(slice, hour)
+	}
+
+	// 小时数,24小时制
+	//curHour := time.Now().Hour()
+	curHour := 24
+	rollHour := time.Unix(*roolDay, 0).Hour()
+
+	isToday := mhayaTime.CreateFromTimestamp(*roolDay).IsToday()
+	if isToday {
+		slice = slices.DeleteFunc(slice, func(x int) bool {
+			return x <= rollHour
+		})
+	}
+
+	fmt.Println("slice:", slice)
+	if slices.Contains(slice, curHour) && isToday {
+		*roolDay = currentTime
+		fmt.Println(" execute ==> num := p.Item[ItemRoll].AddSameTwo()")
+		return true
+	}
+	return false
 }

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

@@ -10,5 +10,6 @@
 		{"ID":9,"Reward":null,"Condition":"7"},
 		{"ID":10,"Reward":null,"Condition":"1"},
 		{"ID":11,"Reward":null,"Condition":"1"},
-		{"ID":12,"Reward":null,"Condition":"4,6"}	
+		{"ID":12,"Reward":null,"Condition":"4,6"},
+		{"ID":13,"Reward":null,"Condition":"0.1,500"}
 ]

+ 1 - 1
game/config/data/rankConfig.json

@@ -1,6 +1,6 @@
 [
 		{"ID":1,"Enable":1,"Type":1,"Source":1,"ShowTotal":100,"Reward":null,"IsBot":1,"StartTime":"","EndTime":"","ShowTime":""},
-		{"ID":2,"Enable":1,"Type":1,"Source":2,"ShowTotal":100,"Reward":null,"IsBot":1,"StartTime":"","EndTime":"","ShowTime":""},
+		{"ID":2,"Enable":1,"Type":1,"Source":2,"ShowTotal":500,"Reward":null,"IsBot":1,"StartTime":"","EndTime":"","ShowTime":""},
 		{"ID":3,"Enable":0,"Type":2,"Source":2,"ShowTotal":1000,"Reward":[{"itemBaseType":4,"itemID":3,"amount":500000000000}],"IsBot":1,"StartTime":"","EndTime":"","ShowTime":""},
 		{"ID":4,"Enable":1,"Type":1,"Source":3,"ShowTotal":100,"Reward":null,"IsBot":1,"StartTime":"","EndTime":"","ShowTime":""}	
 ]

+ 31 - 31
game/config/data/weeklySignInConfig.json

@@ -1,32 +1,32 @@
 [
-		{"ID":0,"Reward":[{"itemBaseType":1,"itemID":5,"amount":5000}]},
-		{"ID":1,"Reward":[{"itemBaseType":1,"itemID":5,"amount":50000}]},
-		{"ID":2,"Reward":[{"itemBaseType":1,"itemID":5,"amount":200000}]},
-		{"ID":3,"Reward":[{"itemBaseType":1,"itemID":5,"amount":500000}]},
-		{"ID":4,"Reward":[{"itemBaseType":1,"itemID":5,"amount":1000000}]},
-		{"ID":5,"Reward":[{"itemBaseType":1,"itemID":5,"amount":2000000}]},
-		{"ID":6,"Reward":[{"itemBaseType":1,"itemID":5,"amount":3000000}]},
-		{"ID":7,"Reward":[{"itemBaseType":1,"itemID":5,"amount":4000000}]},
-		{"ID":8,"Reward":[{"itemBaseType":1,"itemID":5,"amount":5000000}]},
-		{"ID":9,"Reward":[{"itemBaseType":1,"itemID":5,"amount":5500000}]},
-		{"ID":10,"Reward":[{"itemBaseType":1,"itemID":5,"amount":6000000}]},
-		{"ID":11,"Reward":[{"itemBaseType":1,"itemID":5,"amount":8000000}]},
-		{"ID":12,"Reward":[{"itemBaseType":1,"itemID":5,"amount":10000000}]},
-		{"ID":13,"Reward":[{"itemBaseType":1,"itemID":5,"amount":15000000}]},
-		{"ID":14,"Reward":[{"itemBaseType":1,"itemID":5,"amount":30000000}]},
-		{"ID":15,"Reward":[{"itemBaseType":1,"itemID":5,"amount":35000000}]},
-		{"ID":16,"Reward":[{"itemBaseType":1,"itemID":5,"amount":40000000}]},
-		{"ID":17,"Reward":[{"itemBaseType":1,"itemID":5,"amount":50000000}]},
-		{"ID":18,"Reward":[{"itemBaseType":1,"itemID":5,"amount":60000000}]},
-		{"ID":19,"Reward":[{"itemBaseType":1,"itemID":5,"amount":100000000}]},
-		{"ID":20,"Reward":[{"itemBaseType":1,"itemID":5,"amount":130000000}]},
-		{"ID":21,"Reward":[{"itemBaseType":1,"itemID":5,"amount":140000000}]},
-		{"ID":22,"Reward":[{"itemBaseType":1,"itemID":5,"amount":150000000}]},
-		{"ID":23,"Reward":[{"itemBaseType":1,"itemID":5,"amount":200000000}]},
-		{"ID":24,"Reward":[{"itemBaseType":1,"itemID":5,"amount":220000000}]},
-		{"ID":25,"Reward":[{"itemBaseType":1,"itemID":5,"amount":250000000}]},
-		{"ID":26,"Reward":[{"itemBaseType":1,"itemID":5,"amount":300000000}]},
-		{"ID":27,"Reward":[{"itemBaseType":1,"itemID":5,"amount":350000000}]},
-		{"ID":28,"Reward":[{"itemBaseType":1,"itemID":5,"amount":400000000}]},
-		{"ID":29,"Reward":[{"itemBaseType":1,"itemID":5,"amount":500000000}]}	
-]
+  {"ID":0,"Reward":[{"itemBaseType":1,"itemID":5,"amount":5000}]},
+  {"ID":1,"Reward":[{"itemBaseType":1,"itemID":5,"amount":50000}]},
+  {"ID":2,"Reward":[{"itemBaseType":1,"itemID":5,"amount":200000}]},
+  {"ID":3,"Reward":[{"itemBaseType":1,"itemID":5,"amount":500000}]},
+  {"ID":4,"Reward":[{"itemBaseType":1,"itemID":5,"amount":1000000}]},
+  {"ID":5,"Reward":[{"itemBaseType":1,"itemID":5,"amount":2000000}]},
+  {"ID":6,"Reward":[{"itemBaseType":1,"itemID":5,"amount":3000000}]},
+  {"ID":7,"Reward":[{"itemBaseType":1,"itemID":5,"amount":4000000}]},
+  {"ID":8,"Reward":[{"itemBaseType":1,"itemID":5,"amount":5000000}]},
+  {"ID":9,"Reward":[{"itemBaseType":1,"itemID":5,"amount":5500000}]},
+  {"ID":10,"Reward":[{"itemBaseType":1,"itemID":5,"amount":6000000}]},
+  {"ID":11,"Reward":[{"itemBaseType":1,"itemID":5,"amount":8000000}]},
+  {"ID":12,"Reward":[{"itemBaseType":1,"itemID":5,"amount":10000000}]},
+  {"ID":13,"Reward":[{"itemBaseType":1,"itemID":5,"amount":15000000}]},
+  {"ID":14,"Reward":[{"itemBaseType":1,"itemID":5,"amount":30000000}]},
+  {"ID":15,"Reward":[{"itemBaseType":1,"itemID":5,"amount":35000000}]},
+  {"ID":16,"Reward":[{"itemBaseType":1,"itemID":5,"amount":40000000}]},
+  {"ID":17,"Reward":[{"itemBaseType":1,"itemID":5,"amount":50000000}]},
+  {"ID":18,"Reward":[{"itemBaseType":1,"itemID":5,"amount":60000000}]},
+  {"ID":19,"Reward":[{"itemBaseType":1,"itemID":5,"amount":100000000}]},
+  {"ID":20,"Reward":[{"itemBaseType":1,"itemID":5,"amount":130000000}]},
+  {"ID":21,"Reward":[{"itemBaseType":1,"itemID":5,"amount":140000000}]},
+  {"ID":22,"Reward":[{"itemBaseType":1,"itemID":5,"amount":150000000}]},
+  {"ID":23,"Reward":[{"itemBaseType":1,"itemID":5,"amount":200000000}]},
+  {"ID":24,"Reward":[{"itemBaseType":1,"itemID":5,"amount":220000000}]},
+  {"ID":25,"Reward":[{"itemBaseType":1,"itemID":5,"amount":250000000}]},
+  {"ID":26,"Reward":[{"itemBaseType":1,"itemID":5,"amount":300000000}]},
+  {"ID":27,"Reward":[{"itemBaseType":1,"itemID":5,"amount":350000000}]},
+  {"ID":28,"Reward":[{"itemBaseType":1,"itemID":5,"amount":400000000}]},
+  {"ID":29,"Reward":[{"itemBaseType":1,"itemID":5,"amount":500000000}]}
+]

+ 2 - 1
game/game_cluster/internal/constant/constant.go

@@ -10,7 +10,8 @@ const (
 	DrawDailyKey  = "drawDaily"
 	DrawWeeklyKey = "drawWeekly"
 
-	InviteKey = "Invite"
+	InviteKey      = "Invite"
+	InviteScoreKey = "InviteScore"
 
 	PlayerDailyKey      = "PlayerDaily"
 	PlayerStatHKey      = "PlayerStat"

+ 1 - 1
game/game_cluster/internal/data/weeklySignInConfig.go

@@ -12,7 +12,7 @@ type weeklySignInConfig struct {
 }
 
 type WeeklySignInConfigRow struct {
-	ID     int          // #周签到
+	ID     int          // #周签到
 	Reward []ItemReward // 奖励
 }
 

+ 9 - 0
game/game_cluster/internal/mdb/models/item.go

@@ -130,6 +130,15 @@ func (i *Item) AddSame() int {
 	return 0
 }
 
+func (i *Item) AddSameTwo(denominator int) int {
+	if i.Num < i.MaxNum/denominator {
+		i.Num = i.MaxNum/denominator + 1
+		i.Total += i.MaxNum/denominator + 1
+		return i.MaxNum / denominator
+	}
+	return 0
+}
+
 func (i *Item) AddMaxNum(num int) {
 	if i.ID == ItemRoll {
 		i.MaxNum += num

+ 54 - 15
game/game_cluster/internal/mdb/models/player.go

@@ -13,6 +13,7 @@ import (
 	"github.com/mhaya/game/game_cluster/internal/token"
 	mhayaLogger "github.com/mhaya/logger"
 	"math/rand"
+	"slices"
 	"strings"
 	"time"
 )
@@ -157,7 +158,7 @@ func (p *Player) InitDaily() {
 func (p *Player) InitWeekly() {
 	if !mhayaTime.CreateFromTimestamp(p.WeeklyRefreshTime).IsThisWeek() {
 
-		p.SinIn.RefreshSignIn()
+		//p.SinIn.RefreshSignIn()
 		// 刷新是否有排行榜奖励
 		p.RankReward.InitRank(p.UserName, 2)
 
@@ -165,6 +166,34 @@ func (p *Player) InitWeekly() {
 	}
 }
 
+func (p *Player) InitSignIn() {
+	ret := data.WeeklySignInConfig.GetAll()
+
+	// 最近一次签到
+	last, exists := p.SinIn.Sign[p.SinIn.Num]
+	if !exists {
+		// 签到数据初始化
+		p.SinIn.RefreshSignIn()
+		return
+	}
+
+	// 将时间戳转换为 time.Time 类型
+	t := time.Unix(last.SignTime, 0)
+
+	// todo 测试代码
+	// 减去一天
+	//t = t.Add(-24 * time.Hour)
+
+	// 计算第二天的开始时间(即第二天的零点)
+	nextDayStart := t.Add(24 * time.Hour).Truncate(24 * time.Hour)
+
+	if p.SinIn.Num >= len(ret)-1 && time.Now().After(nextDayStart) {
+		// 签到周期满的第二天
+		p.SinIn.RefreshSignIn()
+	}
+
+}
+
 func (p *Player) InitAchieveTask() {
 	p.AchieveTask.RefreshAchieveTask()
 }
@@ -203,24 +232,34 @@ func (p *Player) RefreshRoll() bool {
 	if len(arr) != 2 {
 		return false
 	}
-	h, _ := mhayaString.ToInt64(arr[0])
-	m, _ := mhayaString.ToInt64(arr[1])
-	s := mhayaTime.CreateFromTimestamp(p.RollDay).DiffInSeconds(mhayaTime.Now())
-	if s >= h {
-		p.RollDay = mhayaTime.Now().Unix()
-		num := p.Item[ItemRoll].AddAll()
-		if num > 0 {
-			p.SetPlayerRewardLog(SourceRefreshRoll, 1, []data.ItemReward{{ItemID: ItemRoll, ItemBaseType: 1, Amount: num}}, []data.ItemReward{}, 0)
-		}
-		mhayaLogger.Infof("RefreshRoll by condition 1 rollDay:%d,num:%v", s, num)
-		return true
-	} else if s >= m {
+
+	slice := make([]int, 0)
+	for _, s := range arr {
+		hour, _ := mhayaString.ToInt(s)
+		slice = append(slice, hour)
+	}
+
+	// 小时数,24小时制
+	curHour := time.Now().Hour()
+	if curHour == 0 {
+		curHour = 24
+	}
+	rollHour := time.Unix(p.RollDay, 0).Hour()
+
+	isToday := mhayaTime.CreateFromTimestamp(p.RollDay).IsToday()
+	if isToday {
+		slice = slices.DeleteFunc(slice, func(x int) bool {
+			return x <= rollHour
+		})
+	}
+
+	if slices.Contains(slice, curHour) && isToday {
 		p.RollDay = mhayaTime.Now().Unix()
-		num := p.Item[ItemRoll].AddSame()
+		num := p.Item[ItemRoll].AddSameTwo(8)
 		if num > 0 {
 			p.SetPlayerRewardLog(SourceRefreshRoll, 2, []data.ItemReward{{ItemID: ItemRoll, ItemBaseType: 1, Amount: num}}, []data.ItemReward{}, 0)
 		}
-		mhayaLogger.Infof("RefreshRoll by condition 2 rollDay:%d,num:%v", s, num)
+		mhayaLogger.Infof("RefreshRoll by condition 2 rollDay:%d,num:%v", p.RollDay, num)
 		return true
 	}
 	return false

+ 7 - 4
game/game_cluster/internal/mdb/models/signin.go

@@ -1,9 +1,11 @@
 package models
 
-import "github.com/mhaya/game/game_cluster/internal/data"
+import (
+	"github.com/mhaya/game/game_cluster/internal/data"
+)
 
 type SignInBase struct {
-	ID       int               `json:"id"  bson:"id""`       // #周签到
+	ID       int               `json:"id"  bson:"id""`       // #周签到
 	Reward   []data.ItemReward `json:"reward" bson:"reward"` // 奖励
 	IsSign   int               `json:"isSign"  bson:"isSign"`
 	SignTime int64             `json:"signTime"  bson:"signTime"`
@@ -23,7 +25,7 @@ func NewSignIn() SignIn {
 	}
 }
 
-func (si SignIn) RefreshSignIn() {
+func (si *SignIn) RefreshSignIn() {
 	ret := data.WeeklySignInConfig.GetAll()
 	for _, d := range ret {
 		si.Sign[d.ID] = &SignInBase{
@@ -32,6 +34,7 @@ func (si SignIn) RefreshSignIn() {
 			IsSign:   0,
 			SignTime: 0,
 		}
-
 	}
+
+	si.Num = 0
 }

+ 5 - 0
game/game_cluster/internal/param/param.go

@@ -175,3 +175,8 @@ type SetPwdReq struct {
 	PassWord        string `json:"password" validate:"required"`
 	ConfirmPassWord string `json:"confirmPassword" validate:"required"`
 }
+
+type InviteRatioResp struct {
+	Ratio    float64 `json:"ratio"`
+	ClaimNum int     `json:"claimNUm"`
+}

+ 7 - 0
game/game_cluster/nodes/game/module/player/actor_player.go

@@ -63,9 +63,15 @@ func (p *actorPlayer) OnInit() {
 
 	p.Remote().Register("signIn", p.signIn) // 签到
 
+	p.Remote().Register("signInList", p.signInList) // 签到列表
+
 	p.Remote().Register("rank", p.rank) // 排行榜
 
 	p.Remote().Register("inviteRecord", p.inviteRecord) // 邀请累计信息
+	p.Remote().Register("invite", p.invite)                       // 邀请
+	p.Remote().Register("inviteRecord", p.inviteRecord)           // 邀请累计信息
+	p.Remote().Register("inviteRewardRatio", p.inviteRewardRatio) // 邀请裂变查询
+	p.Remote().Register("inviteClaimRatio", p.inviteClaimRatio)   // 领取邀请裂变奖励
 
 	p.Remote().Register("share", p.share) // 分享
 
@@ -471,6 +477,7 @@ func (p *actorPlayer) login(req *token.Token) (*models.Player, int32) {
 	p.Player.InitDaily()
 
 	p.Player.InitWeekly()
+	p.Player.InitSignIn()
 	p.Player.InitAchieveTask()
 
 	p.updPassWordTime()

+ 45 - 0
game/game_cluster/nodes/game/module/player/invite.go

@@ -10,6 +10,8 @@ import (
 	"github.com/mhaya/game/game_cluster/internal/mdb/models"
 	"github.com/mhaya/game/game_cluster/internal/param"
 	clog "github.com/mhaya/logger"
+	"strconv"
+	"strings"
 )
 
 func (p *actorPlayer) invite() {
@@ -92,3 +94,46 @@ func (p *actorPlayer) inviteRecord() (*param.WeeklyRankConfigResp, int32) {
 	return &p.Player.IsLeader, code.OK
 }
 */
+
+// 邀请裂变奖励
+func (p *actorPlayer) inviteRewardRatio() (*param.InviteRatioResp, int32) {
+	if !p.isOnline {
+		return nil, code.PlayerNotLogin
+	}
+
+	inviteReword, _ := data.DiscreteRuleConfig.Get(13)
+	split := strings.Split(inviteReword.Condition, ",")
+	ratio, _ := strconv.ParseFloat(split[0], 64)
+	minClaim, _ := strconv.Atoi(split[1])
+
+	key := fmt.Sprintf("%v:1:%v", constant.InviteScoreKey, p.Player.UserName)
+	claimScore, _ := mdb.RDB.Get(context.Background(), key).Int()
+	if claimScore < minClaim {
+		return nil, code.OK
+	}
+
+	return &param.InviteRatioResp{
+		Ratio:    ratio,
+		ClaimNum: claimScore,
+	}, code.OK
+}
+
+// 领取邀请裂变奖励
+func (p *actorPlayer) inviteClaimRatio() int32 {
+	if !p.isOnline {
+		return code.PlayerNotLogin
+	}
+
+	key := fmt.Sprintf("%v:1:%v", constant.InviteScoreKey, p.Player.UserName)
+
+	claimScore, err := mdb.RDB.Get(context.Background(), key).Int()
+	if err != nil {
+		return code.OK
+	}
+
+	beforeNum := p.Player.Item[models.ItemScore].Num
+	p.Player.Item[models.ItemScore].Num = beforeNum + claimScore
+
+	mdb.RDB.Del(context.Background(), key)
+	return code.OK
+}

+ 18 - 0
game/game_cluster/nodes/game/module/player/signin.go

@@ -3,6 +3,7 @@ package player
 import (
 	mhayaTime "github.com/mhaya/extend/time"
 	"github.com/mhaya/game/game_cluster/internal/code"
+	"github.com/mhaya/game/game_cluster/internal/mdb/models"
 	"github.com/mhaya/game/game_cluster/internal/param"
 )
 
@@ -10,6 +11,16 @@ func (p *actorPlayer) signIn() (*param.ChangeData, int32) {
 	if !p.isOnline {
 		return nil, code.PlayerNotLogin
 	}
+
+	// todo 测试代码
+	//resp := p.Player.SignIn()
+	//p.dirty = true
+	//
+	//p.itemStat(resp.AddItem)
+	//
+	//return resp, code.OK
+
+	// 正式代码
 	if !mhayaTime.CreateFromTimestamp(p.Player.SinIn.SignDailyTime).IsToday() {
 		resp := p.Player.SignIn()
 		p.dirty = true
@@ -21,3 +32,10 @@ func (p *actorPlayer) signIn() (*param.ChangeData, int32) {
 		return nil, code.PlayerSignInError
 	}
 }
+
+func (p *actorPlayer) signInList() (*models.SignIn, int32) {
+	if !p.isOnline {
+		return nil, code.PlayerNotLogin
+	}
+	return &p.Player.SinIn, code.OK
+}

+ 18 - 0
game/game_cluster/nodes/game/module/player/stat.go

@@ -1,10 +1,16 @@
 package player
 
 import (
+	"context"
+	"fmt"
 	mhayaTime "github.com/mhaya/extend/time"
 	"github.com/mhaya/game/game_cluster/internal/constant"
 	"github.com/mhaya/game/game_cluster/internal/data"
+	"github.com/mhaya/game/game_cluster/internal/mdb"
 	"github.com/mhaya/game/game_cluster/internal/mdb/models"
+	"math"
+	"strconv"
+	"strings"
 )
 
 // loginStat 登录相关
@@ -26,10 +32,13 @@ func (p *actorPlayer) rollStat() {
 }
 
 func (p *actorPlayer) itemStat(item map[int]*data.ItemReward) {
+
 	for _, v := range item {
 		if v.ItemID == models.ItemScore {
 			models.SetRank(constant.RankSourceScore, p.Player.IsRobot, p.Player.UserName, v.Amount)
 			models.SetDailyRecord(p.Account.Platform, p.Account.Channel, models.DailyRecordTotalPoints, v.Amount)
+			// 设置邀请人的每日奖励
+			p.inviteScore(v.Amount)
 		} else if v.ItemID == models.ItemU {
 			models.SetDailyRecord(p.Account.Platform, p.Account.Channel, models.DailyRecordUProduced, v.Amount)
 		}
@@ -43,3 +52,12 @@ func (p *actorPlayer) cashOutStat(num int) {
 func (p *actorPlayer) playerStart() {
 	models.SetTotalPlayerRecord(p.Account.Platform, p.Account.Channel, p.Player.UserName, p.Player.Level)
 }
+
+func (p *actorPlayer) inviteScore(num int) {
+	scoreRatio, _ := data.DiscreteRuleConfig.Get(13)
+	split := strings.Split(scoreRatio.Condition, ",")
+	ratio, _ := strconv.ParseFloat(split[0], 64)
+	inviteScore := math.Floor(float64(num) * ratio)
+	key := fmt.Sprintf("%v:1:%v", constant.InviteScoreKey, p.Player.Pid)
+	mdb.RDB.IncrBy(context.Background(), key, int64(inviteScore))
+}

+ 6 - 0
game/game_cluster/nodes/web/controller/controller.go

@@ -70,8 +70,14 @@ func (p *Controller) Init() {
 	group.POST("/getLotteryConfig", p.getLotteryConfig)
 
 	group.POST("/signIn", p.signIn)
+	group.POST("/signInList", p.signInList)
+
 	group.POST("/rank", p.rank)
 	//group.POST("/invite", p.invite)
+	group.POST("/invite", p.invite)
+	group.POST("/inviteRewardRatio", p.inviteRewardRatio)
+	group.POST("/inviteClaimRatio", p.inviteClaimRatio)
+
 	group.POST("/share", p.share)
 	group.POST("/claim", p.claim)
 

+ 49 - 0
game/game_cluster/nodes/web/controller/invite.go

@@ -30,3 +30,52 @@ func (p *Controller) invite(c *mhayaGin.Context) {
 
 	code.RenderResult(c, code.OK)
 }
+
+func (p *Controller) inviteRewardRatio(c *mhayaGin.Context) {
+
+	token, err := p.Auth(c)
+	if code.IsFail(err) {
+		mhayaLogger.Warnf("if inviteRewardRatio 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
+	}
+
+	var resp = &param.InviteRatioResp{}
+	errCode := ctl.CallWait(token.TargetPath, "inviteRewardRatio", nil, resp)
+	if code.IsFail(errCode) {
+		mhayaLogger.Warnf("[inviteRewardRatio] param = %v, errCode = %v", errCode)
+		code.RenderResult(c, errCode)
+		return
+	}
+	code.RenderResult(c, code.OK, resp)
+}
+
+func (p *Controller) inviteClaimRatio(c *mhayaGin.Context) {
+
+	token, err := p.Auth(c)
+	if code.IsFail(err) {
+		mhayaLogger.Warnf("if inviteClaimRatio 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, "inviteClaimRatio", nil, nil)
+	if code.IsFail(errCode) {
+		mhayaLogger.Warnf("[inviteClaimRatio] param = %v, errCode = %v", errCode)
+		code.RenderResult(c, errCode)
+		return
+	}
+	code.RenderResult(c, code.OK, nil)
+}

+ 24 - 0
game/game_cluster/nodes/web/controller/signin.go

@@ -4,6 +4,7 @@ import (
 	mhayaGin "github.com/mhaya/components/gin"
 	"github.com/mhaya/game/game_cluster/internal/code"
 	"github.com/mhaya/game/game_cluster/internal/constant"
+	"github.com/mhaya/game/game_cluster/internal/mdb/models"
 	"github.com/mhaya/game/game_cluster/internal/param"
 	mhayaLogger "github.com/mhaya/logger"
 )
@@ -30,3 +31,26 @@ func (p *Controller) signIn(c *mhayaGin.Context) {
 	}
 	code.RenderResult(c, code.OK, resp)
 }
+
+func (p *Controller) signInList(c *mhayaGin.Context) {
+	token, err := p.Auth(c)
+	if code.IsFail(err) {
+		mhayaLogger.Warnf("if signIn token err {. params=%s", c.GetHeader(constant.Token))
+		code.RenderResult(c, code.AccountTokenValidateFail)
+		return
+	}
+
+	resp := &models.SignIn{}
+	ctl, ok := p.GetChildActor(token.PlayerID)
+	if !ok {
+		code.RenderResult(c, code.Error)
+		return
+	}
+	errCode := ctl.CallWait(token.TargetPath, "signInList", nil, resp)
+	if code.IsFail(errCode) {
+		mhayaLogger.Warnf("[signInList] param = nil, errCode = %v", errCode)
+		code.RenderResult(c, errCode)
+		return
+	}
+	code.RenderResult(c, code.OK, resp)
+}