Commit 77286ab9a05871980e5350f1140ba2d18efab129

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

feat:获取卡包

controllers/base.go
@@ -26,9 +26,17 @@ func (c *BaseController) RetRspData(rspData any) { @@ -26,9 +26,17 @@ func (c *BaseController) RetRspData(rspData any) {
26 c.RetData(resp) 26 c.RetData(resp)
27 } 27 }
28 28
  29 +// RetRspCodeData 返回封装
  30 +func (c *BaseController) RetRspCodeData(code string, rspData any) {
  31 + resp := make(map[string]any)
  32 + resp = constd.CodeMsg(resp, code)
  33 + resp["data"] = rspData
  34 + c.RetData(resp)
  35 +}
  36 +
29 // RetCode 返回错误封装 37 // RetCode 返回错误封装
30 func (c *BaseController) RetCode(code string) { 38 func (c *BaseController) RetCode(code string) {
31 - resp := make(map[string]interface{}) 39 + resp := make(map[string]any)
32 resp = constd.CodeMsg(resp, code) 40 resp = constd.CodeMsg(resp, code)
33 c.RetData(resp) 41 c.RetData(resp)
34 } 42 }
controllers/ht-cardholder.go
@@ -11,29 +11,34 @@ type HtCardHolderController struct { @@ -11,29 +11,34 @@ type HtCardHolderController struct {
11 } 11 }
12 12
13 func (c *HtCardHolderController) Info() { 13 func (c *HtCardHolderController) Info() {
14 - // 获取请求  
15 - //req := new(dto.ReqHtCardHolderInfo)  
16 - var req dto.ReqHtCardHolderInfo  
17 - if !c.GetPostData(&req) { 14 + req := new(dto.ReqHtCardHolderInfo)
  15 + if !c.GetPostData(req) {
18 return 16 return
19 } 17 }
20 18
21 - rsp := ht_cardholder.HandleInfo(&req) 19 + code, rsp := ht_cardholder.HandleInfo(req)
22 20
23 - c.RetRspData(rsp) 21 + c.RetRspCodeData(code, rsp)
24 } 22 }
25 23
26 -func (c *HtCardHolderController) Open() {  
27 - // 获取请求  
28 - var req dto.ReqHtCardHolderOpen  
29 - if !c.GetPostData(&req) { 24 +func (c *HtCardHolderController) GetNew() {
  25 + req := new(dto.ReqHtCardHolderGetNew)
  26 + if !c.GetPostData(req) {
30 return 27 return
31 } 28 }
32 29
33 - rsp := dto.NewBaseRsp() 30 + code, rsp := ht_cardholder.HandleGetNew(req)
  31 +
  32 + c.RetRspCodeData(code, rsp)
  33 +}
  34 +
  35 +func (c *HtCardHolderController) Open() {
  36 + req := new(dto.ReqHtCardHolderOpen)
  37 + if !c.GetPostData(req) {
  38 + return
  39 + }
34 40
35 - rsp["nowid"] = 1  
36 - rsp["award"] = "2" 41 + code, rsp := ht_cardholder.HandleOpen(req)
37 42
38 - c.RetRspData(rsp) 43 + c.RetRspCodeData(code, rsp)
39 } 44 }
dto/ht-cardholder.go
@@ -4,7 +4,10 @@ package dto @@ -4,7 +4,10 @@ package dto
4 4
5 // HtCardHolderInfo 卡包信息 5 // HtCardHolderInfo 卡包信息
6 type HtCardHolderInfo struct { 6 type HtCardHolderInfo struct {
7 - BagList map[int]int 7 + Cardholder map[int]int `form:"cardholder" json:"cardholder"` // 卡包数量 k=卡包ID v=卡包数量
  8 + Cards map[int]int `form:"cards" json:"cards"` // 每张卡集了多少张 k=卡牌ID v=数量
  9 + Album map[string]int `form:"album" json:"album"` // 卡组奖励领取 k=卡组ID v=数量
  10 + Round int `form:"round" json:"round"` // 卡册完成轮次
8 } 11 }
9 12
10 // ReqHtCardHolderInfo 请求 卡包信息 13 // ReqHtCardHolderInfo 请求 卡包信息
@@ -18,9 +21,26 @@ type RspHtCardHolderInfo struct { @@ -18,9 +21,26 @@ type RspHtCardHolderInfo struct {
18 HtCardHolderInfo 21 HtCardHolderInfo
19 } 22 }
20 23
  24 +// ReqHtCardHolderGetNew 请求 获取卡包
  25 +type ReqHtCardHolderGetNew struct {
  26 + BaseSign
  27 + BaseLoginInfo
  28 + Id int `form:"id" json:"id" valid:"Required"` // 卡包ID
  29 + Count int `form:"count" json:"count" valid:"Required"` // 卡包数量
  30 +}
  31 +
  32 +// RspHtCardHolderGetNew 返回 获取卡包
  33 +type RspHtCardHolderGetNew struct {
  34 + HtCardHolderInfo
  35 +}
  36 +
21 // ReqHtCardHolderOpen 请求 打开卡包 37 // ReqHtCardHolderOpen 请求 打开卡包
22 type ReqHtCardHolderOpen struct { 38 type ReqHtCardHolderOpen struct {
23 BaseSign 39 BaseSign
24 BaseLoginInfo 40 BaseLoginInfo
25 - ID string `form:"id" json:"id" valid:"Required"` // 卡包ID 41 + Id int `form:"id" json:"id" valid:"Required"` // 卡包ID
  42 +}
  43 +
  44 +// RspHtCardHolderOpen 返回 打开卡包
  45 +type RspHtCardHolderOpen struct {
26 } 46 }
models/ht-cardholder.go
1 package models 1 package models
2 2
3 import ( 3 import (
  4 + "apigame/dto"
4 "apigame/lx-util/lxalilog" 5 "apigame/lx-util/lxalilog"
5 "apigame/service/constd" 6 "apigame/service/constd"
6 "encoding/json" 7 "encoding/json"
@@ -13,13 +14,18 @@ type HtCardHolderData struct { @@ -13,13 +14,18 @@ type HtCardHolderData struct {
13 ActivityId int64 // 活动ID 14 ActivityId int64 // 活动ID
14 DetailsData *HtCardHolderDataDetails `orm:"-"` // 活动详情 15 DetailsData *HtCardHolderDataDetails `orm:"-"` // 活动详情
15 Details string `orm:"type(text)"` // 活动详情封装 16 Details string `orm:"type(text)"` // 活动详情封装
  17 + CreateTime int64 // 创建时间戳
  18 + UpdateTime int64 // 修改时间戳
16 } 19 }
17 20
18 // HtCardHolderDataDetails 卡牌活动详情 21 // HtCardHolderDataDetails 卡牌活动详情
19 type HtCardHolderDataDetails struct { 22 type HtCardHolderDataDetails struct {
  23 + Cardholder map[int]int // 卡包数量 k=卡包ID v=卡包数量
20 Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量 24 Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量
  25 + Album map[string]int // 卡组奖励领取 k=卡组ID v=数量
21 StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度 26 StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度
22 CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度 27 CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度
  28 + Round int // 卡册完成轮次
23 } 29 }
24 30
25 func NewHtCardHolderData(uid int64) *HtCardHolderData { 31 func NewHtCardHolderData(uid int64) *HtCardHolderData {
@@ -31,9 +37,12 @@ func NewHtCardHolderData(uid int64) *HtCardHolderData { @@ -31,9 +37,12 @@ func NewHtCardHolderData(uid int64) *HtCardHolderData {
31 37
32 func NewHtCardHolderDataDetails() *HtCardHolderDataDetails { 38 func NewHtCardHolderDataDetails() *HtCardHolderDataDetails {
33 return &HtCardHolderDataDetails{ 39 return &HtCardHolderDataDetails{
  40 + Cardholder: make(map[int]int),
34 Cards: make(map[int]int), 41 Cards: make(map[int]int),
  42 + Album: make(map[string]int),
35 StarSequenceScales: make(map[string]int), 43 StarSequenceScales: make(map[string]int),
36 CardSequenceScales: make(map[string]int), 44 CardSequenceScales: make(map[string]int),
  45 + Round: 0,
37 } 46 }
38 } 47 }
39 48
@@ -60,6 +69,27 @@ func (d *HtCardHolderData) Decode() { @@ -60,6 +69,27 @@ func (d *HtCardHolderData) Decode() {
60 } 69 }
61 } 70 }
62 71
  72 +// GetInfo 封装成返回数据
  73 +func (d *HtCardHolderData) GetInfo() dto.HtCardHolderInfo {
  74 + info := dto.HtCardHolderInfo{
  75 + Cardholder: make(map[int]int),
  76 + Cards: make(map[int]int),
  77 + Album: make(map[string]int),
  78 + Round: 0,
  79 + }
  80 + for i, i2 := range d.DetailsData.Cardholder {
  81 + info.Cardholder[i] = i2
  82 + }
  83 + for i, i2 := range d.DetailsData.Cards {
  84 + info.Cards[i] = i2
  85 + }
  86 + for i, i2 := range d.DetailsData.Album {
  87 + info.Album[i] = i2
  88 + }
  89 + info.Round = d.DetailsData.Round
  90 + return info
  91 +}
  92 +
63 func InitHtCardholder() { 93 func InitHtCardholder() {
64 94
65 // register model 95 // register model
routers/router.go
@@ -13,6 +13,8 @@ func init() { @@ -13,6 +13,8 @@ func init() {
13 // 海滩项目 13 // 海滩项目
14 // 卡包信息 14 // 卡包信息
15 beego.Router(prefix+"/ht/cardholder/info", &controllers.HtCardHolderController{}, "post:Info") 15 beego.Router(prefix+"/ht/cardholder/info", &controllers.HtCardHolderController{}, "post:Info")
  16 + // 获取卡包
  17 + beego.Router(prefix+"/ht/cardholder/getnew", &controllers.HtCardHolderController{}, "post:GetNew")
16 // 卡包打开 18 // 卡包打开
17 beego.Router(prefix+"/ht/cardholder/open", &controllers.HtCardHolderController{}, "post:Open") 19 beego.Router(prefix+"/ht/cardholder/open", &controllers.HtCardHolderController{}, "post:Open")
18 20
service/constd/index.go
@@ -39,6 +39,11 @@ const ( @@ -39,6 +39,11 @@ const (
39 RECODE_MERGE_CCZDXX_ERROR = "2042" 39 RECODE_MERGE_CCZDXX_ERROR = "2042"
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 +
  43 + RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR = "2101"
  44 + RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR = "2102"
  45 + RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR = "2103"
  46 + RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR = "2104"
42 ) 47 )
43 48
44 var recodeText = map[string]string{ 49 var recodeText = map[string]string{
@@ -78,6 +83,11 @@ var recodeText = map[string]string{ @@ -78,6 +83,11 @@ var recodeText = map[string]string{
78 83
79 RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在", 84 RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在",
80 RECODE_MERGE_QINGXIANGMTXZ_ERROR: "请先购买通行证", 85 RECODE_MERGE_QINGXIANGMTXZ_ERROR: "请先购买通行证",
  86 +
  87 + RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR: "活动未开始",
  88 + RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR: "活动已结束",
  89 + RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR: "卡包ID错误",
  90 + RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR: "数目不合法",
81 } 91 }
82 92
83 func RecodeText(code string) string { 93 func RecodeText(code string) string {
service/ht-cardholder/config-registry.go
@@ -4,7 +4,6 @@ import ( @@ -4,7 +4,6 @@ import (
4 "apigame/lx-util/lxalilog" 4 "apigame/lx-util/lxalilog"
5 "apigame/service/constd" 5 "apigame/service/constd"
6 "encoding/json" 6 "encoding/json"
7 - "github.com/astaxie/beego/logs"  
8 ) 7 )
9 8
10 var ( 9 var (
@@ -103,10 +102,10 @@ func (r *RegistryConfigs) Decode(confRaw CardActivityConfigRaw) { @@ -103,10 +102,10 @@ func (r *RegistryConfigs) Decode(confRaw CardActivityConfigRaw) {
103 } 102 }
104 103
105 r.Config = conf 104 r.Config = conf
106 - logs.Debug(conf.Awards)  
107 - logs.Debug(conf.AlbumConfig)  
108 - logs.Debug(conf.CardConfig)  
109 - logs.Debug(conf.CardholderConfig)  
110 - logs.Debug("🐸", conf.NormalCardStarSequence)  
111 - logs.Debug("🐸", conf.CardSequenceConfig) 105 + //logs.Debug(conf.Awards)
  106 + //logs.Debug(conf.AlbumConfig)
  107 + //logs.Debug(conf.CardConfig)
  108 + //logs.Debug(conf.CardholderConfig)
  109 + //logs.Debug("🐸", conf.NormalCardStarSequence)
  110 + //logs.Debug("🐸", conf.CardSequenceConfig)
112 } 111 }
service/ht-cardholder/configs.go
@@ -49,7 +49,7 @@ func LoadConfigs() { @@ -49,7 +49,7 @@ func LoadConfigs() {
49 return 49 return
50 } 50 }
51 // 更新数据 51 // 更新数据
52 - if Registry.Config.Raw.UpdateTime != configOpen.UpdateTime || Registry.Config.Raw.UpdateTime != configOpen.UpdateTime { 52 + if configOpen.Id != Registry.Config.Raw.Id || configOpen.UpdateTime != Registry.Config.Raw.UpdateTime {
53 logs.Debug("__________________尝试更新活动条目ID:", configOpen.Id) 53 logs.Debug("__________________尝试更新活动条目ID:", configOpen.Id)
54 confNew := CardActivityConfigRaw{} 54 confNew := CardActivityConfigRaw{}
55 sql := fmt.Sprintf("select * from %s where id=%d limit 1", configTableName, configOpen.Id) 55 sql := fmt.Sprintf("select * from %s where id=%d limit 1", configTableName, configOpen.Id)
service/ht-cardholder/handle.go
@@ -3,41 +3,80 @@ package ht_cardholder @@ -3,41 +3,80 @@ package ht_cardholder
3 import ( 3 import (
4 "apigame/dto" 4 "apigame/dto"
5 "apigame/lx-util/lxalilog" 5 "apigame/lx-util/lxalilog"
  6 + "apigame/lx-util/lxtime"
6 "apigame/models" 7 "apigame/models"
7 "apigame/service/constd" 8 "apigame/service/constd"
8 "github.com/astaxie/beego/orm" 9 "github.com/astaxie/beego/orm"
  10 + "strconv"
9 ) 11 )
10 12
11 -func HandleInfo(req *dto.ReqHtCardHolderInfo) dto.RspHtCardHolderInfo { 13 +// HandleInfo 卡包信息
  14 +func HandleInfo(req *dto.ReqHtCardHolderInfo) (code string, rsp dto.RspHtCardHolderInfo) {
  15 + rsp = dto.RspHtCardHolderInfo{}
  16 + code = constd.RECODE_OK
  17 +
  18 + // 尝试更新配置
  19 + TryUpdateConfigs()
  20 +
  21 + // 读取游戏数据
  22 + gameData := LoadData(req.UID)
  23 +
  24 + rsp.HtCardHolderInfo = gameData.GetInfo()
  25 +
  26 + return
  27 +}
  28 +
  29 +// HandleGetNew 获取卡包
  30 +func HandleGetNew(req *dto.ReqHtCardHolderGetNew) (code string, rsp dto.RspHtCardHolderGetNew) {
  31 + rsp = dto.RspHtCardHolderGetNew{}
  32 + code = constd.RECODE_OK
  33 +
12 // 尝试更新配置 34 // 尝试更新配置
13 TryUpdateConfigs() 35 TryUpdateConfigs()
14 36
15 - //// 测试存档  
16 - //userData := models.NewHtCardHolderData(req.UID)  
17 - //userData.ActivityId = Registry.Config.Id  
18 - //userData.DetailsData.Cards[101] = 1  
19 - //userData.DetailsData.Cards[102] = 3  
20 - //SaveData(userData)  
21 - //  
22 - //// 测试读档  
23 - //lData := LoadData(req.UID)  
24 - //logs.Debug(lData) 37 + code = CheckStatus()
  38 + if code != constd.RECODE_OK {
  39 + return
  40 + }
25 41
26 - rsp := dto.RspHtCardHolderInfo{  
27 - HtCardHolderInfo: dto.HtCardHolderInfo{  
28 - BagList: make(map[int]int),  
29 - }, 42 + if _, ok := Registry.Config.CardholderConfig[strconv.Itoa(req.Id)]; !ok {
  43 + code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR
  44 + return
30 } 45 }
31 46
32 - rsp.BagList[1] = 2  
33 - rsp.BagList[2] = 5 47 + if req.Count < 1 {
  48 + code = constd.RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR
  49 + return
  50 + }
  51 +
  52 + // 读取游戏数据
  53 + gameData := LoadData(req.UID)
  54 + gameData.DetailsData.Cardholder[req.Id] += req.Count
  55 + SaveData(gameData)
  56 +
  57 + rsp.HtCardHolderInfo = gameData.GetInfo()
34 58
35 - return rsp 59 + return
36 } 60 }
37 61
  62 +// HandleOpen 打开卡包
  63 +func HandleOpen(req *dto.ReqHtCardHolderOpen) (code string, rsp dto.RspHtCardHolderOpen) {
  64 + rsp = dto.RspHtCardHolderOpen{}
  65 + code = constd.RECODE_OK
  66 +
  67 + // 尝试更新配置
  68 + TryUpdateConfigs()
  69 +
  70 + // 读取游戏数据
  71 + //gameData := LoadData(req.UID)
  72 +
  73 + return
  74 +}
  75 +
  76 +// SaveData 存储数据
38 func SaveData(d *models.HtCardHolderData) { 77 func SaveData(d *models.HtCardHolderData) {
  78 + d.UpdateTime = lxtime.NowUninx()
39 d.Encode() 79 d.Encode()
40 -  
41 o := orm.NewOrm() 80 o := orm.NewOrm()
42 o.Using(constd.MYSQL_DEFAULT) 81 o.Using(constd.MYSQL_DEFAULT)
43 if _, err := o.InsertOrUpdate(d); err != nil { 82 if _, err := o.InsertOrUpdate(d); err != nil {
@@ -45,14 +84,51 @@ func SaveData(d *models.HtCardHolderData) { @@ -45,14 +84,51 @@ func SaveData(d *models.HtCardHolderData) {
45 } 84 }
46 } 85 }
47 86
48 -func LoadData(uid int64) (d *models.HtCardHolderData) { 87 +func _LoadData(uid int64) (d *models.HtCardHolderData) {
49 d = models.NewHtCardHolderData(uid) 88 d = models.NewHtCardHolderData(uid)
50 o := orm.NewOrm() 89 o := orm.NewOrm()
51 o.Using(constd.MYSQL_DEFAULT) 90 o.Using(constd.MYSQL_DEFAULT)
52 - if err := o.QueryTable(d).One(d); err != nil {  
53 - lxalilog.Errors(err, "ht_cardholder LoadData Error", d.Uid) 91 + qs := o.QueryTable(d)
  92 + qs = qs.Filter("uid", uid)
  93 + count, err := qs.Count()
  94 + if count == 0 {
  95 + d.CreateTime = lxtime.NowUninx()
  96 + } else {
  97 + err = qs.One(d)
  98 + if err != nil {
  99 + lxalilog.Errors(err, "ht_cardholder LoadData Error", uid)
  100 + } else {
  101 + d.DetailsData = models.NewHtCardHolderDataDetails()
  102 + d.Decode()
  103 + }
54 } 104 }
55 - d.DetailsData = models.NewHtCardHolderDataDetails()  
56 - d.Decode()  
57 return 105 return
58 } 106 }
  107 +
  108 +// LoadData 获取数据 外部接口
  109 +func LoadData(uid int64) (d *models.HtCardHolderData) {
  110 + d = _LoadData(uid)
  111 + // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
  112 + if Registry.Config.Id != 0 &&
  113 + Registry.Config.Id != d.ActivityId {
  114 + d.ActivityId = Registry.Config.Id
  115 + d.DetailsData = models.NewHtCardHolderDataDetails()
  116 + SaveData(d)
  117 + }
  118 + return
  119 +}
  120 +
  121 +// CheckStatus 判断活动是否开启
  122 +func CheckStatus() string {
  123 + sec := lxtime.NowUninx()
  124 + if Registry.Config.Id == 0 {
  125 + return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
  126 + }
  127 + if sec < Registry.Config.Raw.StartTime {
  128 + return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
  129 + }
  130 + if sec > Registry.Config.Raw.EndTime {
  131 + return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR
  132 + }
  133 + return constd.RECODE_OK
  134 +}