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 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 37 // RetCode 返回错误封装
30 38 func (c *BaseController) RetCode(code string) {
31   - resp := make(map[string]interface{})
  39 + resp := make(map[string]any)
32 40 resp = constd.CodeMsg(resp, code)
33 41 c.RetData(resp)
34 42 }
... ...
controllers/ht-cardholder.go
... ... @@ -11,29 +11,34 @@ type HtCardHolderController struct {
11 11 }
12 12  
13 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 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 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 4  
5 5 // HtCardHolderInfo 卡包信息
6 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 13 // ReqHtCardHolderInfo 请求 卡包信息
... ... @@ -18,9 +21,26 @@ type RspHtCardHolderInfo struct {
18 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 37 // ReqHtCardHolderOpen 请求 打开卡包
22 38 type ReqHtCardHolderOpen struct {
23 39 BaseSign
24 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 1 package models
2 2  
3 3 import (
  4 + "apigame/dto"
4 5 "apigame/lx-util/lxalilog"
5 6 "apigame/service/constd"
6 7 "encoding/json"
... ... @@ -13,13 +14,18 @@ type HtCardHolderData struct {
13 14 ActivityId int64 // 活动ID
14 15 DetailsData *HtCardHolderDataDetails `orm:"-"` // 活动详情
15 16 Details string `orm:"type(text)"` // 活动详情封装
  17 + CreateTime int64 // 创建时间戳
  18 + UpdateTime int64 // 修改时间戳
16 19 }
17 20  
18 21 // HtCardHolderDataDetails 卡牌活动详情
19 22 type HtCardHolderDataDetails struct {
  23 + Cardholder map[int]int // 卡包数量 k=卡包ID v=卡包数量
20 24 Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量
  25 + Album map[string]int // 卡组奖励领取 k=卡组ID v=数量
21 26 StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度
22 27 CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度
  28 + Round int // 卡册完成轮次
23 29 }
24 30  
25 31 func NewHtCardHolderData(uid int64) *HtCardHolderData {
... ... @@ -31,9 +37,12 @@ func NewHtCardHolderData(uid int64) *HtCardHolderData {
31 37  
32 38 func NewHtCardHolderDataDetails() *HtCardHolderDataDetails {
33 39 return &HtCardHolderDataDetails{
  40 + Cardholder: make(map[int]int),
34 41 Cards: make(map[int]int),
  42 + Album: make(map[string]int),
35 43 StarSequenceScales: make(map[string]int),
36 44 CardSequenceScales: make(map[string]int),
  45 + Round: 0,
37 46 }
38 47 }
39 48  
... ... @@ -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 93 func InitHtCardholder() {
64 94  
65 95 // register model
... ...
routers/router.go
... ... @@ -13,6 +13,8 @@ func init() {
13 13 // 海滩项目
14 14 // 卡包信息
15 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 19 beego.Router(prefix+"/ht/cardholder/open", &controllers.HtCardHolderController{}, "post:Open")
18 20  
... ...
service/constd/index.go
... ... @@ -39,6 +39,11 @@ const (
39 39 RECODE_MERGE_CCZDXX_ERROR = "2042"
40 40 RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR = "2051"
41 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 49 var recodeText = map[string]string{
... ... @@ -78,6 +83,11 @@ var recodeText = map[string]string{
78 83  
79 84 RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在",
80 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 93 func RecodeText(code string) string {
... ...
service/ht-cardholder/config-registry.go
... ... @@ -4,7 +4,6 @@ import (
4 4 "apigame/lx-util/lxalilog"
5 5 "apigame/service/constd"
6 6 "encoding/json"
7   - "github.com/astaxie/beego/logs"
8 7 )
9 8  
10 9 var (
... ... @@ -103,10 +102,10 @@ func (r *RegistryConfigs) Decode(confRaw CardActivityConfigRaw) {
103 102 }
104 103  
105 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 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 53 logs.Debug("__________________尝试更新活动条目ID:", configOpen.Id)
54 54 confNew := CardActivityConfigRaw{}
55 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 3 import (
4 4 "apigame/dto"
5 5 "apigame/lx-util/lxalilog"
  6 + "apigame/lx-util/lxtime"
6 7 "apigame/models"
7 8 "apigame/service/constd"
8 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 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 77 func SaveData(d *models.HtCardHolderData) {
  78 + d.UpdateTime = lxtime.NowUninx()
39 79 d.Encode()
40   -
41 80 o := orm.NewOrm()
42 81 o.Using(constd.MYSQL_DEFAULT)
43 82 if _, err := o.InsertOrUpdate(d); err != nil {
... ... @@ -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 88 d = models.NewHtCardHolderData(uid)
50 89 o := orm.NewOrm()
51 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 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 +}
... ...