Browse Source

邀请裂变奖励代码补充

Administrator 8 months ago
parent
commit
bb2e2dbc43

+ 8 - 8
extend/slice/slice_test.go

@@ -17,22 +17,22 @@ func TestUnique(t *testing.T) {
 var currentTime = int64(1727366400)
 
 func TestUniques(t *testing.T) {
-	//s1 := []string{"1", "2", "3"}
-	//s2 := []string{"1", "2", "3"}
-	//
-	//list := Uniques[string](s1, s2)
-	//fmt.Println(list)
+	s1 := []string{"1", "2", "3"}
+	s2 := []string{"1", "2", "3"}
 
-	//var roolDay = time.Now().Unix()
-	var roolDay = int64(1727337600)
+	list := Uniques[string](s1, s2)
+	fmt.Println(list)
+
+	var roolDay = time.Now().Unix()
 
 	for i := 0; i < 10; i++ {
 		RefreshRoll(&roolDay)
 	}
+
 }
 
 func RefreshRoll(roolDay *int64) bool {
-	arr := []string{"8", "16", "24"}
+	arr := []string{"14", "16", "24"}
 	slice := make([]int, 0)
 	for _, s := range arr {
 		hour, _ := mhayaString.ToInt(s)

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

@@ -178,4 +178,5 @@ type SetPwdReq struct {
 type InviteRatioResp struct {
 	Ratio    float64 `json:"ratio"`
 	ClaimNum int     `json:"claimNUm"`
+	MinClaim int     `json:"minClaim"`
 }

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

@@ -86,6 +86,8 @@ func (p *actorPlayer) OnInit() {
 
 	p.Remote().Register("cashOutList", p.cashOutList) // 提现记录
 
+	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(1*time.Minute, p.setRedis)

+ 15 - 0
game/game_cluster/nodes/game/module/player/cashout.go

@@ -12,10 +12,12 @@ 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"
+	mhayaUnit "github.com/mhaya/game/game_cluster/unit"
 	"go.mongodb.org/mongo-driver/bson"
 	"go.mongodb.org/mongo-driver/bson/primitive"
 	"go.mongodb.org/mongo-driver/mongo/options"
 	"log"
+	"sync"
 	"time"
 )
 
@@ -263,3 +265,16 @@ func (p *actorPlayer) updCashOutStatusByOld(tp int) {
 	}
 	p.dirty = true
 }
+
+// 基于启动项目环境的单元测试
+func (p *actorPlayer) unitTest() {
+	var wg sync.WaitGroup
+	// 邀请排行榜机器人
+	accounts := mhayaUnit.BuildAccount(100)
+	for _, account := range accounts {
+		wg.Add(1)
+		mhayaUnit.InviteRankRobot(account, &wg)
+	}
+	wg.Wait()
+
+}

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

@@ -120,13 +120,11 @@ func (p *actorPlayer) inviteRewardRatio() (*param.InviteRatioResp, int32) {
 
 	key := fmt.Sprintf("%v:1:%v", constant.InviteScoreKey, p.Player.UserName)
 	claimScore, _ := mdb.RDB.Get(context.Background(), key).Int()
-	if claimScore < minClaim {
-		return &param.InviteRatioResp{}, code.OK
-	}
 
 	return &param.InviteRatioResp{
 		Ratio:    ratio,
 		ClaimNum: claimScore,
+		MinClaim: minClaim,
 	}, code.OK
 }
 
@@ -143,8 +141,7 @@ func (p *actorPlayer) inviteClaimRatio() int32 {
 		return code.OK
 	}
 
-	beforeNum := p.Player.Item[models.ItemScore].Num
-	p.Player.Item[models.ItemScore].Num = beforeNum + claimScore
+	p.Player.Item[models.ItemScore].Num += claimScore
 
 	mdb.RDB.Del(context.Background(), key)
 	return code.OK

+ 23 - 0
game/game_cluster/nodes/web/controller/cashout.go

@@ -137,3 +137,26 @@ func (p *Controller) cashOutList(c *mhayaGin.Context) {
 
 	code.RenderResult(c, code.OK, resp)
 }
+
+func (p *Controller) unitTest(c *mhayaGin.Context) {
+	token, err := p.Auth(c)
+	if code.IsFail(err) {
+		mhayaLogger.Warnf("if cashOutList 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, "unitTest", nil, nil)
+	if code.IsFail(errCode) {
+		mhayaLogger.Warnf("[unitTest] errCode = %v", errCode)
+		code.RenderResult(c, errCode)
+		return
+	}
+
+	code.RenderResult(c, code.OK)
+}

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

@@ -89,6 +89,7 @@ func (p *Controller) Init() {
 	group.POST("/cashOut", p.cashOut)
 	group.POST("/setPwd", p.setPwd)
 	group.POST("/cashOutList", p.cashOutList)
+	group.POST("/unitTest", p.unitTest)
 
 	system := mhayaActor.NewSystem()
 	system.SetApp(p.App)

+ 34 - 35
game/game_cluster/robot_client/main.go

@@ -27,41 +27,40 @@ var (
 	printLog          = false                    // 是否输出详细日志
 )
 
-func main() {
-
-	var wg sync.WaitGroup
-
-	//accounts := make(map[string]*param.LoginReq)
-	//for i := 1; i <= maxRobotNum; i++ {
-	//	str := strconv.Itoa(i)
-	//	accounts[str] = &param.LoginReq{
-	//		Pid:      2,
-	//		OpenID:   str,
-	//		Platform: "ios",
-	//		Channel:  "tg",
-	//	}
-	//}
-	//var Url = ""
-	//for _, val := range accounts {
-	//	k := rand.Intn(2)
-	//	if k == 1 {
-	//		Url = url2
-	//	} else {
-	//		Url = url
-	//	}
-	//	fmt.Println(Url)
-	//	time.Sleep(200 * time.Millisecond)
-	//	go RunRobot(Url, val)
-	//}
-
-	// 邀请排行榜机器人
-	accounts := BuildAccount(1)
-	for _, account := range accounts {
-		wg.Add(1)
-		InviteRankRobot(account, &wg)
-	}
-	wg.Wait()
-}
+//func main() {
+//
+//	//accounts := make(map[string]*param.LoginReq)
+//	//for i := 1; i <= maxRobotNum; i++ {
+//	//	str := strconv.Itoa(i)
+//	//	accounts[str] = &param.LoginReq{
+//	//		Pid:      2,
+//	//		OpenID:   str,
+//	//		Platform: "ios",
+//	//		Channel:  "tg",
+//	//	}
+//	//}
+//	//var Url = ""
+//	//for _, val := range accounts {
+//	//	k := rand.Intn(2)
+//	//	if k == 1 {
+//	//		Url = url2
+//	//	} else {
+//	//		Url = url
+//	//	}
+//	//	fmt.Println(Url)
+//	//	time.Sleep(200 * time.Millisecond)
+//	//	go RunRobot(Url, val)
+//	//}
+//
+//	var wg sync.WaitGroup
+//	// 邀请排行榜机器人
+//	accounts := BuildAccount(100)
+//	for _, account := range accounts {
+//		wg.Add(1)
+//		InviteRankRobot(account, &wg)
+//	}
+//	wg.Wait()
+//}
 
 var Player = []string{"28q1PjXEh3M", "28q1PjY2LSm", "28q1PjYpgFW", "28q1PjYLLvw", "28qeTc4cwBj", "28q1RgBeGYq", "28q1PjYLLvx", "28qfgUzvh67", "28qeLPTxn79", "28qfBVzrRqm", "28qf5VTadno", "28qfdrK9yVN", "28qg8W7Lbmh"}
 

+ 126 - 0
game/game_cluster/unit/unit.go

@@ -0,0 +1,126 @@
+package unit
+
+import (
+	"fmt"
+	jsoniter "github.com/json-iterator/go"
+	mhayaHttp "github.com/mhaya/extend/http"
+	"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"
+	"math/rand"
+	"strconv"
+	"sync"
+	"time"
+)
+
+var (
+	maxRobotNum       = 1000 // 运行x个机器人
+	url               = "http://127.0.0.1:20000"
+	url2              = "http://127.0.0.1:20001" // web node
+	addr              = "127.0.0.1:10011"        // 网关地址(正式环境通过区服列表获取)
+	serverId    int32 = 10001                    // 测试的游戏服id
+	pid               = "2126001"                // 测试的sdk包id
+	printLog          = false                    // 是否输出详细日志
+)
+
+// 邀请排行榜机器人
+func InviteRankRobot(account *param.LoginReq, wg *sync.WaitGroup) {
+	defer wg.Done()
+	// 注册邀请人账号
+	_, userName := RegisterAndLogin(url, account)
+	//
+	//params := map[string]interface{}{
+	//	"parentName": userName,
+	//}
+	// 注册被邀请人账号并填写邀请
+	RegisterAndLogin(url, account)
+
+	time.Sleep(time.Duration(rand.Int31n(10)) * time.Millisecond)
+
+	//Invite(url, params, token)
+
+	//设置邀请榜单
+	models.SetRank(constant.RankSourceInvite, 0, userName, 1)
+}
+
+func BuildAccount(total int) []*param.LoginReq {
+	accounts := make([]*param.LoginReq, 0)
+	for i := 1; i <= total; i++ {
+		str := strconv.Itoa(i)
+		accounts = append(accounts, &param.LoginReq{
+			Pid:      2,
+			OpenID:   str,
+			Platform: "ios",
+			Channel:  "tg",
+		})
+	}
+	return accounts
+}
+
+// 注册并登录
+func RegisterAndLogin(url string, val *param.LoginReq) (string, string) {
+	token := RegisterDevAccount(url, val)
+	if token == "" {
+		return "", ""
+	}
+	params := map[string]interface{}{
+		"nickName": "guest" + val.OpenID,
+	}
+	userName := Login(url, params, token)
+
+	time.Sleep(time.Duration(rand.Int31n(2)) * time.Millisecond)
+	return token, userName
+}
+
+func RegisterDevAccount(url string, val *param.LoginReq) string {
+	requestURL := fmt.Sprintf("%s/auth", url)
+
+	params := map[string]interface{}{
+		"pid":      val.Pid,
+		"openid":   val.OpenID,
+		"platform": val.Platform,
+		"channel":  val.Channel,
+	}
+
+	jsonBytes, _, err := mhayaHttp.PostJSON(requestURL, params)
+	if err != nil {
+		mhayaLogger.Warn(err)
+		return ""
+	}
+
+	rsp := &code.Result{}
+	err = jsoniter.Unmarshal(jsonBytes, rsp)
+	if err != nil {
+		mhayaLogger.Warn(err)
+		return ""
+	}
+	if rsp.Code == 0 {
+		mhayaLogger.Debugf("register account = %v, result = %v", val.OpenID, rsp)
+		return rsp.Data.(string)
+	}
+	return ""
+}
+
+func Login(url string, params map[string]interface{}, token string) string {
+	requestURL := fmt.Sprintf("%s/login", url)
+	jsonBytes, err := mhayaHttp.PostJSONWithHeader(requestURL, params, token)
+	if err != nil {
+		mhayaLogger.Warn(err)
+		return ""
+	}
+
+	rsp := &code.Result{}
+	err = jsoniter.Unmarshal(jsonBytes, rsp)
+	if err != nil {
+		mhayaLogger.Warn(err)
+		return ""
+	}
+
+	mhayaLogger.Debugf("Login OK")
+
+	m := rsp.Data.(map[string]interface{})
+	i := m["userName"]
+	return i.(string)
+}