diff --git a/controllers/base.go b/controllers/base.go index b54caa5..3fa8f9c 100644 --- a/controllers/base.go +++ b/controllers/base.go @@ -26,9 +26,17 @@ func (c *BaseController) RetRspData(rspData any) { c.RetData(resp) } +// RetRspCodeData 返回封装 +func (c *BaseController) RetRspCodeData(code string, rspData any) { + resp := make(map[string]any) + resp = constd.CodeMsg(resp, code) + resp["data"] = rspData + c.RetData(resp) +} + // RetCode 返回错误封装 func (c *BaseController) RetCode(code string) { - resp := make(map[string]interface{}) + resp := make(map[string]any) resp = constd.CodeMsg(resp, code) c.RetData(resp) } diff --git a/controllers/ht-cardholder.go b/controllers/ht-cardholder.go index b4c97ac..ffa57d6 100644 --- a/controllers/ht-cardholder.go +++ b/controllers/ht-cardholder.go @@ -11,29 +11,34 @@ type HtCardHolderController struct { } func (c *HtCardHolderController) Info() { - // 获取请求 - //req := new(dto.ReqHtCardHolderInfo) - var req dto.ReqHtCardHolderInfo - if !c.GetPostData(&req) { + req := new(dto.ReqHtCardHolderInfo) + if !c.GetPostData(req) { return } - rsp := ht_cardholder.HandleInfo(&req) + code, rsp := ht_cardholder.HandleInfo(req) - c.RetRspData(rsp) + c.RetRspCodeData(code, rsp) } -func (c *HtCardHolderController) Open() { - // 获取请求 - var req dto.ReqHtCardHolderOpen - if !c.GetPostData(&req) { +func (c *HtCardHolderController) GetNew() { + req := new(dto.ReqHtCardHolderGetNew) + if !c.GetPostData(req) { return } - rsp := dto.NewBaseRsp() + code, rsp := ht_cardholder.HandleGetNew(req) + + c.RetRspCodeData(code, rsp) +} + +func (c *HtCardHolderController) Open() { + req := new(dto.ReqHtCardHolderOpen) + if !c.GetPostData(req) { + return + } - rsp["nowid"] = 1 - rsp["award"] = "2" + code, rsp := ht_cardholder.HandleOpen(req) - c.RetRspData(rsp) + c.RetRspCodeData(code, rsp) } diff --git a/dto/ht-cardholder.go b/dto/ht-cardholder.go index 2c6a8db..d331d54 100644 --- a/dto/ht-cardholder.go +++ b/dto/ht-cardholder.go @@ -4,7 +4,10 @@ package dto // HtCardHolderInfo 卡包信息 type HtCardHolderInfo struct { - BagList map[int]int + Cardholder map[int]int `form:"cardholder" json:"cardholder"` // 卡包数量 k=卡包ID v=卡包数量 + Cards map[int]int `form:"cards" json:"cards"` // 每张卡集了多少张 k=卡牌ID v=数量 + Album map[string]int `form:"album" json:"album"` // 卡组奖励领取 k=卡组ID v=数量 + Round int `form:"round" json:"round"` // 卡册完成轮次 } // ReqHtCardHolderInfo 请求 卡包信息 @@ -18,9 +21,26 @@ type RspHtCardHolderInfo struct { HtCardHolderInfo } +// ReqHtCardHolderGetNew 请求 获取卡包 +type ReqHtCardHolderGetNew struct { + BaseSign + BaseLoginInfo + Id int `form:"id" json:"id" valid:"Required"` // 卡包ID + Count int `form:"count" json:"count" valid:"Required"` // 卡包数量 +} + +// RspHtCardHolderGetNew 返回 获取卡包 +type RspHtCardHolderGetNew struct { + HtCardHolderInfo +} + // ReqHtCardHolderOpen 请求 打开卡包 type ReqHtCardHolderOpen struct { BaseSign BaseLoginInfo - ID string `form:"id" json:"id" valid:"Required"` // 卡包ID + Id int `form:"id" json:"id" valid:"Required"` // 卡包ID +} + +// RspHtCardHolderOpen 返回 打开卡包 +type RspHtCardHolderOpen struct { } diff --git a/models/ht-cardholder.go b/models/ht-cardholder.go index 24c5723..ea6ecc5 100644 --- a/models/ht-cardholder.go +++ b/models/ht-cardholder.go @@ -1,6 +1,7 @@ package models import ( + "apigame/dto" "apigame/lx-util/lxalilog" "apigame/service/constd" "encoding/json" @@ -13,13 +14,18 @@ type HtCardHolderData struct { ActivityId int64 // 活动ID DetailsData *HtCardHolderDataDetails `orm:"-"` // 活动详情 Details string `orm:"type(text)"` // 活动详情封装 + CreateTime int64 // 创建时间戳 + UpdateTime int64 // 修改时间戳 } // HtCardHolderDataDetails 卡牌活动详情 type HtCardHolderDataDetails struct { + Cardholder map[int]int // 卡包数量 k=卡包ID v=卡包数量 Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量 + Album map[string]int // 卡组奖励领取 k=卡组ID v=数量 StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度 CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度 + Round int // 卡册完成轮次 } func NewHtCardHolderData(uid int64) *HtCardHolderData { @@ -31,9 +37,12 @@ func NewHtCardHolderData(uid int64) *HtCardHolderData { func NewHtCardHolderDataDetails() *HtCardHolderDataDetails { return &HtCardHolderDataDetails{ + Cardholder: make(map[int]int), Cards: make(map[int]int), + Album: make(map[string]int), StarSequenceScales: make(map[string]int), CardSequenceScales: make(map[string]int), + Round: 0, } } @@ -60,6 +69,27 @@ func (d *HtCardHolderData) Decode() { } } +// GetInfo 封装成返回数据 +func (d *HtCardHolderData) GetInfo() dto.HtCardHolderInfo { + info := dto.HtCardHolderInfo{ + Cardholder: make(map[int]int), + Cards: make(map[int]int), + Album: make(map[string]int), + Round: 0, + } + for i, i2 := range d.DetailsData.Cardholder { + info.Cardholder[i] = i2 + } + for i, i2 := range d.DetailsData.Cards { + info.Cards[i] = i2 + } + for i, i2 := range d.DetailsData.Album { + info.Album[i] = i2 + } + info.Round = d.DetailsData.Round + return info +} + func InitHtCardholder() { // register model diff --git a/routers/router.go b/routers/router.go index df5afe9..9c66f8b 100644 --- a/routers/router.go +++ b/routers/router.go @@ -13,6 +13,8 @@ func init() { // 海滩项目 // 卡包信息 beego.Router(prefix+"/ht/cardholder/info", &controllers.HtCardHolderController{}, "post:Info") + // 获取卡包 + beego.Router(prefix+"/ht/cardholder/getnew", &controllers.HtCardHolderController{}, "post:GetNew") // 卡包打开 beego.Router(prefix+"/ht/cardholder/open", &controllers.HtCardHolderController{}, "post:Open") diff --git a/service/constd/index.go b/service/constd/index.go index f89d29f..0ff28dc 100644 --- a/service/constd/index.go +++ b/service/constd/index.go @@ -39,6 +39,11 @@ const ( RECODE_MERGE_CCZDXX_ERROR = "2042" RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR = "2051" RECODE_MERGE_QINGXIANGMTXZ_ERROR = "2052" + + RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR = "2101" + RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR = "2102" + RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR = "2103" + RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR = "2104" ) var recodeText = map[string]string{ @@ -78,6 +83,11 @@ var recodeText = map[string]string{ RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在", RECODE_MERGE_QINGXIANGMTXZ_ERROR: "请先购买通行证", + + RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR: "活动未开始", + RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR: "活动已结束", + RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR: "卡包ID错误", + RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR: "数目不合法", } func RecodeText(code string) string { diff --git a/service/ht-cardholder/config-registry.go b/service/ht-cardholder/config-registry.go index 4e11949..d350743 100644 --- a/service/ht-cardholder/config-registry.go +++ b/service/ht-cardholder/config-registry.go @@ -4,7 +4,6 @@ import ( "apigame/lx-util/lxalilog" "apigame/service/constd" "encoding/json" - "github.com/astaxie/beego/logs" ) var ( @@ -103,10 +102,10 @@ func (r *RegistryConfigs) Decode(confRaw CardActivityConfigRaw) { } r.Config = conf - logs.Debug(conf.Awards) - logs.Debug(conf.AlbumConfig) - logs.Debug(conf.CardConfig) - logs.Debug(conf.CardholderConfig) - logs.Debug("🐸", conf.NormalCardStarSequence) - logs.Debug("🐸", conf.CardSequenceConfig) + //logs.Debug(conf.Awards) + //logs.Debug(conf.AlbumConfig) + //logs.Debug(conf.CardConfig) + //logs.Debug(conf.CardholderConfig) + //logs.Debug("🐸", conf.NormalCardStarSequence) + //logs.Debug("🐸", conf.CardSequenceConfig) } diff --git a/service/ht-cardholder/configs.go b/service/ht-cardholder/configs.go index 3f85694..5027dfc 100644 --- a/service/ht-cardholder/configs.go +++ b/service/ht-cardholder/configs.go @@ -49,7 +49,7 @@ func LoadConfigs() { return } // 更新数据 - if Registry.Config.Raw.UpdateTime != configOpen.UpdateTime || Registry.Config.Raw.UpdateTime != configOpen.UpdateTime { + if configOpen.Id != Registry.Config.Raw.Id || configOpen.UpdateTime != Registry.Config.Raw.UpdateTime { logs.Debug("__________________尝试更新活动条目ID:", configOpen.Id) confNew := CardActivityConfigRaw{} sql := fmt.Sprintf("select * from %s where id=%d limit 1", configTableName, configOpen.Id) diff --git a/service/ht-cardholder/handle.go b/service/ht-cardholder/handle.go index 47cd680..ee9d491 100644 --- a/service/ht-cardholder/handle.go +++ b/service/ht-cardholder/handle.go @@ -3,41 +3,80 @@ package ht_cardholder import ( "apigame/dto" "apigame/lx-util/lxalilog" + "apigame/lx-util/lxtime" "apigame/models" "apigame/service/constd" "github.com/astaxie/beego/orm" + "strconv" ) -func HandleInfo(req *dto.ReqHtCardHolderInfo) dto.RspHtCardHolderInfo { +// HandleInfo 卡包信息 +func HandleInfo(req *dto.ReqHtCardHolderInfo) (code string, rsp dto.RspHtCardHolderInfo) { + rsp = dto.RspHtCardHolderInfo{} + code = constd.RECODE_OK + + // 尝试更新配置 + TryUpdateConfigs() + + // 读取游戏数据 + gameData := LoadData(req.UID) + + rsp.HtCardHolderInfo = gameData.GetInfo() + + return +} + +// HandleGetNew 获取卡包 +func HandleGetNew(req *dto.ReqHtCardHolderGetNew) (code string, rsp dto.RspHtCardHolderGetNew) { + rsp = dto.RspHtCardHolderGetNew{} + code = constd.RECODE_OK + // 尝试更新配置 TryUpdateConfigs() - //// 测试存档 - //userData := models.NewHtCardHolderData(req.UID) - //userData.ActivityId = Registry.Config.Id - //userData.DetailsData.Cards[101] = 1 - //userData.DetailsData.Cards[102] = 3 - //SaveData(userData) - // - //// 测试读档 - //lData := LoadData(req.UID) - //logs.Debug(lData) + code = CheckStatus() + if code != constd.RECODE_OK { + return + } - rsp := dto.RspHtCardHolderInfo{ - HtCardHolderInfo: dto.HtCardHolderInfo{ - BagList: make(map[int]int), - }, + if _, ok := Registry.Config.CardholderConfig[strconv.Itoa(req.Id)]; !ok { + code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR + return } - rsp.BagList[1] = 2 - rsp.BagList[2] = 5 + if req.Count < 1 { + code = constd.RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR + return + } + + // 读取游戏数据 + gameData := LoadData(req.UID) + gameData.DetailsData.Cardholder[req.Id] += req.Count + SaveData(gameData) + + rsp.HtCardHolderInfo = gameData.GetInfo() - return rsp + return } +// HandleOpen 打开卡包 +func HandleOpen(req *dto.ReqHtCardHolderOpen) (code string, rsp dto.RspHtCardHolderOpen) { + rsp = dto.RspHtCardHolderOpen{} + code = constd.RECODE_OK + + // 尝试更新配置 + TryUpdateConfigs() + + // 读取游戏数据 + //gameData := LoadData(req.UID) + + return +} + +// SaveData 存储数据 func SaveData(d *models.HtCardHolderData) { + d.UpdateTime = lxtime.NowUninx() d.Encode() - o := orm.NewOrm() o.Using(constd.MYSQL_DEFAULT) if _, err := o.InsertOrUpdate(d); err != nil { @@ -45,14 +84,51 @@ func SaveData(d *models.HtCardHolderData) { } } -func LoadData(uid int64) (d *models.HtCardHolderData) { +func _LoadData(uid int64) (d *models.HtCardHolderData) { d = models.NewHtCardHolderData(uid) o := orm.NewOrm() o.Using(constd.MYSQL_DEFAULT) - if err := o.QueryTable(d).One(d); err != nil { - lxalilog.Errors(err, "ht_cardholder LoadData Error", d.Uid) + qs := o.QueryTable(d) + qs = qs.Filter("uid", uid) + count, err := qs.Count() + if count == 0 { + d.CreateTime = lxtime.NowUninx() + } else { + err = qs.One(d) + if err != nil { + lxalilog.Errors(err, "ht_cardholder LoadData Error", uid) + } else { + d.DetailsData = models.NewHtCardHolderDataDetails() + d.Decode() + } } - d.DetailsData = models.NewHtCardHolderDataDetails() - d.Decode() return } + +// LoadData 获取数据 外部接口 +func LoadData(uid int64) (d *models.HtCardHolderData) { + d = _LoadData(uid) + // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新 + if Registry.Config.Id != 0 && + Registry.Config.Id != d.ActivityId { + d.ActivityId = Registry.Config.Id + d.DetailsData = models.NewHtCardHolderDataDetails() + SaveData(d) + } + return +} + +// CheckStatus 判断活动是否开启 +func CheckStatus() string { + sec := lxtime.NowUninx() + if Registry.Config.Id == 0 { + return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR + } + if sec < Registry.Config.Raw.StartTime { + return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR + } + if sec > Registry.Config.Raw.EndTime { + return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR + } + return constd.RECODE_OK +} -- libgit2 0.21.0