Commit f3ea92d171cca98398e5b83447f9cd1a895383a4

Authored by 王家文
2 parents 533598d0 e7e42a26
Exists in master and in 1 other branch dev-wjw

Merge branch 'master' into dev-wjw

# Conflicts:
#	go.mod
#	service/cardholder/logic.go
configs/api.go
@@ -27,8 +27,9 @@ func (c *ApiGameConfig) GetRule(gameId string) *svconfig.ConfigRule { @@ -27,8 +27,9 @@ func (c *ApiGameConfig) GetRule(gameId string) *svconfig.ConfigRule {
27 } 27 }
28 28
29 func (c *ApiGameConfig) ReadFromMysql(gameId string) *ApiGameConfig { 29 func (c *ApiGameConfig) ReadFromMysql(gameId string) *ApiGameConfig {
30 - rule := c.GetRule(gameId) 30 + //rule := c.GetRule(gameId)
31 31
  32 + return &ApiGameConfig{}
32 } 33 }
33 34
34 func GetApiGameConfig(gameId string) (config *ApiGameConfig, err error) { 35 func GetApiGameConfig(gameId string) (config *ApiGameConfig, err error) {
controllers/cardholder.go
@@ -57,3 +57,15 @@ func (c *CardHolderController) ShopExchange() { @@ -57,3 +57,15 @@ func (c *CardHolderController) ShopExchange() {
57 57
58 c.RetRspCodeData(code, rsp) 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,6 +26,8 @@ type CardHolderDataDetails struct {
26 CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度 26 CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度
27 Round int // 卡册当前轮次 27 Round int // 卡册当前轮次
28 StarCount int // 星星点数 28 StarCount int // 星星点数
  29 + LastStarCount int // 上期活动剩余星星点数
  30 + AutoExchangeHolder []int // 活动切换时自动兑换的卡包列表
29 } 31 }
30 32
31 func NewCardHolderData(uid int64) *CardHolderData { 33 func NewCardHolderData(uid int64) *CardHolderData {
@@ -44,6 +46,8 @@ func NewCardHolderDataDetails() *CardHolderDataDetails { @@ -44,6 +46,8 @@ func NewCardHolderDataDetails() *CardHolderDataDetails {
44 StarSequenceScales: make(map[string]int), 46 StarSequenceScales: make(map[string]int),
45 CardSequenceScales: make(map[string]int), 47 CardSequenceScales: make(map[string]int),
46 Round: 1, 48 Round: 1,
  49 + StarCount: 0,
  50 + AutoExchangeHolder: make([]int, 0),
47 } 51 }
48 } 52 }
49 53
@@ -11,6 +11,7 @@ require ( @@ -11,6 +11,7 @@ require (
11 github.com/gomodule/redigo v2.0.0+incompatible 11 github.com/gomodule/redigo v2.0.0+incompatible
12 github.com/lixu-any/go-tools v0.0.0-20221128094643-07d54c69e9bf 12 github.com/lixu-any/go-tools v0.0.0-20221128094643-07d54c69e9bf
13 github.com/mitchellh/mapstructure v1.1.2 13 github.com/mitchellh/mapstructure v1.1.2
  14 + github.com/samber/lo v1.39.0
14 gorm.io/driver/mysql v1.5.6 15 gorm.io/driver/mysql v1.5.6
15 gorm.io/gorm v1.25.9 16 gorm.io/gorm v1.25.9
16 ) 17 )
@@ -36,11 +37,12 @@ require ( @@ -36,11 +37,12 @@ require (
36 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect 37 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
37 go.uber.org/atomic v1.5.0 // indirect 38 go.uber.org/atomic v1.5.0 // indirect
38 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect 39 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect
  40 + golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect
39 golang.org/x/lint v0.0.0-20190930215403-16217165b5de // indirect 41 golang.org/x/lint v0.0.0-20190930215403-16217165b5de // indirect
40 - golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect  
41 - golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f // indirect  
42 - golang.org/x/text v0.3.3 // indirect  
43 - golang.org/x/tools v0.0.0-20210106214847-113979e3529a // indirect 42 + golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect
  43 + golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect
  44 + golang.org/x/text v0.3.7 // indirect
  45 + golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 // indirect
44 google.golang.org/protobuf v1.25.0 // indirect 46 google.golang.org/protobuf v1.25.0 // indirect
45 gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect 47 gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
46 gopkg.in/yaml.v2 v2.2.8 // indirect 48 gopkg.in/yaml.v2 v2.2.8 // indirect
@@ -335,6 +335,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So @@ -335,6 +335,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So
335 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= 335 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
336 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 336 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
337 github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= 337 github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
  338 +github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA=
  339 +github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
338 github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= 340 github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
339 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= 341 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
340 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo= 342 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo=
@@ -402,6 +404,8 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh @@ -402,6 +404,8 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh
402 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= 404 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
403 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 405 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
404 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 406 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
  407 +golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 h1:3MTrJm4PyNL9NBqvYDSj3DHl46qQakyfqfWo4jgfaEM=
  408 +golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
405 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 409 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
406 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= 410 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
407 golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 411 golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -430,8 +434,9 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL @@ -430,8 +434,9 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
430 golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 434 golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
431 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 435 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
432 golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 436 golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
433 -golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=  
434 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 437 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
  438 +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY=
  439 +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
435 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 440 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
436 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 441 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
437 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 442 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -462,12 +467,14 @@ golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7w @@ -462,12 +467,14 @@ golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7w
462 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 467 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
463 golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 468 golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
464 golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 469 golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
465 -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=  
466 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 470 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
  471 +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0=
  472 +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
467 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 473 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
468 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 474 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
469 -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=  
470 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 475 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
  476 +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
  477 +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
471 golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 478 golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
472 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 479 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
473 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 480 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -486,8 +493,9 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn @@ -486,8 +493,9 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
486 golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 493 golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
487 golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 494 golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
488 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 495 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
489 -golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ=  
490 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 496 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
  497 +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023 h1:0c3L82FDQ5rt1bjTBlchS8t6RQ6299/+5bWMnRLh+uI=
  498 +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
491 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 499 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
492 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 500 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
493 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 501 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,3 +66,19 @@ type RspStarShopExchange struct {
66 AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励 66 AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励
67 AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发 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,8 +17,10 @@ func init() {
17 beego.Router(prefix+"/cardholder/info", &controllers.CardHolderController{}, "post:Info") 17 beego.Router(prefix+"/cardholder/info", &controllers.CardHolderController{}, "post:Info")
18 // 卡包打开 18 // 卡包打开
19 beego.Router(prefix+"/cardholder/open", &controllers.CardHolderController{}, "post:Open") 19 beego.Router(prefix+"/cardholder/open", &controllers.CardHolderController{}, "post:Open")
20 - // 卡包打开 20 + // 星星商店兑换
21 beego.Router(prefix+"/cardholder/shopexchange", &controllers.CardHolderController{}, "post:ShopExchange") 21 beego.Router(prefix+"/cardholder/shopexchange", &controllers.CardHolderController{}, "post:ShopExchange")
  22 + // 上期剩余星星自动兑换信息
  23 + beego.Router(prefix+"/cardholder/autoexchangeinfo", &controllers.CardHolderController{}, "post:AutoExchangeInfo")
22 24
23 beego.ErrorController(&controllers.ErrorController{}) 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,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 rsp.CardHolderInfo = GetInfo(gameData, config) 52 rsp.CardHolderInfo = GetInfo(gameData, config)
53 53
@@ -84,7 +84,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -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 code = CheckGameData(gameData, config) 89 code = CheckGameData(gameData, config)
90 if code != constd.RECODE_OK { 90 if code != constd.RECODE_OK {
@@ -93,7 +93,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -93,7 +93,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
93 93
94 // 开始处理抽卡 94 // 开始处理抽卡
95 openMode := 0 95 openMode := 0
96 - sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID) 96 + sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid)
97 allNewCards := make([]int, 0) 97 allNewCards := make([]int, 0)
98 for _, idCardholder := range req.Ids { 98 for _, idCardholder := range req.Ids {
99 confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)] 99 confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)]
@@ -157,7 +157,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model @@ -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 code = CheckGameData(gameData, config) 162 code = CheckGameData(gameData, config)
163 if code != constd.RECODE_OK { 163 if code != constd.RECODE_OK {
@@ -201,7 +201,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model @@ -201,7 +201,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
201 201
202 // 开始处理抽卡 202 // 开始处理抽卡
203 openMode := 1 203 openMode := 1
204 - sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID) 204 + sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid)
205 for i := 0; i < cardholderCount; i++ { 205 for i := 0; i < cardholderCount; i++ {
206 newCards := DoOpen(req.GameID, 206 newCards := DoOpen(req.GameID,
207 gameData, config, 207 gameData, config,
@@ -233,3 +233,62 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model @@ -233,3 +233,62 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
233 233
234 return 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
@@ -8,9 +8,12 @@ import ( @@ -8,9 +8,12 @@ import (
8 "apigame/service/constd" 8 "apigame/service/constd"
9 "apigame/util/util-lx/lxalilog" 9 "apigame/util/util-lx/lxalilog"
10 "apigame/util/util-lx/lxtime" 10 "apigame/util/util-lx/lxtime"
  11 + "apigame/util/utjson"
11 "apigame/util/utslice" 12 "apigame/util/utslice"
12 "apigame/util/utstring" 13 "apigame/util/utstring"
13 - "apigame/util/zjson" 14 + "github.com/samber/lo"
  15 + "sort"
  16 + "strconv"
14 ) 17 )
15 18
16 // SaveData 存储数据 19 // SaveData 存储数据
@@ -37,13 +40,23 @@ func _LoadData(gameId string, uid int64) (d *dto.CardHolderData) { @@ -37,13 +40,23 @@ func _LoadData(gameId string, uid int64) (d *dto.CardHolderData) {
37 } 40 }
38 41
39 // LoadData 获取数据 外部接口 42 // LoadData 获取数据 外部接口
40 -func LoadData(gameId string, uid int64, configId int64) (d *dto.CardHolderData) { 43 +func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *dto.CardHolderData) {
  44 + configId := config.Id
41 d = _LoadData(gameId, uid) 45 d = _LoadData(gameId, uid)
42 // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新 46 // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
43 if configId != 0 && 47 if configId != 0 &&
44 configId != d.ActivityId { 48 configId != d.ActivityId {
  49 +
  50 + // 剩余的星星数
  51 + starCount := d.Details.StarCount
  52 +
45 d.ActivityId = configId 53 d.ActivityId = configId
46 d.Details = dto.NewCardHolderDataDetails() 54 d.Details = dto.NewCardHolderDataDetails()
  55 +
  56 + // 使用剩余的星星数来自动兑换卡包
  57 + d.Details.LastStarCount = starCount
  58 + NextActivityAutoExchange(gameId, d, config)
  59 +
47 SaveData(gameId, d) 60 SaveData(gameId, d)
48 } 61 }
49 return 62 return
@@ -231,7 +244,7 @@ func DoOpen(gameId string, @@ -231,7 +244,7 @@ func DoOpen(gameId string,
231 { 244 {
232 recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) 245 recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)
233 svdto.SaveRecord(gameId, dto.NewCardHolderRecordOpen(recordBase, 246 svdto.SaveRecord(gameId, dto.NewCardHolderRecordOpen(recordBase,
234 - openMode, utstring.StringToInt(confCardholder.Id), zjson.Str(newCards))) 247 + openMode, utstring.StringToInt(confCardholder.Id), utjson.JsonString(newCards)))
235 } 248 }
236 249
237 return 250 return
@@ -390,3 +403,47 @@ func GetStarCardList(gameData *dto.CardHolderData, config *CardActivityConfig, n @@ -390,3 +403,47 @@ func GetStarCardList(gameData *dto.CardHolderData, config *CardActivityConfig, n
390 403
391 return 404 return
392 } 405 }
  406 +
  407 +// NextActivityAutoExchange 活动切换时自动兑换卡包
  408 +func NextActivityAutoExchange(gameId string, gameData *dto.CardHolderData, config *CardActivityConfig) {
  409 + starCount := gameData.Details.LastStarCount
  410 + // 把星星的配置按照需要的星星数降序排列
  411 + list := lo.Values[int, StarShopConfig](config.StarShopConfig)
  412 + sort.Slice(list, func(i, j int) bool {
  413 + return list[i].NeedStarNumber < list[j].NeedStarNumber
  414 + })
  415 + list = lo.Reverse(list)
  416 + // 遍历
  417 + for _, config := range list {
  418 + for starCount >= config.NeedStarNumber {
  419 + gameData.Details.AutoExchangeHolder = append(gameData.Details.AutoExchangeHolder, config.Id)
  420 + starCount -= config.NeedStarNumber
  421 + }
  422 + }
  423 +
  424 + // 开始处理抽卡
  425 + openMode := 2
  426 + sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid)
  427 + allNewCards := make([]int, 0)
  428 + for _, idCardholder := range gameData.Details.AutoExchangeHolder {
  429 + confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)]
  430 + newCards := DoOpen(gameId,
  431 + gameData, config,
  432 + confCardholder,
  433 + sequenceId, cohort,
  434 + openMode)
  435 + // 打乱顺序
  436 + utslice.Shuffle(newCards)
  437 + for _, i3 := range newCards {
  438 + allNewCards = append(allNewCards, i3)
  439 + }
  440 + }
  441 + _, _ = DoOpenCheckAward(gameId,
  442 + gameData, config,
  443 + sequenceId, cohort,
  444 + allNewCards,
  445 + openMode)
  446 +
  447 + // 计算星星点数
  448 + CalculateStarCount(gameData, config)
  449 +}
service/constd/code-msg.go
@@ -40,13 +40,14 @@ const ( @@ -40,13 +40,14 @@ const (
40 RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR = "2051" 40 RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR = "2051"
41 RECODE_MERGE_QINGXIANGMTXZ_ERROR = "2052" 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 var recodeText = map[string]string{ 53 var recodeText = map[string]string{
@@ -87,13 +88,14 @@ var recodeText = map[string]string{ @@ -87,13 +88,14 @@ var recodeText = map[string]string{
87 RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在", 88 RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在",
88 RECODE_MERGE_QINGXIANGMTXZ_ERROR: "请先购买通行证", 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 func RecodeText(code string) string { 101 func RecodeText(code string) string {