Commit e7e42a26b9fd15b01456c4000ddcb1ab65445267

Authored by 王家文
1 parent 35c0874e
Exists in master and in 1 other branch dev-wjw

feat✨:星星商店活动切换自动兑换

controllers/cardholder.go
... ... @@ -57,3 +57,15 @@ func (c *CardHolderController) ShopExchange() {
57 57  
58 58 c.RetRspCodeData(code, rsp)
59 59 }
  60 +
  61 +// AutoExchangeInfo 上期剩余星星自动兑换信息
  62 +func (c *CardHolderController) AutoExchangeInfo() {
  63 + req := new(models.ReqAutoExchangeInfo)
  64 + if !c.GetPostData(req) {
  65 + return
  66 + }
  67 +
  68 + code, rsp := cardholder.HandleAutoExchangeInfo(req)
  69 +
  70 + c.RetRspCodeData(code, rsp)
  71 +}
... ...
dto/cardholder.go
... ... @@ -26,6 +26,8 @@ type CardHolderDataDetails struct {
26 26 CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度
27 27 Round int // 卡册当前轮次
28 28 StarCount int // 星星点数
  29 + LastStarCount int // 上期活动剩余星星点数
  30 + AutoExchangeHolder []int // 活动切换时自动兑换的卡包列表
29 31 }
30 32  
31 33 func NewCardHolderData(uid int64) *CardHolderData {
... ... @@ -44,6 +46,8 @@ func NewCardHolderDataDetails() *CardHolderDataDetails {
44 46 StarSequenceScales: make(map[string]int),
45 47 CardSequenceScales: make(map[string]int),
46 48 Round: 1,
  49 + StarCount: 0,
  50 + AutoExchangeHolder: make([]int, 0),
47 51 }
48 52 }
49 53  
... ...
go.mod
... ... @@ -9,6 +9,7 @@ require (
9 9 github.com/garyburd/redigo v1.6.4
10 10 github.com/go-sql-driver/mysql v1.7.0
11 11 github.com/lixu-any/go-tools v0.0.0-20221128094643-07d54c69e9bf
  12 + github.com/samber/lo v1.39.0
12 13 gorm.io/driver/mysql v1.5.6
13 14 gorm.io/gorm v1.25.9
14 15 )
... ... @@ -34,11 +35,12 @@ require (
34 35 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
35 36 go.uber.org/atomic v1.5.0 // indirect
36 37 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect
  38 + golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect
37 39 golang.org/x/lint v0.0.0-20190930215403-16217165b5de // indirect
38   - golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect
39   - golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f // indirect
40   - golang.org/x/text v0.3.3 // indirect
41   - golang.org/x/tools v0.0.0-20210106214847-113979e3529a // indirect
  40 + golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect
  41 + golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect
  42 + golang.org/x/text v0.3.7 // indirect
  43 + golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 // indirect
42 44 google.golang.org/protobuf v1.25.0 // indirect
43 45 gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
44 46 gopkg.in/yaml.v2 v2.2.8 // indirect
... ...
go.sum
... ... @@ -333,6 +333,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So
333 333 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
334 334 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
335 335 github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
  336 +github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA=
  337 +github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
336 338 github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
337 339 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
338 340 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo=
... ... @@ -400,6 +402,8 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh
400 402 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
401 403 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
402 404 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
  405 +golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 h1:3MTrJm4PyNL9NBqvYDSj3DHl46qQakyfqfWo4jgfaEM=
  406 +golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
403 407 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
404 408 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
405 409 golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
... ... @@ -428,8 +432,9 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
428 432 golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
429 433 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
430 434 golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
431   -golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
432 435 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
  436 +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY=
  437 +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
433 438 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
434 439 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
435 440 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
... ... @@ -460,12 +465,14 @@ golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7w
460 465 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
461 466 golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
462 467 golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
463   -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
464 468 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
  469 +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0=
  470 +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
465 471 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
466 472 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
467   -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
468 473 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
  474 +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
  475 +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
469 476 golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
470 477 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
471 478 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
... ... @@ -484,8 +491,9 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
484 491 golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
485 492 golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
486 493 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
487   -golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ=
488 494 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
  495 +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 h1:0c3L82FDQ5rt1bjTBlchS8t6RQ6299/+5bWMnRLh+uI=
  496 +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
489 497 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
490 498 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
491 499 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
... ...
models/cardholder.go
... ... @@ -66,3 +66,19 @@ type RspStarShopExchange struct {
66 66 AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励
67 67 AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发
68 68 }
  69 +
  70 +// ReqAutoExchangeInfo 请求 上期剩余星星自动兑换信息
  71 +type ReqAutoExchangeInfo struct {
  72 + BaseLoginInfo
  73 + BaseSign
  74 +}
  75 +
  76 +// RspAutoExchangeInfo 返回 上期剩余星星自动兑换信息
  77 +type RspAutoExchangeInfo struct {
  78 + CardHolderInfo
  79 + NewCards []int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表
  80 + AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励
  81 + AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发
  82 + LastStarCount int `form:"last_star_count" json:"last_star_count"` // 上期活动剩余星星点数
  83 + AutoExchangeHolder []int `form:"auto_exchange_holder" json:"auto_exchange_holder"` // 活动切换时自动兑换的卡包列表
  84 +}
... ...
routers/router.go
... ... @@ -17,8 +17,10 @@ func init() {
17 17 beego.Router(prefix+"/cardholder/info", &controllers.CardHolderController{}, "post:Info")
18 18 // 卡包打开
19 19 beego.Router(prefix+"/cardholder/open", &controllers.CardHolderController{}, "post:Open")
20   - // 卡包打开
  20 + // 星星商店兑换
21 21 beego.Router(prefix+"/cardholder/shopexchange", &controllers.CardHolderController{}, "post:ShopExchange")
  22 + // 上期剩余星星自动兑换信息
  23 + beego.Router(prefix+"/cardholder/autoexchangeinfo", &controllers.CardHolderController{}, "post:AutoExchangeInfo")
22 24  
23 25 beego.ErrorController(&controllers.ErrorController{})
24 26 }
... ...
service/cardholder/handle.go
... ... @@ -47,7 +47,7 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH
47 47 }
48 48  
49 49 // 读取游戏数据
50   - gameData := LoadData(req.GameID, req.UID, config.Id)
  50 + gameData := LoadData(req.GameID, req.UID, config)
51 51  
52 52 rsp.CardHolderInfo = GetInfo(gameData, config)
53 53  
... ... @@ -84,7 +84,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
84 84 }
85 85  
86 86 // 读取游戏数据
87   - gameData := LoadData(req.GameID, req.UID, config.Id)
  87 + gameData := LoadData(req.GameID, req.UID, config)
88 88 // 检查游戏数据 轮次等
89 89 code = CheckGameData(gameData, config)
90 90 if code != constd.RECODE_OK {
... ... @@ -93,7 +93,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
93 93  
94 94 // 开始处理抽卡
95 95 openMode := 0
96   - sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID)
  96 + sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid)
97 97 allNewCards := make([]int, 0)
98 98 for _, idCardholder := range req.Ids {
99 99 confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)]
... ... @@ -157,7 +157,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
157 157 }
158 158  
159 159 // 读取游戏数据
160   - gameData := LoadData(req.GameID, req.UID, config.Id)
  160 + gameData := LoadData(req.GameID, req.UID, config)
161 161 // 检查游戏数据 轮次等
162 162 code = CheckGameData(gameData, config)
163 163 if code != constd.RECODE_OK {
... ... @@ -201,7 +201,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
201 201  
202 202 // 开始处理抽卡
203 203 openMode := 1
204   - sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID)
  204 + sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid)
205 205 for i := 0; i < cardholderCount; i++ {
206 206 newCards := DoOpen(req.GameID,
207 207 gameData, config,
... ... @@ -233,3 +233,62 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
233 233  
234 234 return
235 235 }
  236 +
  237 +// HandleAutoExchangeInfo 上期剩余星星自动兑换信息
  238 +func HandleAutoExchangeInfo(req *models.ReqAutoExchangeInfo) (code string, rsp models.RspAutoExchangeInfo) {
  239 + rsp = models.RspAutoExchangeInfo{
  240 + NewCards: make([]int, 0),
  241 + AwardAlbum: make(map[int]string),
  242 + AutoExchangeHolder: make([]int, 0),
  243 + }
  244 + code = constd.RECODE_OK
  245 +
  246 + // 尝试更新配置
  247 + config, hasConfig := TryUpdateConfig(req.GameID)
  248 + if !hasConfig {
  249 + code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
  250 + return
  251 + }
  252 +
  253 + // 检查活动状态
  254 + code = CheckStatus(config)
  255 + if code != constd.RECODE_OK {
  256 + return
  257 + }
  258 +
  259 + // 读取游戏数据
  260 + gameData := LoadData(req.GameID, req.UID, config)
  261 + // 检查游戏数据 轮次等
  262 + code = CheckGameData(gameData, config)
  263 + if code != constd.RECODE_OK {
  264 + return
  265 + }
  266 +
  267 + if gameData.Details.LastStarCount <= 0 {
  268 + code = constd.RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR
  269 + return
  270 + }
  271 +
  272 + rsp.LastStarCount = gameData.Details.LastStarCount
  273 + for _, i2 := range gameData.Details.AutoExchangeHolder {
  274 + rsp.AutoExchangeHolder = append(rsp.AutoExchangeHolder, i2)
  275 + }
  276 + // 把当前的卡包内数据放在新卡数据里给客户端
  277 + for i1, i2 := range gameData.Details.Cards {
  278 + for i := 0; i < i2; i++ {
  279 + rsp.NewCards = append(rsp.NewCards, i1)
  280 + }
  281 + }
  282 +
  283 + gameData.Details.LastStarCount = 0
  284 + gameData.Details.AutoExchangeHolder = make([]int, 0)
  285 + // 存档
  286 + SaveData(req.GameID, gameData)
  287 +
  288 + utslice.Shuffle(rsp.NewCards)
  289 +
  290 + // 返回信息
  291 + rsp.CardHolderInfo = GetInfo(gameData, config)
  292 +
  293 + return
  294 +}
... ...
service/cardholder/logic.go
... ... @@ -9,6 +9,9 @@ import (
9 9 "apigame/util/utjson"
10 10 "apigame/util/utslice"
11 11 "apigame/util/utstring"
  12 + "github.com/samber/lo"
  13 + "sort"
  14 + "strconv"
12 15 )
13 16  
14 17 // SaveData 存储数据
... ... @@ -35,13 +38,23 @@ func _LoadData(gameId string, uid int64) (d *dto.CardHolderData) {
35 38 }
36 39  
37 40 // LoadData 获取数据 外部接口
38   -func LoadData(gameId string, uid int64, configId int64) (d *dto.CardHolderData) {
  41 +func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *dto.CardHolderData) {
  42 + configId := config.Id
39 43 d = _LoadData(gameId, uid)
40 44 // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
41 45 if configId != 0 &&
42 46 configId != d.ActivityId {
  47 +
  48 + // 剩余的星星数
  49 + starCount := d.Details.StarCount
  50 +
43 51 d.ActivityId = configId
44 52 d.Details = dto.NewCardHolderDataDetails()
  53 +
  54 + // 使用剩余的星星数来自动兑换卡包
  55 + d.Details.LastStarCount = starCount
  56 + NextActivityAutoExchange(gameId, d, config)
  57 +
45 58 SaveData(gameId, d)
46 59 }
47 60 return
... ... @@ -388,3 +401,47 @@ func GetStarCardList(gameData *dto.CardHolderData, config *CardActivityConfig, n
388 401  
389 402 return
390 403 }
  404 +
  405 +// NextActivityAutoExchange 活动切换时自动兑换卡包
  406 +func NextActivityAutoExchange(gameId string, gameData *dto.CardHolderData, config *CardActivityConfig) {
  407 + starCount := gameData.Details.LastStarCount
  408 + // 把星星的配置按照需要的星星数降序排列
  409 + list := lo.Values[int, StarShopConfig](config.StarShopConfig)
  410 + sort.Slice(list, func(i, j int) bool {
  411 + return list[i].NeedStarNumber < list[j].NeedStarNumber
  412 + })
  413 + list = lo.Reverse(list)
  414 + // 遍历
  415 + for _, config := range list {
  416 + for starCount >= config.NeedStarNumber {
  417 + gameData.Details.AutoExchangeHolder = append(gameData.Details.AutoExchangeHolder, config.Id)
  418 + starCount -= config.NeedStarNumber
  419 + }
  420 + }
  421 +
  422 + // 开始处理抽卡
  423 + openMode := 2
  424 + sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid)
  425 + allNewCards := make([]int, 0)
  426 + for _, idCardholder := range gameData.Details.AutoExchangeHolder {
  427 + confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)]
  428 + newCards := DoOpen(gameId,
  429 + gameData, config,
  430 + confCardholder,
  431 + sequenceId, cohort,
  432 + openMode)
  433 + // 打乱顺序
  434 + utslice.Shuffle(newCards)
  435 + for _, i3 := range newCards {
  436 + allNewCards = append(allNewCards, i3)
  437 + }
  438 + }
  439 + _, _ = DoOpenCheckAward(gameId,
  440 + gameData, config,
  441 + sequenceId, cohort,
  442 + allNewCards,
  443 + openMode)
  444 +
  445 + // 计算星星点数
  446 + CalculateStarCount(gameData, config)
  447 +}
... ...
service/constd/code-msg.go
... ... @@ -40,13 +40,14 @@ const (
40 40 RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR = "2051"
41 41 RECODE_MERGE_QINGXIANGMTXZ_ERROR = "2052"
42 42  
43   - RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR = "2100"
44   - RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR = "2101"
45   - RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR = "2102"
46   - RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR = "2103"
47   - RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR = "2104"
48   - RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR = "2105"
49   - RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR = "2106"
  43 + RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR = "2100"
  44 + RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR = "2101"
  45 + RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR = "2102"
  46 + RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR = "2103"
  47 + RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR = "2104"
  48 + RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR = "2105"
  49 + RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR = "2106"
  50 + RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR = "2107"
50 51 )
51 52  
52 53 var recodeText = map[string]string{
... ... @@ -87,13 +88,14 @@ var recodeText = map[string]string{
87 88 RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在",
88 89 RECODE_MERGE_QINGXIANGMTXZ_ERROR: "请先购买通行证",
89 90  
90   - RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR: "活动未开放",
91   - RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR: "活动未开始",
92   - RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR: "活动已结束",
93   - RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR: "活动轮次已全部完成",
94   - RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR: "卡包ID错误",
95   - RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR: "商店ID错误",
96   - RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR: "星星商店星星不足",
  91 + RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR: "活动未开放",
  92 + RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR: "活动未开始",
  93 + RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR: "活动已结束",
  94 + RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR: "活动轮次已全部完成",
  95 + RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR: "卡包ID错误",
  96 + RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR: "商店ID错误",
  97 + RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR: "星星商店星星不足",
  98 + RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR: "没有星星商店自动兑换信息",
97 99 }
98 100  
99 101 func RecodeText(code string) string {
... ...