Commit 5ed82d23cf34515b75069a7e0ef432729ef6b160

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

faet: 卡牌功能重构为支持多个游戏,数据库自己实现模拟orm接口

conf/conf/db/s_cardholder_data_.sql 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +CREATE TABLE `{tablename}` (
  2 + `uid` bigint(20) NOT NULL COMMENT '玩家唯一ID',
  3 + `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID',
  4 + `details_text` longtext CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL COMMENT '活动详情封装',
  5 + `create_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建时间戳',
  6 + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳',
  7 + PRIMARY KEY (`uid`) USING BTREE
  8 +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '卡包卡牌数据';
0 9 \ No newline at end of file
... ...
conf/conf/db/s_cardholder_record_getnew_.sql 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +CREATE TABLE `{tablename}` (
  2 + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
  3 + `uid` bigint(20) NOT NULL DEFAULT 0 COMMENT '玩家唯一ID',
  4 + `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID',
  5 + `round` int(11) NOT NULL DEFAULT 0 COMMENT '活动轮次',
  6 + `cardholder_id` int(11) NOT NULL DEFAULT 0 COMMENT '卡包ID',
  7 + `cardholder_count` int(11) NOT NULL DEFAULT 0 COMMENT '卡包数量',
  8 + `create_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建时间戳',
  9 + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳',
  10 + PRIMARY KEY (`id`) USING BTREE
  11 +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '开卡包活动日志获得卡包';
0 12 \ No newline at end of file
... ...
conf/conf/db/s_cardholder_record_open_.sql 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +CREATE TABLE `{tablename}` (
  2 + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
  3 + `uid` bigint(20) NOT NULL DEFAULT 0 COMMENT '玩家唯一ID',
  4 + `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID',
  5 + `round` int(11) NOT NULL DEFAULT 0 COMMENT '活动轮次',
  6 + `cardholder_id` int(11) NOT NULL DEFAULT 0 COMMENT '卡包ID',
  7 + `card_list` varchar(255) NOT NULL DEFAULT '' COMMENT '开卡内容',
  8 + `create_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建时间戳',
  9 + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳',
  10 + PRIMARY KEY (`id`) USING BTREE
  11 +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '开卡包活动日志开卡包';
0 12 \ No newline at end of file
... ...
conf/conf/db/s_cardholder_record_rewardalbum_.sql 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +CREATE TABLE `{tablename}` (
  2 + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
  3 + `uid` bigint(20) NOT NULL DEFAULT 0 COMMENT '玩家唯一ID',
  4 + `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID',
  5 + `round` int(11) NOT NULL DEFAULT 0 COMMENT '活动轮次',
  6 + `album_id` int(11) NOT NULL DEFAULT 0 COMMENT '卡组ID',
  7 + `award` varchar(255) NOT NULL DEFAULT '' COMMENT '奖励内容',
  8 + `create_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建时间戳',
  9 + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳',
  10 + PRIMARY KEY (`id`) USING BTREE
  11 +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '开卡包活动日志领取卡组奖励';
0 12 \ No newline at end of file
... ...
conf/conf/db/s_cardholder_record_rewardround_.sql 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +CREATE TABLE `{tablename}` (
  2 + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
  3 + `uid` bigint(20) NOT NULL DEFAULT 0 COMMENT '玩家唯一ID',
  4 + `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID',
  5 + `round` int(11) NOT NULL DEFAULT 0 COMMENT '活动轮次',
  6 + `award` varchar(255) NOT NULL DEFAULT '' COMMENT '奖励内容',
  7 + `create_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建时间戳',
  8 + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳',
  9 + PRIMARY KEY (`id`) USING BTREE
  10 +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '开卡包活动日志领取轮次奖励';
0 11 \ No newline at end of file
... ...
conf/prod.conf
1 1 appname = api-game
2   -httpport = 60080
  2 +httpport = 39080
3 3 runmode = prod
4 4 autorender = false
5 5 copyrequestbody = true
... ...
dto/cardholder-record.go
... ... @@ -3,6 +3,7 @@ package dto
3 3 import (
4 4 "apigame/service/constd"
5 5 "apigame/util/util-lx/lxtime"
  6 + "fmt"
6 7 )
7 8  
8 9 // CardHolderRecordGetNew 开卡包活动日志获得卡包
... ... @@ -17,8 +18,24 @@ type CardHolderRecordGetNew struct {
17 18 UpdateTime int64 // 修改时间戳
18 19 }
19 20  
20   -func (d *CardHolderRecordGetNew) TableName() string {
21   - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_GETNEW + constd.GAME_ID_HT
  21 +func (d *CardHolderRecordGetNew) TableName(gameId string) string {
  22 + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_GETNEW + gameId
  23 +}
  24 +
  25 +func (d *CardHolderRecordGetNew) CreateSqlPath() string {
  26 + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_GETNEW
  27 +}
  28 +
  29 +func (d *CardHolderRecordGetNew) SqlPairs() map[string]string {
  30 + m := make(map[string]string)
  31 + m["uid"] = fmt.Sprintf("%d", d.Uid)
  32 + m["activity_id"] = fmt.Sprintf("%d", d.ActivityId)
  33 + m["round"] = fmt.Sprintf("%d", d.Round)
  34 + m["cardholder_id"] = fmt.Sprintf("%d", d.CardholderId)
  35 + m["cardholder_count"] = fmt.Sprintf("%d", d.CardholderCount)
  36 + m["create_time"] = fmt.Sprintf("%d", d.CreateTime)
  37 + m["update_time"] = fmt.Sprintf("%d", d.UpdateTime)
  38 + return m
22 39 }
23 40  
24 41 func NewCardHolderRecordGetNew(uid int64, activityId int64, round int,
... ... @@ -47,8 +64,24 @@ type CardHolderRecordOpen struct {
47 64 UpdateTime int64 // 修改时间戳
48 65 }
49 66  
50   -func (d *CardHolderRecordOpen) TableName() string {
51   - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN + constd.GAME_ID_HT
  67 +func (d *CardHolderRecordOpen) TableName(gameId string) string {
  68 + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN + gameId
  69 +}
  70 +
  71 +func (d *CardHolderRecordOpen) CreateSqlPath() string {
  72 + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN
  73 +}
  74 +
  75 +func (d *CardHolderRecordOpen) SqlPairs() map[string]string {
  76 + m := make(map[string]string)
  77 + m["uid"] = fmt.Sprintf("%d", d.Uid)
  78 + m["activity_id"] = fmt.Sprintf("%d", d.ActivityId)
  79 + m["round"] = fmt.Sprintf("%d", d.Round)
  80 + m["cardholder_id"] = fmt.Sprintf("%d", d.CardholderId)
  81 + m["card_list"] = fmt.Sprintf("'%s'", d.CardList)
  82 + m["create_time"] = fmt.Sprintf("%d", d.CreateTime)
  83 + m["update_time"] = fmt.Sprintf("%d", d.UpdateTime)
  84 + return m
52 85 }
53 86  
54 87 func NewCardHolderRecordOpen(uid int64, activityId int64, round int,
... ... @@ -77,8 +110,24 @@ type CardHolderRecordRewardAlbum struct {
77 110 UpdateTime int64 // 修改时间戳
78 111 }
79 112  
80   -func (d *CardHolderRecordRewardAlbum) TableName() string {
81   - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM + constd.GAME_ID_HT
  113 +func (d *CardHolderRecordRewardAlbum) TableName(gameId string) string {
  114 + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM + gameId
  115 +}
  116 +
  117 +func (d *CardHolderRecordRewardAlbum) CreateSqlPath() string {
  118 + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM
  119 +}
  120 +
  121 +func (d *CardHolderRecordRewardAlbum) SqlPairs() map[string]string {
  122 + m := make(map[string]string)
  123 + m["uid"] = fmt.Sprintf("%d", d.Uid)
  124 + m["activity_id"] = fmt.Sprintf("%d", d.ActivityId)
  125 + m["round"] = fmt.Sprintf("%d", d.Round)
  126 + m["album_id"] = fmt.Sprintf("%d", d.AlbumId)
  127 + m["award"] = fmt.Sprintf("'%s'", d.Award)
  128 + m["create_time"] = fmt.Sprintf("%d", d.CreateTime)
  129 + m["update_time"] = fmt.Sprintf("%d", d.UpdateTime)
  130 + return m
82 131 }
83 132  
84 133 func NewCardHolderRecordRewardAlbum(uid int64, activityId int64, round int,
... ... @@ -95,7 +144,7 @@ func NewCardHolderRecordRewardAlbum(uid int64, activityId int64, round int,
95 144 }
96 145 }
97 146  
98   -// CardHolderRecordRewardRound 开卡包活动日志领取卡组奖励
  147 +// CardHolderRecordRewardRound 开卡包活动日志领取轮次奖励
99 148 type CardHolderRecordRewardRound struct {
100 149 Id int64 `orm:"auto"` // 日志ID
101 150 Uid int64 // 玩家唯一ID
... ... @@ -106,8 +155,23 @@ type CardHolderRecordRewardRound struct {
106 155 UpdateTime int64 // 修改时间戳
107 156 }
108 157  
109   -func (d *CardHolderRecordRewardRound) TableName() string {
110   - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND + constd.GAME_ID_HT
  158 +func (d *CardHolderRecordRewardRound) TableName(gameId string) string {
  159 + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND + gameId
  160 +}
  161 +
  162 +func (d *CardHolderRecordRewardRound) CreateSqlPath() string {
  163 + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND
  164 +}
  165 +
  166 +func (d *CardHolderRecordRewardRound) SqlPairs() map[string]string {
  167 + m := make(map[string]string)
  168 + m["uid"] = fmt.Sprintf("%d", d.Uid)
  169 + m["activity_id"] = fmt.Sprintf("%d", d.ActivityId)
  170 + m["round"] = fmt.Sprintf("%d", d.Round)
  171 + m["award"] = fmt.Sprintf("'%s'", d.Award)
  172 + m["create_time"] = fmt.Sprintf("%d", d.CreateTime)
  173 + m["update_time"] = fmt.Sprintf("%d", d.UpdateTime)
  174 + return m
111 175 }
112 176  
113 177 func NewCardHolderRecordRewardRound(uid int64, activityId int64, round int,
... ...
dto/cardholder.go
... ... @@ -4,29 +4,33 @@ import (
4 4 "apigame/models"
5 5 "apigame/service/constd"
6 6 "apigame/util/util-lx/lxalilog"
  7 + "apigame/util/util-lx/lxtime"
7 8 "encoding/json"
  9 + "fmt"
8 10 "github.com/astaxie/beego/orm"
9 11 )
10 12  
11 13 func InitCardholder() {
12 14  
13   - // register model
14   - orm.RegisterModel(new(CardHolderData))
15   - orm.RegisterModel(new(CardHolderRecordGetNew))
16   - orm.RegisterModel(new(CardHolderRecordOpen))
17   - orm.RegisterModel(new(CardHolderRecordRewardAlbum))
18   - orm.RegisterModel(new(CardHolderRecordRewardRound))
19   -
20 15 // create table
21   - orm.RunSyncdb("default", false, true)
  16 + o := orm.NewOrm()
  17 + for _, gameId := range constd.GameListCardHolder {
  18 + CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderData), gameId)
  19 +
  20 + CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordGetNew), gameId)
  21 + CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordOpen), gameId)
  22 + CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordRewardAlbum), gameId)
  23 + CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordRewardRound), gameId)
  24 + }
  25 +
22 26 }
23 27  
24 28 // CardHolderData 卡牌活动持久数据
25 29 type CardHolderData struct {
26   - Uid int64 `orm:"pk"` // 玩家唯一ID
  30 + Uid int64 // 玩家唯一ID
27 31 ActivityId int64 // 活动ID
28   - Details *CardHolderDataDetails `orm:"-"` // 活动详情
29   - DetailsText string `orm:"type(text)"` // 活动详情封装
  32 + Details *CardHolderDataDetails // 活动详情
  33 + DetailsText string // 活动详情封装
30 34 CreateTime int64 // 创建时间戳
31 35 UpdateTime int64 // 修改时间戳
32 36 }
... ... @@ -42,10 +46,12 @@ type CardHolderDataDetails struct {
42 46 }
43 47  
44 48 func NewCardHolderData(uid int64) *CardHolderData {
45   - return &CardHolderData{
  49 + d := &CardHolderData{
46 50 Uid: uid,
47 51 Details: NewCardHolderDataDetails(),
48 52 }
  53 + d.Encode()
  54 + return d
49 55 }
50 56  
51 57 func NewCardHolderDataDetails() *CardHolderDataDetails {
... ... @@ -59,8 +65,26 @@ func NewCardHolderDataDetails() *CardHolderDataDetails {
59 65 }
60 66 }
61 67  
62   -func (d *CardHolderData) TableName() string {
63   - return constd.MYSQL_TABLE_S_CARDHOLDER_DATA + constd.GAME_ID_HT
  68 +func (d *CardHolderData) TableName(gameId string) string {
  69 + return constd.MYSQL_TABLE_S_CARDHOLDER_DATA + gameId
  70 +}
  71 +
  72 +func (d *CardHolderData) CreateSqlPath() string {
  73 + return constd.MYSQL_TABLE_S_CARDHOLDER_DATA
  74 +}
  75 +
  76 +func (d *CardHolderData) SqlPairs() map[string]string {
  77 + m := make(map[string]string)
  78 + m["activity_id"] = fmt.Sprintf("%d", d.ActivityId)
  79 + m["details_text"] = fmt.Sprintf("'%s'", d.DetailsText)
  80 + m["create_time"] = fmt.Sprintf("%d", d.CreateTime)
  81 + m["update_time"] = fmt.Sprintf("%d", d.UpdateTime)
  82 + return m
  83 +}
  84 +
  85 +func (d *CardHolderData) Init(uid int64) {
  86 + d.Uid = uid
  87 + d.CreateTime = lxtime.NowUninx()
64 88 }
65 89  
66 90 // Encode 打包数据
... ...
dto/dto.go 0 → 100644
... ... @@ -0,0 +1,46 @@
  1 +package dto
  2 +
  3 +import (
  4 + "github.com/astaxie/beego/logs"
  5 + "github.com/astaxie/beego/orm"
  6 + "io/ioutil"
  7 + "os"
  8 + "strings"
  9 +)
  10 +
  11 +func CreateTable(o orm.Ormer, dbName string, tb ITableData, gameId string) (err error) {
  12 +
  13 + o.Using(dbName)
  14 +
  15 + createSqlPath := "./conf/conf/db/" + tb.CreateSqlPath() + ".sql"
  16 + createSql, err := readFileSql(createSqlPath, tb.TableName(gameId))
  17 + if err != nil {
  18 + logs.Error(err)
  19 + return
  20 + }
  21 +
  22 + _, err = o.Raw(createSql).Exec()
  23 + if err != nil {
  24 + //logs.Error(err)
  25 + return
  26 + }
  27 +
  28 + return
  29 +}
  30 +
  31 +func readFileSql(createSqlPath, tableName string) (sql string, err error) {
  32 + filePtr, err := os.Open(createSqlPath)
  33 + if err != nil {
  34 + return
  35 + }
  36 + defer filePtr.Close()
  37 +
  38 + by, err := ioutil.ReadAll(filePtr)
  39 + if err != nil {
  40 + return
  41 + }
  42 +
  43 + sql = strings.Replace(string(by), "{tablename}", tableName, -1)
  44 +
  45 + return
  46 +}
... ...
dto/interface.go 0 → 100644
... ... @@ -0,0 +1,26 @@
  1 +package dto
  2 +
  3 +// ITableData 数据库表
  4 +type ITableData interface {
  5 + // TableName 表名 后缀是 gameId
  6 + TableName(gameId string) string
  7 + // CreateSqlPath 创建sql位置
  8 + CreateSqlPath() string
  9 +}
  10 +
  11 +type IRecordData interface {
  12 + // TableName 表名 后缀是 gameId
  13 + TableName(gameId string) string
  14 + // SqlPairs 数据键值对
  15 + SqlPairs() map[string]string
  16 +}
  17 +
  18 +// IPlayerData 玩家数据表
  19 +type IPlayerData interface {
  20 + // TableName 表名 后缀是 gameId
  21 + TableName(gameId string) string
  22 + // SqlPairs 数据键值对
  23 + SqlPairs() map[string]string
  24 + // Init 新建
  25 + Init(uid int64)
  26 +}
... ...
dto/player-data.go 0 → 100644
... ... @@ -0,0 +1,67 @@
  1 +package dto
  2 +
  3 +import (
  4 + "apigame/service/constd"
  5 + "apigame/util/util-lx/lxalilog"
  6 + "apigame/util/utmysql"
  7 + "fmt"
  8 + "github.com/astaxie/beego/orm"
  9 +)
  10 +
  11 +func LoadPlayerData(gameId string, uid int64, data IPlayerData) (has bool, err error) {
  12 + tableName := data.TableName(gameId)
  13 + sql := fmt.Sprintf("select * from %s where uid=%d limit 1", tableName, uid)
  14 + has, err = utmysql.FindOneSql(constd.MYSQL_MERGECOMMON, sql, data)
  15 + if err != nil {
  16 + lxalilog.Errors(err, sql, gameId, uid)
  17 + return
  18 + }
  19 + // 档案不存在 新建
  20 + if !has {
  21 + data.Init(uid)
  22 + CreatePlayerData(gameId, uid, data)
  23 + }
  24 + return
  25 +}
  26 +
  27 +func CreatePlayerData(gameId string, uid int64, data IPlayerData) {
  28 + text1 := ""
  29 + text2 := ""
  30 + for s, s2 := range data.SqlPairs() {
  31 + text1 += "," + s
  32 + text2 += "," + s2
  33 + }
  34 + sql := fmt.Sprintf("insert into %s (uid%s) value (%d%s)",
  35 + data.TableName(gameId), text1, uid, text2)
  36 +
  37 + o := orm.NewOrm()
  38 + o.Using(constd.MYSQL_MERGECOMMON)
  39 +
  40 + _, err := o.Raw(sql).Exec()
  41 + if err != nil {
  42 + lxalilog.Errors(err, sql, gameId, uid)
  43 + return
  44 + }
  45 +}
  46 +
  47 +func SavePlayerData(gameId string, uid int64, data IPlayerData) {
  48 + text := ""
  49 + indexPairs := 0
  50 + for s, s2 := range data.SqlPairs() {
  51 + if indexPairs != 0 {
  52 + text += ","
  53 + }
  54 + text += fmt.Sprintf("%s=%s", s, s2)
  55 + indexPairs++
  56 + }
  57 + sql := fmt.Sprintf("update %s set %s where uid=%d", data.TableName(gameId), text, uid)
  58 +
  59 + o := orm.NewOrm()
  60 + o.Using(constd.MYSQL_MERGECOMMON)
  61 +
  62 + _, err := o.Raw(sql).Exec()
  63 + if err != nil {
  64 + lxalilog.Errors(err, sql, gameId, uid)
  65 + return
  66 + }
  67 +}
... ...
dto/record.go
1 1 package dto
2 2  
3   -type RecordMysql interface {
4   - TableName() string
  3 +import (
  4 + "apigame/service/constd"
  5 + "apigame/util/util-lx/lxalilog"
  6 + "fmt"
  7 + "github.com/astaxie/beego/orm"
  8 +)
  9 +
  10 +func SaveRecord(gameId string, data IRecordData) {
  11 + text1 := ""
  12 + text2 := ""
  13 + indexPairs := 0
  14 + for s, s2 := range data.SqlPairs() {
  15 + if indexPairs != 0 {
  16 + text1 += ","
  17 + text2 += ","
  18 + }
  19 + text1 += s
  20 + text2 += s2
  21 + indexPairs++
  22 + }
  23 + sql := fmt.Sprintf("insert into %s (%s) value (%s)",
  24 + data.TableName(gameId), text1, text2)
  25 +
  26 + o := orm.NewOrm()
  27 + o.Using(constd.MYSQL_MERGECOMMON)
  28 +
  29 + _, err := o.Raw(sql).Exec()
  30 + if err != nil {
  31 + lxalilog.Errors(err, sql, gameId)
  32 + return
  33 + }
5 34 }
... ...
models/cardholder.go 0 → 100644
... ... @@ -0,0 +1,73 @@
  1 +package models
  2 +
  3 +// 海滩卡包
  4 +
  5 +// CardHolderInfo 卡包信息
  6 +type CardHolderInfo struct {
  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"` // 卡册当前轮次
  11 +}
  12 +
  13 +// ReqCardHolderInfo 请求 卡包信息
  14 +type ReqCardHolderInfo struct {
  15 + BaseLoginInfo
  16 + BaseSign
  17 +}
  18 +
  19 +// RspCardHolderInfo 返回 卡包信息
  20 +type RspCardHolderInfo struct {
  21 + CardHolderInfo
  22 +}
  23 +
  24 +// ReqCardHolderGetNew 请求 获取卡包
  25 +type ReqCardHolderGetNew struct {
  26 + BaseLoginInfo
  27 + BaseSign
  28 + Id int `form:"id" json:"id" valid:"Required"` // 卡包ID
  29 + Count int `form:"count" json:"count" valid:"Required"` // 卡包数量
  30 +}
  31 +
  32 +// RspCardHolderGetNew 返回 获取卡包
  33 +type RspCardHolderGetNew struct {
  34 + CardHolderInfo
  35 +}
  36 +
  37 +// ReqCardHolderOpen 请求 打开卡包
  38 +type ReqCardHolderOpen struct {
  39 + BaseLoginInfo
  40 + BaseSign
  41 + Id int `form:"id" json:"id" valid:"Required"` // 卡包ID
  42 +}
  43 +
  44 +// RspCardHolderOpen 返回 打开卡包
  45 +type RspCardHolderOpen struct {
  46 + CardHolderInfo
  47 + NewCards []int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表
  48 +}
  49 +
  50 +// ReqCardHolderGetRewardAlbum 请求 领取卡组奖励
  51 +type ReqCardHolderGetRewardAlbum struct {
  52 + BaseLoginInfo
  53 + BaseSign
  54 + Id int `form:"id" json:"id" valid:"Required"` // 卡组ID
  55 +}
  56 +
  57 +// RspCardHolderGetRewardAlbum 返回 领取卡组奖励
  58 +type RspCardHolderGetRewardAlbum struct {
  59 + CardHolderInfo
  60 + Award string `form:"award" json:"award"` // 奖励字符串
  61 +}
  62 +
  63 +// ReqCardHolderGetRewardRound 请求 领取轮次奖励
  64 +type ReqCardHolderGetRewardRound struct {
  65 + BaseLoginInfo
  66 + BaseSign
  67 +}
  68 +
  69 +// RspCardHolderGetRewardRound 返回 领取轮次奖励
  70 +type RspCardHolderGetRewardRound struct {
  71 + CardHolderInfo
  72 + Award string `form:"award" json:"award"` // 奖励字符串
  73 +}
... ...
models/ht-cardholder.go
... ... @@ -1,73 +0,0 @@
1   -package models
2   -
3   -// 海滩卡包
4   -
5   -// CardHolderInfo 卡包信息
6   -type CardHolderInfo struct {
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"` // 卡册当前轮次
11   -}
12   -
13   -// ReqCardHolderInfo 请求 卡包信息
14   -type ReqCardHolderInfo struct {
15   - BaseLoginInfo
16   - BaseSign
17   -}
18   -
19   -// RspCardHolderInfo 返回 卡包信息
20   -type RspCardHolderInfo struct {
21   - CardHolderInfo
22   -}
23   -
24   -// ReqCardHolderGetNew 请求 获取卡包
25   -type ReqCardHolderGetNew struct {
26   - BaseLoginInfo
27   - BaseSign
28   - Id int `form:"id" json:"id" valid:"Required"` // 卡包ID
29   - Count int `form:"count" json:"count" valid:"Required"` // 卡包数量
30   -}
31   -
32   -// RspCardHolderGetNew 返回 获取卡包
33   -type RspCardHolderGetNew struct {
34   - CardHolderInfo
35   -}
36   -
37   -// ReqCardHolderOpen 请求 打开卡包
38   -type ReqCardHolderOpen struct {
39   - BaseLoginInfo
40   - BaseSign
41   - Id int `form:"id" json:"id" valid:"Required"` // 卡包ID
42   -}
43   -
44   -// RspCardHolderOpen 返回 打开卡包
45   -type RspCardHolderOpen struct {
46   - CardHolderInfo
47   - NewCards []int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表
48   -}
49   -
50   -// ReqCardHolderGetRewardAlbum 请求 领取卡组奖励
51   -type ReqCardHolderGetRewardAlbum struct {
52   - BaseLoginInfo
53   - BaseSign
54   - Id int `form:"id" json:"id" valid:"Required"` // 卡组ID
55   -}
56   -
57   -// RspCardHolderGetRewardAlbum 返回 领取卡组奖励
58   -type RspCardHolderGetRewardAlbum struct {
59   - CardHolderInfo
60   - Award string `form:"award" json:"award"` // 奖励字符串
61   -}
62   -
63   -// ReqCardHolderGetRewardRound 请求 领取轮次奖励
64   -type ReqCardHolderGetRewardRound struct {
65   - BaseLoginInfo
66   - BaseSign
67   -}
68   -
69   -// RspCardHolderGetRewardRound 返回 领取轮次奖励
70   -type RspCardHolderGetRewardRound struct {
71   - CardHolderInfo
72   - Award string `form:"award" json:"award"` // 奖励字符串
73   -}
service/cardholder/config-load.go 0 → 100644
... ... @@ -0,0 +1,85 @@
  1 +package cardholder
  2 +
  3 +import (
  4 + "apigame/service/constd"
  5 + "apigame/util/util-lx/lxalilog"
  6 + "apigame/util/utmysql"
  7 + "fmt"
  8 + "github.com/astaxie/beego/logs"
  9 +)
  10 +
  11 +// Init 初始化
  12 +func Init() {
  13 +
  14 + NewConfigs()
  15 +
  16 + TryUpdateConfigs()
  17 +}
  18 +
  19 +// TryUpdateConfigs 尝试更新配置表
  20 +func TryUpdateConfigs() {
  21 + LoadConfigs()
  22 +}
  23 +
  24 +// LoadConfigs 读取mysql配置
  25 +func LoadConfigs() {
  26 + for _, gameId := range constd.GameListCardHolder {
  27 + LoadConfig(gameId)
  28 + }
  29 +}
  30 +
  31 +// TryUpdateConfig 尝试更新配置表
  32 +func TryUpdateConfig(gameId string) (config *CardActivityConfig, has bool) {
  33 + LoadConfig(gameId)
  34 + return GetConfig(gameId)
  35 +}
  36 +
  37 +// LoadConfig 读取mysql配置
  38 +func LoadConfig(gameId string) {
  39 + configTableName := constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG + gameId
  40 + // 找到当前开放的活动
  41 + configOpen := CardActivityUpdateConfig{Id: 0}
  42 + {
  43 + conf := make([]CardActivityUpdateConfig, 0)
  44 + sql := fmt.Sprintf("select id,status,update_time from %s", configTableName)
  45 + err := utmysql.FindSql(constd.MYSQL_MERGECONFIG, sql, &conf)
  46 + if err != nil {
  47 + lxalilog.Errors(err, sql, gameId)
  48 + return
  49 + }
  50 + for _, config := range conf {
  51 + if config.Status != 0 {
  52 + configOpen = config
  53 + continue
  54 + }
  55 + }
  56 + fmt.Println(configOpen)
  57 + }
  58 + // 没有开放的活动
  59 + if configOpen.Id == 0 {
  60 + return
  61 + }
  62 + // 判断是否需要更新
  63 + needUpdate := false
  64 + configOld, has := GetConfig(gameId)
  65 + if has {
  66 + if configOpen.Id != configOld.Raw.Id || configOpen.UpdateTime != configOld.Raw.UpdateTime {
  67 + needUpdate = true
  68 + }
  69 + } else {
  70 + needUpdate = true
  71 + }
  72 + // 更新数据
  73 + if needUpdate {
  74 + logs.Debug("__________________尝试更新活动条目ID:", configOpen.Id)
  75 + confNew := CardActivityConfigRaw{}
  76 + sql := fmt.Sprintf("select * from %s where id=%d limit 1", configTableName, configOpen.Id)
  77 + _, err := utmysql.FindOneSql(constd.MYSQL_MERGECONFIG, sql, &confNew)
  78 + if err != nil {
  79 + lxalilog.Errors(err, sql, gameId, configOpen.Id)
  80 + return
  81 + }
  82 + logs.Debug("__________________更新活动条目ID:", confNew.Id)
  83 + ConfigDecode(gameId, &confNew)
  84 + }
  85 +}
... ...
service/cardholder/config-registry.go
1 1 package cardholder
2 2  
3 3 import (
4   - "apigame/service/constd"
5 4 "apigame/util/util-lx/lxalilog"
6 5 "encoding/json"
7 6 "errors"
... ... @@ -10,41 +9,45 @@ import (
10 9 )
11 10  
12 11 var (
13   - ConfigRaws CardActivityConfigRaw // 活动配置 原始数据
14   - Config CardActivityConfig // 活动配置 分析后数据
  12 + Configs map[string]*CardActivityConfig // 配置列表 k=GameId v=配置
15 13 )
16 14  
17 15 func NewConfigs() {
18   - ConfigRaws = CardActivityConfigRaw{}
19   - Config = CardActivityConfig{}
  16 + Configs = make(map[string]*CardActivityConfig)
  17 +}
  18 +
  19 +func GetConfig(gameId string) (config *CardActivityConfig, has bool) {
  20 + config, has = Configs[gameId]
  21 + return
20 22 }
21 23  
22 24 // ConfigDecode 解析配置原始数据
23   -func ConfigDecode() {
24   - Config = CardActivityConfig{
25   - Raw: ConfigRaws,
26   - Id: ConfigRaws.Id,
  25 +func ConfigDecode(gameId string, configRaw *CardActivityConfigRaw) {
  26 + Config := &CardActivityConfig{
  27 + Raw: configRaw,
  28 + GameId: gameId,
  29 + Id: configRaw.Id,
27 30 Awards: make(map[string]string),
28 31 AlbumConfig: make(map[string]AlbumConfig),
29 32 CardConfig: make(map[int]CardConfig),
30   - CardholderConfig: make(map[string]CardholderConfig),
  33 + CardholderConfig: make(map[string]OpenCardholderConfig),
31 34 NormalCardStarConfig: make(map[string]NormalCardStarConfig),
32 35 CardSequenceConfig: make(map[string]CardSequenceConfig),
33 36 }
34 37 // 解析奖励
35 38 {
36   - err := json.Unmarshal([]byte(ConfigRaws.Awards), &Config.Awards)
  39 + err := json.Unmarshal([]byte(configRaw.Awards), &Config.Awards)
37 40 if err != nil {
38   - lxalilog.Errors(err, ConfigRaws.Awards, constd.GAME_ID_HT, ConfigRaws.Id)
  41 + lxalilog.Errors(err, configRaw.Awards, gameId, configRaw.Id)
39 42 return
40 43 }
41 44 }
42 45 // 卡组配置
43 46 {
44 47 configs := make([]AlbumConfig, 0)
45   - err := json.Unmarshal([]byte(ConfigRaws.AlbumConfig), &configs)
  48 + err := json.Unmarshal([]byte(configRaw.AlbumConfig), &configs)
46 49 if err != nil {
47   - lxalilog.Errors(err, ConfigRaws.AlbumConfig, constd.GAME_ID_HT, ConfigRaws.Id)
  50 + lxalilog.Errors(err, configRaw.AlbumConfig, gameId, configRaw.Id)
48 51 return
49 52 }
50 53 for _, i2 := range configs {
... ... @@ -54,9 +57,9 @@ func ConfigDecode() {
54 57 // 卡牌配置
55 58 {
56 59 configs := make([]CardConfig, 0)
57   - err := json.Unmarshal([]byte(ConfigRaws.CardConfig), &configs)
  60 + err := json.Unmarshal([]byte(configRaw.CardConfig), &configs)
58 61 if err != nil {
59   - lxalilog.Errors(err, ConfigRaws.CardConfig, constd.GAME_ID_HT, ConfigRaws.Id)
  62 + lxalilog.Errors(err, configRaw.CardConfig, gameId, configRaw.Id)
60 63 return
61 64 }
62 65 for _, i2 := range configs {
... ... @@ -65,10 +68,10 @@ func ConfigDecode() {
65 68 }
66 69 // 卡包开卡规则
67 70 {
68   - configs := make([]CardholderConfig, 0)
69   - err := json.Unmarshal([]byte(ConfigRaws.CardHolderConfig), &configs)
  71 + configs := make([]OpenCardholderConfig, 0)
  72 + err := json.Unmarshal([]byte(configRaw.CardHolderConfig), &configs)
70 73 if err != nil {
71   - lxalilog.Errors(err, ConfigRaws.CardHolderConfig, constd.GAME_ID_HT, ConfigRaws.Id)
  74 + lxalilog.Errors(err, configRaw.CardHolderConfig, gameId, configRaw.Id)
72 75 return
73 76 }
74 77 for _, i2 := range configs {
... ... @@ -78,9 +81,9 @@ func ConfigDecode() {
78 81 // 卡片星级配置
79 82 {
80 83 configs := make([]NormalCardStarConfig, 0)
81   - err := json.Unmarshal([]byte(ConfigRaws.NormalCardStarSequence), &configs)
  84 + err := json.Unmarshal([]byte(configRaw.NormalCardStarSequence), &configs)
82 85 if err != nil {
83   - lxalilog.Errors(err, ConfigRaws.NormalCardStarSequence, constd.GAME_ID_HT, ConfigRaws.Id)
  86 + lxalilog.Errors(err, configRaw.NormalCardStarSequence, gameId, configRaw.Id)
84 87 return
85 88 }
86 89 for _, i2 := range configs {
... ... @@ -92,9 +95,9 @@ func ConfigDecode() {
92 95 // 卡片星级对应卡牌配置
93 96 {
94 97 configs := make([]CardSequenceConfig, 0)
95   - err := json.Unmarshal([]byte(ConfigRaws.CardSequenceConfig), &configs)
  98 + err := json.Unmarshal([]byte(configRaw.CardSequenceConfig), &configs)
96 99 if err != nil {
97   - lxalilog.Errors(err, ConfigRaws.CardSequenceConfig, constd.GAME_ID_HT, ConfigRaws.Id)
  100 + lxalilog.Errors(err, configRaw.CardSequenceConfig, gameId, configRaw.Id)
98 101 return
99 102 }
100 103 for _, i2 := range configs {
... ... @@ -103,6 +106,7 @@ func ConfigDecode() {
103 106 Config.CardSequenceConfig[combineId] = i2
104 107 }
105 108 }
  109 + Configs[gameId] = Config
106 110 }
107 111  
108 112 // CombineIdSequenceIdCohort 组合ID k=ID_用户序列_用户分组
... ... @@ -111,9 +115,9 @@ func CombineIdSequenceIdCohort(id, sequenceId, cohort string) string {
111 115 }
112 116  
113 117 // FindNormalCardStarConfig 查找配置 非保底卡星级ID
114   -func FindNormalCardStarConfig(id, sequenceId, cohort string) (conf NormalCardStarConfig, has bool) {
  118 +func (c *CardActivityConfig) FindNormalCardStarConfig(id, sequenceId, cohort string) (conf NormalCardStarConfig, has bool) {
115 119 combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort)
116   - conf, has = Config.NormalCardStarConfig[combineId]
  120 + conf, has = c.NormalCardStarConfig[combineId]
117 121 if !has {
118 122 lxalilog.Errors(errors.New("ht_cardholder NormalCardStarConfig error"), id, sequenceId, cohort)
119 123 }
... ... @@ -121,9 +125,9 @@ func FindNormalCardStarConfig(id, sequenceId, cohort string) (conf NormalCardSta
121 125 }
122 126  
123 127 // FindCardSequenceConfig 查找配置 星级ID对应的卡片
124   -func FindCardSequenceConfig(id, sequenceId, cohort string) (conf CardSequenceConfig, has bool) {
  128 +func (c *CardActivityConfig) FindCardSequenceConfig(id, sequenceId, cohort string) (conf CardSequenceConfig, has bool) {
125 129 combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort)
126   - conf, has = Config.CardSequenceConfig[combineId]
  130 + conf, has = c.CardSequenceConfig[combineId]
127 131 if !has {
128 132 lxalilog.Errors(errors.New("ht_cardholder CardSequenceConfig error"), id, sequenceId, cohort)
129 133 }
... ...
service/cardholder/config.go
1 1 package cardholder
2 2  
3   -import "apigame/service/constd"
4   -
5 3 // CardActivityUpdateConfig 卡牌活动更新配置
6 4 type CardActivityUpdateConfig struct {
7 5 Id int64 // ID
... ... @@ -11,20 +9,17 @@ type CardActivityUpdateConfig struct {
11 9  
12 10 // CardActivityConfig 卡牌活动配置 分析后数据
13 11 type CardActivityConfig struct {
14   - Raw CardActivityConfigRaw
  12 + Raw *CardActivityConfigRaw
  13 + GameId string // 所属游戏ID
15 14 Id int64 // ID
16 15 Awards map[string]string // 奖励配置
17 16 AlbumConfig map[string]AlbumConfig // 卡组配置
18 17 CardConfig map[int]CardConfig // 卡牌配置
19   - CardholderConfig map[string]CardholderConfig // 卡包开卡规则
  18 + CardholderConfig map[string]OpenCardholderConfig // 卡包开卡规则
20 19 NormalCardStarConfig map[string]NormalCardStarConfig // k=ID_用户序列_用户分组 卡片星级配置
21 20 CardSequenceConfig map[string]CardSequenceConfig // k=ID_用户序列_用户分组 卡片星级对应卡牌配置
22 21 }
23 22  
24   -func (c *CardActivityConfig) TableName() string {
25   - return constd.MYSQL_TABLE_S_CARD_ACTIVITY + constd.GAME_ID_HT
26   -}
27   -
28 23 // CardActivityConfigRaw 卡牌活动配置 原始数据
29 24 type CardActivityConfigRaw struct {
30 25 Id int64 // ID
... ... @@ -60,8 +55,8 @@ type CardConfig struct {
60 55 Star int `json:"star"` // 星级
61 56 }
62 57  
63   -// CardholderConfig 卡包开卡规则表
64   -type CardholderConfig struct {
  58 +// OpenCardholderConfig 卡包开卡规则表
  59 +type OpenCardholderConfig struct {
65 60 Id string `json:"id"` // ID
66 61 IsGoldCardholder int `json:"is_gold_card_holder"` // 是否是金卡包
67 62 IsNew int `json:"is_new"` // 是否是新卡包
... ...
service/cardholder/configs.go
... ... @@ -1,69 +0,0 @@
1   -package cardholder
2   -
3   -import (
4   - "apigame/service/constd"
5   - "apigame/util/util-lx/lxalilog"
6   - "apigame/util/utmysql"
7   - "fmt"
8   - "github.com/astaxie/beego/logs"
9   -)
10   -
11   -// Init 初始化
12   -func Init() {
13   -
14   - NewConfigs()
15   -
16   - TryUpdateConfigs()
17   -
18   - //DumpConfigs()
19   -}
20   -
21   -// TryUpdateConfigs 尝试更新配置表
22   -func TryUpdateConfigs() {
23   - LoadConfigs()
24   -}
25   -
26   -// LoadConfigs 读取mysql配置
27   -func LoadConfigs() {
28   - configTableName := new(CardActivityConfig).TableName()
29   - // 找到当前开放的活动
30   - configOpen := CardActivityUpdateConfig{Id: 0}
31   - {
32   - conf := make([]CardActivityUpdateConfig, 0)
33   - sql := fmt.Sprintf("select id,status,update_time from %s", configTableName)
34   - err := utmysql.FindSql(constd.MYSQL_MERGECONFIG, sql, &conf)
35   - if err != nil {
36   - lxalilog.Errors(err, sql, constd.GAME_ID_HT)
37   - return
38   - }
39   - for _, config := range conf {
40   - if config.Status != 0 {
41   - configOpen = config
42   - continue
43   - }
44   - }
45   - fmt.Println(configOpen)
46   - }
47   - // 没有开放的活动
48   - if configOpen.Id == 0 {
49   - return
50   - }
51   - // 更新数据
52   - if configOpen.Id != Config.Raw.Id || configOpen.UpdateTime != Config.Raw.UpdateTime {
53   - logs.Debug("__________________尝试更新活动条目ID:", configOpen.Id)
54   - confNew := CardActivityConfigRaw{}
55   - sql := fmt.Sprintf("select * from %s where id=%d limit 1", configTableName, configOpen.Id)
56   - err := utmysql.FindOneSql(constd.MYSQL_MERGECONFIG, sql, &confNew)
57   - if err != nil {
58   - lxalilog.Errors(err, sql, constd.GAME_ID_HT, configOpen.Id)
59   - return
60   - }
61   - logs.Debug("__________________更新活动条目ID:", confNew.Id)
62   - ConfigRaws = confNew
63   - ConfigDecode()
64   - }
65   -}
66   -
67   -func DumpConfigs() {
68   -
69   -}
service/cardholder/handle.go
... ... @@ -4,7 +4,6 @@ import (
4 4 "apigame/dto"
5 5 "apigame/models"
6 6 "apigame/service/constd"
7   - game_record "apigame/service/game-record"
8 7 "apigame/util/utjson"
9 8 "apigame/util/uttype"
10 9 "strconv"
... ... @@ -16,10 +15,14 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH
16 15 code = constd.RECODE_OK
17 16  
18 17 // 尝试更新配置
19   - TryUpdateConfigs()
  18 + Config, hasConfig := TryUpdateConfig(req.GameID)
  19 + if !hasConfig {
  20 + code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
  21 + return
  22 + }
20 23  
21 24 // 读取游戏数据
22   - gameData := LoadData(req.UID)
  25 + gameData := LoadData(req.GameID, req.UID, Config.Id)
23 26  
24 27 rsp.CardHolderInfo = gameData.GetInfo()
25 28  
... ... @@ -32,10 +35,14 @@ func HandleGetNew(req *models.ReqCardHolderGetNew) (code string, rsp models.RspC
32 35 code = constd.RECODE_OK
33 36  
34 37 // 尝试更新配置
35   - TryUpdateConfigs()
  38 + Config, hasConfig := TryUpdateConfig(req.GameID)
  39 + if !hasConfig {
  40 + code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
  41 + return
  42 + }
36 43  
37 44 // 检查活动状态
38   - code = CheckStatus()
  45 + code = CheckStatus(Config)
39 46 if code != constd.RECODE_OK {
40 47 return
41 48 }
... ... @@ -52,21 +59,21 @@ func HandleGetNew(req *models.ReqCardHolderGetNew) (code string, rsp models.RspC
52 59 }
53 60  
54 61 // 读取游戏数据
55   - gameData := LoadData(req.UID)
  62 + gameData := LoadData(req.GameID, req.UID, Config.Id)
56 63 // 检查游戏数据 轮次等
57   - code = CheckGameData(gameData)
  64 + code = CheckGameData(gameData, Config)
58 65 if code != constd.RECODE_OK {
59 66 return
60 67 }
61 68  
62 69 gameData.Details.Cardholder[req.Id] += req.Count
63   - SaveData(gameData)
  70 + SaveData(req.GameID, gameData)
64 71  
65 72 // 返回信息
66 73 rsp.CardHolderInfo = gameData.GetInfo()
67 74  
68 75 // 记录日志
69   - game_record.Save(dto.NewCardHolderRecordGetNew(gameData.Uid, Config.Id, gameData.Details.Round,
  76 + dto.SaveRecord(req.GameID, dto.NewCardHolderRecordGetNew(gameData.Uid, Config.Id, gameData.Details.Round,
70 77 req.Id, req.Count))
71 78  
72 79 return
... ... @@ -78,10 +85,14 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
78 85 code = constd.RECODE_OK
79 86  
80 87 // 尝试更新配置
81   - TryUpdateConfigs()
  88 + Config, hasConfig := TryUpdateConfig(req.GameID)
  89 + if !hasConfig {
  90 + code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
  91 + return
  92 + }
82 93  
83 94 // 检查活动状态
84   - code = CheckStatus()
  95 + code = CheckStatus(Config)
85 96 if code != constd.RECODE_OK {
86 97 return
87 98 }
... ... @@ -93,9 +104,9 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
93 104 }
94 105  
95 106 // 读取游戏数据
96   - gameData := LoadData(req.UID)
  107 + gameData := LoadData(req.GameID, req.UID, Config.Id)
97 108 // 检查游戏数据 轮次等
98   - code = CheckGameData(gameData)
  109 + code = CheckGameData(gameData, Config)
99 110 if code != constd.RECODE_OK {
100 111 return
101 112 }
... ... @@ -113,14 +124,14 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
113 124 //logs.Debug("wjwdbg 用户分组IDcohort:", cohort)
114 125 if confCardholder.IsNew != 0 {
115 126 // 如果是新卡包 按顺序查找数目最少的一张卡抽取
116   - cardId := GetNewCard(gameData)
  127 + cardId := GetNewCard(gameData, Config)
117 128 //logs.Debug("wjwdbg 抽取新卡ID:", cardId)
118 129 // 增加卡牌
119 130 gameData.Details.Cards[cardId] += 1
120 131 rsp.NewCards = append(rsp.NewCards, cardId)
121 132 } else {
122 133 getCardFunc := func(cardConfigId string) {
123   - confCardSequence, hasCardSequence := FindCardSequenceConfig(cardConfigId, sequenceId, cohort)
  134 + confCardSequence, hasCardSequence := Config.FindCardSequenceConfig(cardConfigId, sequenceId, cohort)
124 135 if hasCardSequence {
125 136 combineId := CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort)
126 137 scale := gameData.Details.CardSequenceScales[combineId]
... ... @@ -143,7 +154,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
143 154 // 非保底卡
144 155 if confCardholder.NormalCardNumber > 0 {
145 156 count := confCardholder.NormalCardNumber
146   - confNormalCardStar, hasNormalCardStar := FindNormalCardStarConfig(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
  157 + confNormalCardStar, hasNormalCardStar := Config.FindNormalCardStarConfig(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
147 158 if hasNormalCardStar {
148 159 combineIdStar := CombineIdSequenceIdCohort(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
149 160 scaleStar := gameData.Details.StarSequenceScales[combineIdStar]
... ... @@ -164,10 +175,10 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
164 175 gameData.Details.Cardholder[req.Id] = countOld - 1
165 176  
166 177 // 存档
167   - SaveData(gameData)
  178 + SaveData(req.GameID, gameData)
168 179  
169 180 // 记录日志
170   - game_record.Save(dto.NewCardHolderRecordOpen(gameData.Uid, Config.Id, gameData.Details.Round,
  181 + dto.SaveRecord(req.GameID, dto.NewCardHolderRecordOpen(gameData.Uid, Config.Id, gameData.Details.Round,
171 182 req.Id, utjson.JsonString(rsp.NewCards)))
172 183  
173 184 //logs.Debug("wjwdbg 获取卡牌列表:", rsp.NewCards)
... ... @@ -186,10 +197,14 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string,
186 197 code = constd.RECODE_OK
187 198  
188 199 // 尝试更新配置
189   - TryUpdateConfigs()
  200 + Config, hasConfig := TryUpdateConfig(req.GameID)
  201 + if !hasConfig {
  202 + code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
  203 + return
  204 + }
190 205  
191 206 // 检查活动状态
192   - code = CheckStatus()
  207 + code = CheckStatus(Config)
193 208 if code != constd.RECODE_OK {
194 209 return
195 210 }
... ... @@ -202,9 +217,9 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string,
202 217 }
203 218  
204 219 // 读取游戏数据
205   - gameData := LoadData(req.UID)
  220 + gameData := LoadData(req.GameID, req.UID, Config.Id)
206 221 // 检查游戏数据 轮次等
207   - code = CheckGameData(gameData)
  222 + code = CheckGameData(gameData, Config)
208 223 if code != constd.RECODE_OK {
209 224 return
210 225 }
... ... @@ -227,7 +242,7 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string,
227 242 }
228 243  
229 244 gameData.Details.Album[albumId] += 1
230   - SaveData(gameData)
  245 + SaveData(req.GameID, gameData)
231 246  
232 247 // 当前轮次
233 248 round := gameData.Details.Round
... ... @@ -238,7 +253,7 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string,
238 253 rsp.CardHolderInfo = gameData.GetInfo()
239 254  
240 255 // 记录日志
241   - game_record.Save(dto.NewCardHolderRecordRewardAlbum(gameData.Uid, Config.Id, gameData.Details.Round,
  256 + dto.SaveRecord(req.GameID, dto.NewCardHolderRecordRewardAlbum(gameData.Uid, Config.Id, gameData.Details.Round,
242 257 req.Id, rsp.Award))
243 258  
244 259 return
... ... @@ -250,18 +265,22 @@ func HandleGetRewardRound(req *models.ReqCardHolderGetRewardRound) (code string,
250 265 code = constd.RECODE_OK
251 266  
252 267 // 尝试更新配置
253   - TryUpdateConfigs()
  268 + Config, hasConfig := TryUpdateConfig(req.GameID)
  269 + if !hasConfig {
  270 + code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
  271 + return
  272 + }
254 273  
255 274 // 检查活动状态
256   - code = CheckStatus()
  275 + code = CheckStatus(Config)
257 276 if code != constd.RECODE_OK {
258 277 return
259 278 }
260 279  
261 280 // 读取游戏数据
262   - gameData := LoadData(req.UID)
  281 + gameData := LoadData(req.GameID, req.UID, Config.Id)
263 282 // 检查游戏数据 轮次等
264   - code = CheckGameData(gameData)
  283 + code = CheckGameData(gameData, Config)
265 284 if code != constd.RECODE_OK {
266 285 return
267 286 }
... ... @@ -282,12 +301,12 @@ func HandleGetRewardRound(req *models.ReqCardHolderGetRewardRound) (code string,
282 301 rsp.Award = Config.Awards[uttype.IntToString(round)]
283 302  
284 303 // 记录日志
285   - game_record.Save(dto.NewCardHolderRecordRewardRound(gameData.Uid, Config.Id, gameData.Details.Round,
  304 + dto.SaveRecord(req.GameID, dto.NewCardHolderRecordRewardRound(gameData.Uid, Config.Id, gameData.Details.Round,
286 305 rsp.Award))
287 306  
288 307 // 处理轮次完成
289 308 HandleNextRound(gameData)
290   - SaveData(gameData)
  309 + SaveData(req.GameID, gameData)
291 310  
292 311 // 返回信息
293 312 rsp.CardHolderInfo = gameData.GetInfo()
... ...
service/cardholder/logic.go
... ... @@ -6,72 +6,62 @@ import (
6 6 "apigame/util/util-lx/lxalilog"
7 7 "apigame/util/util-lx/lxtime"
8 8 "apigame/util/uttype"
9   - "github.com/astaxie/beego/orm"
10 9 )
11 10  
12 11 // SaveData 存储数据
13   -func SaveData(d *dto.CardHolderData) {
  12 +func SaveData(gameId string, d *dto.CardHolderData) {
14 13 d.UpdateTime = lxtime.NowUninx()
15 14 d.Encode()
16   - o := orm.NewOrm()
17   - o.Using(constd.MYSQL_DEFAULT)
18   - if _, err := o.InsertOrUpdate(d); err != nil {
19   - lxalilog.Errors(err, "ht_cardholder SaveData Error", d.Uid)
20   - }
  15 +
  16 + dto.SavePlayerData(gameId, d.Uid, d)
21 17 }
22 18  
23   -func _LoadData(uid int64) (d *dto.CardHolderData) {
  19 +func _LoadData(gameId string, uid int64) (d *dto.CardHolderData) {
24 20 d = dto.NewCardHolderData(uid)
25   - o := orm.NewOrm()
26   - o.Using(constd.MYSQL_DEFAULT)
27   - qs := o.QueryTable(d)
28   - qs = qs.Filter("uid", uid)
29   - count, err := qs.Count()
30   - if count == 0 {
31   - d.CreateTime = lxtime.NowUninx()
32   - } else {
33   - err = qs.One(d)
34   - if err != nil {
35   - lxalilog.Errors(err, "ht_cardholder LoadData Error", uid)
36   - } else {
37   - d.Details = dto.NewCardHolderDataDetails()
38   - d.Decode()
39   - }
  21 +
  22 + has, err := dto.LoadPlayerData(gameId, uid, d)
  23 + if err != nil {
  24 + lxalilog.Errors(err, "cardholder._LoadData", gameId, uid)
  25 + return
  26 + }
  27 + // 解析
  28 + if has {
  29 + d.Decode()
40 30 }
41 31 return
42 32 }
43 33  
44 34 // LoadData 获取数据 外部接口
45   -func LoadData(uid int64) (d *dto.CardHolderData) {
46   - d = _LoadData(uid)
  35 +func LoadData(gameId string, uid int64, configId int64) (d *dto.CardHolderData) {
  36 + d = _LoadData(gameId, uid)
47 37 // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
48   - if Config.Id != 0 &&
49   - Config.Id != d.ActivityId {
50   - d.ActivityId = Config.Id
  38 + if configId != 0 &&
  39 + configId != d.ActivityId {
  40 + d.ActivityId = configId
51 41 d.Details = dto.NewCardHolderDataDetails()
52   - SaveData(d)
  42 + SaveData(gameId, d)
53 43 }
54 44 return
55 45 }
56 46  
57 47 // CheckStatus 判断活动是否开启
58   -func CheckStatus() string {
  48 +func CheckStatus(conf *CardActivityConfig) string {
59 49 sec := lxtime.NowUninx()
60   - if Config.Id == 0 {
  50 + if conf.Id == 0 {
61 51 return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
62 52 }
63   - if sec < Config.Raw.StartTime {
  53 + if sec < conf.Raw.StartTime {
64 54 return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
65 55 }
66   - if sec > Config.Raw.EndTime {
  56 + if sec > conf.Raw.EndTime {
67 57 return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR
68 58 }
69 59 return constd.RECODE_OK
70 60 }
71 61  
72 62 // CheckGameData 检查游戏数据 轮次等
73   -func CheckGameData(d *dto.CardHolderData) string {
74   - if d.Details.Round > Config.Raw.Round {
  63 +func CheckGameData(d *dto.CardHolderData, conf *CardActivityConfig) string {
  64 + if d.Details.Round > conf.Raw.Round {
75 65 return constd.RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR
76 66 }
77 67 return constd.RECODE_OK
... ... @@ -113,13 +103,13 @@ func GetListFromArray(array []string, scale, count int) []string {
113 103 }
114 104  
115 105 // GetNewCard 按顺序查找数目最少的一张卡抽取
116   -func GetNewCard(gameData *dto.CardHolderData) int {
117   - if len(Config.CardConfig) < 1 {
  106 +func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int {
  107 + if len(conf.CardConfig) < 1 {
118 108 return 0
119 109 }
120 110 rate := int64(100000000)
121 111 list := make([]int64, 0)
122   - for id, _ := range Config.CardConfig {
  112 + for id, _ := range conf.CardConfig {
123 113 count, _ := gameData.Details.Cards[id]
124 114 index := int64(count)*rate + int64(id)
125 115 list = append(list, index)
... ...
service/constd/code-msg.go 0 → 100644
... ... @@ -0,0 +1,127 @@
  1 +package constd
  2 +
  3 +import (
  4 + "apigame/util/util-lx/lxalilog"
  5 + "apigame/util/util-lx/lxtime"
  6 +)
  7 +
  8 +const (
  9 + RECODE_OK = "0"
  10 + RECODE_FALIED = "1000"
  11 + RECODE_UNKNOWERR = "1001"
  12 + RECODE_PARAMERROR = "1002"
  13 + RECODE_SIGNERROR = "1003"
  14 + RECODE_DATA_BUCUNZIA_ERROR = "1004"
  15 + RECODE_PARAMDECODE_ERROR = "1005"
  16 + RECODE_DATANOEXIST_ERROR = "1006"
  17 + RECODE_CREATEUID_ERROR = "1007"
  18 + RECODE_LOGINCHECK_ERROR = "1008"
  19 + RECODE_WEIXINAZIFU_ERROR = "1009"
  20 + RECODE_SDKMEMBER_ERROR = "1010"
  21 + RECODE_CAOZUOPINFAN_ERROR = "1011"
  22 + RECODE_REQUESTXIANLIU_ERROR = "1110"
  23 + RECODE_REQUESTTIME_ERROR = "1111"
  24 +
  25 + RECODE_MERGE_CONFIG_ERROR = "2000"
  26 + RECODE_MERGE_CFLQ_ERROR = "2001"
  27 + RECODE_MERGE_AZSXLQ_ERROR = "2002"
  28 + RECODE_MERGE_QXGMSP_ERROR = "2003"
  29 + RECODE_MERGE_MEMBERSHIP_QXCZZK_ERROR = "2010"
  30 + RECODE_MERGE_MEMBERSHIP_QXCZYK_ERROR = "2011"
  31 + RECODE_MERGE_MEMBERSHIP_QXCZ_ERROR = "2012"
  32 + RECODE_MERGE_MEMBERSHIP_BNCFLQ_ERROR = "2013"
  33 +
  34 + RECODE_MERGE_NOVICE_QXCZ_ERROR = "2021"
  35 + RECODE_MERGE_NOVICE_BNCFLQ_ERROR = "2032"
  36 + RECODE_MERGE_NOVICE_MYDDLQTJ_ERROR = "2033"
  37 + RECODE_MERGE_HUODONGWEIKAISHI_ERROR = "2040"
  38 + RECODE_MERGE_HUODONGYIJIESHU_ERROR = "2041"
  39 + RECODE_MERGE_CCZDXX_ERROR = "2042"
  40 + RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR = "2051"
  41 + RECODE_MERGE_QINGXIANGMTXZ_ERROR = "2052"
  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_COUNTILLEGAL_ERROR = "2105"
  49 + RECODE_MERGE_CARDHOLDER_CARDHOLDER_NOTENOUGH_ERROR = "2106"
  50 + RECODE_MERGE_CARDHOLDER_ALBUMID_ERROR = "2107"
  51 + RECODE_MERGE_CARDHOLDER_ALBUM_HASGOT_ERROR = "2108"
  52 + RECODE_MERGE_CARDHOLDER_ALBUM_NOTFINISH_ERROR = "2109"
  53 + RECODE_MERGE_CARDHOLDER_ROUND_NOTFINISH_ERROR = "2110"
  54 +)
  55 +
  56 +var recodeText = map[string]string{
  57 + RECODE_OK: "成功",
  58 + RECODE_FALIED: "操作失败",
  59 + RECODE_UNKNOWERR: "未知错误",
  60 + RECODE_PARAMERROR: "参数错误",
  61 + RECODE_SIGNERROR: "签名错误",
  62 + RECODE_DATA_BUCUNZIA_ERROR: "数据不存在",
  63 + RECODE_PARAMDECODE_ERROR: "解析参数失败,请检查参数合法性",
  64 + RECODE_DATANOEXIST_ERROR: "数据不存在",
  65 + RECODE_CREATEUID_ERROR: "创建用户UID失败",
  66 + RECODE_LOGINCHECK_ERROR: "登录验证失败,请重新登录",
  67 + RECODE_WEIXINAZIFU_ERROR: "参数存在危险字符",
  68 + RECODE_SDKMEMBER_ERROR: "获取SDK用户信息失败",
  69 + RECODE_CAOZUOPINFAN_ERROR: "操作频繁",
  70 + RECODE_REQUESTXIANLIU_ERROR: "操作被限流",
  71 + RECODE_REQUESTTIME_ERROR: "time errors",
  72 +
  73 + RECODE_MERGE_CONFIG_ERROR: "获取配置文件错误",
  74 + RECODE_MERGE_CFLQ_ERROR: "不能重复领取",
  75 + RECODE_MERGE_AZSXLQ_ERROR: "请按照顺序领取",
  76 + RECODE_MERGE_QXGMSP_ERROR: "请先购买对应商品",
  77 +
  78 + RECODE_MERGE_MEMBERSHIP_QXCZZK_ERROR: "请先购买周卡",
  79 + RECODE_MERGE_MEMBERSHIP_QXCZYK_ERROR: "请先购买月卡",
  80 + RECODE_MERGE_MEMBERSHIP_QXCZ_ERROR: "请先购买对应商品",
  81 + RECODE_MERGE_MEMBERSHIP_BNCFLQ_ERROR: "不能重复领取",
  82 +
  83 + RECODE_MERGE_NOVICE_QXCZ_ERROR: "请先购买对应商品",
  84 + RECODE_MERGE_NOVICE_BNCFLQ_ERROR: "不能重复领取",
  85 + RECODE_MERGE_NOVICE_MYDDLQTJ_ERROR: "没有达到领取条件",
  86 +
  87 + RECODE_MERGE_HUODONGWEIKAISHI_ERROR: "活动未开始",
  88 + RECODE_MERGE_HUODONGYIJIESHU_ERROR: "活动已结束",
  89 + RECODE_MERGE_CCZDXX_ERROR: "超出最大限制",
  90 +
  91 + RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在",
  92 + RECODE_MERGE_QINGXIANGMTXZ_ERROR: "请先购买通行证",
  93 +
  94 + RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR: "活动未开放",
  95 + RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR: "活动未开始",
  96 + RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR: "活动已结束",
  97 + RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR: "活动轮次已全部完成",
  98 + RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR: "卡包ID错误",
  99 + RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR: "数目不合法",
  100 + RECODE_MERGE_CARDHOLDER_CARDHOLDER_NOTENOUGH_ERROR: "卡包不足",
  101 + RECODE_MERGE_CARDHOLDER_ALBUMID_ERROR: "卡组ID错误",
  102 + RECODE_MERGE_CARDHOLDER_ALBUM_HASGOT_ERROR: "卡组奖励已领取",
  103 + RECODE_MERGE_CARDHOLDER_ALBUM_NOTFINISH_ERROR: "卡组卡牌未集齐",
  104 + RECODE_MERGE_CARDHOLDER_ROUND_NOTFINISH_ERROR: "卡册未集齐",
  105 +}
  106 +
  107 +func RecodeText(code string) string {
  108 + str, ok := recodeText[code]
  109 + if ok {
  110 + return str
  111 + }
  112 + return RecodeText(RECODE_UNKNOWERR)
  113 +}
  114 +
  115 +func CodeMsg(data map[string]interface{}, code interface{}) map[string]interface{} {
  116 + data["code"] = code
  117 + data["msg"] = RecodeText(code.(string))
  118 + lxtime.NowUninx()
  119 + data["servertime"] = lxtime.NowUninx()
  120 + return data
  121 +}
  122 +
  123 +func CodeMsgLog(data map[string]interface{}, code interface{}, log ...interface{}) map[string]interface{} {
  124 + // 写入日志
  125 + lxalilog.ErrorCode(code, log)
  126 + return CodeMsg(data, code)
  127 +}
... ...
service/constd/games.go 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +package constd
  2 +
  3 +var (
  4 + GameListCardHolder = []string{"10128"}
  5 +)
... ...
service/constd/index.go
... ... @@ -1,125 +0,0 @@
1   -package constd
2   -
3   -import (
4   - "apigame/util/util-lx/lxalilog"
5   - "apigame/util/util-lx/lxtime"
6   -)
7   -
8   -const (
9   - RECODE_OK = "0"
10   - RECODE_FALIED = "1000"
11   - RECODE_UNKNOWERR = "1001"
12   - RECODE_PARAMERROR = "1002"
13   - RECODE_SIGNERROR = "1003"
14   - RECODE_DATA_BUCUNZIA_ERROR = "1004"
15   - RECODE_PARAMDECODE_ERROR = "1005"
16   - RECODE_DATANOEXIST_ERROR = "1006"
17   - RECODE_CREATEUID_ERROR = "1007"
18   - RECODE_LOGINCHECK_ERROR = "1008"
19   - RECODE_WEIXINAZIFU_ERROR = "1009"
20   - RECODE_SDKMEMBER_ERROR = "1010"
21   - RECODE_CAOZUOPINFAN_ERROR = "1011"
22   - RECODE_REQUESTXIANLIU_ERROR = "1110"
23   - RECODE_REQUESTTIME_ERROR = "1111"
24   -
25   - RECODE_MERGE_CONFIG_ERROR = "2000"
26   - RECODE_MERGE_CFLQ_ERROR = "2001"
27   - RECODE_MERGE_AZSXLQ_ERROR = "2002"
28   - RECODE_MERGE_QXGMSP_ERROR = "2003"
29   - RECODE_MERGE_MEMBERSHIP_QXCZZK_ERROR = "2010"
30   - RECODE_MERGE_MEMBERSHIP_QXCZYK_ERROR = "2011"
31   - RECODE_MERGE_MEMBERSHIP_QXCZ_ERROR = "2012"
32   - RECODE_MERGE_MEMBERSHIP_BNCFLQ_ERROR = "2013"
33   -
34   - RECODE_MERGE_NOVICE_QXCZ_ERROR = "2021"
35   - RECODE_MERGE_NOVICE_BNCFLQ_ERROR = "2032"
36   - RECODE_MERGE_NOVICE_MYDDLQTJ_ERROR = "2033"
37   - RECODE_MERGE_HUODONGWEIKAISHI_ERROR = "2040"
38   - RECODE_MERGE_HUODONGYIJIESHU_ERROR = "2041"
39   - RECODE_MERGE_CCZDXX_ERROR = "2042"
40   - RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR = "2051"
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_ROUNDFINISH_ERROR = "2103"
46   - RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR = "2104"
47   - RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR = "2105"
48   - RECODE_MERGE_CARDHOLDER_CARDHOLDER_NOTENOUGH_ERROR = "2106"
49   - RECODE_MERGE_CARDHOLDER_ALBUMID_ERROR = "2107"
50   - RECODE_MERGE_CARDHOLDER_ALBUM_HASGOT_ERROR = "2108"
51   - RECODE_MERGE_CARDHOLDER_ALBUM_NOTFINISH_ERROR = "2109"
52   - RECODE_MERGE_CARDHOLDER_ROUND_NOTFINISH_ERROR = "2110"
53   -)
54   -
55   -var recodeText = map[string]string{
56   - RECODE_OK: "成功",
57   - RECODE_FALIED: "操作失败",
58   - RECODE_UNKNOWERR: "未知错误",
59   - RECODE_PARAMERROR: "参数错误",
60   - RECODE_SIGNERROR: "签名错误",
61   - RECODE_DATA_BUCUNZIA_ERROR: "数据不存在",
62   - RECODE_PARAMDECODE_ERROR: "解析参数失败,请检查参数合法性",
63   - RECODE_DATANOEXIST_ERROR: "数据不存在",
64   - RECODE_CREATEUID_ERROR: "创建用户UID失败",
65   - RECODE_LOGINCHECK_ERROR: "登录验证失败,请重新登录",
66   - RECODE_WEIXINAZIFU_ERROR: "参数存在危险字符",
67   - RECODE_SDKMEMBER_ERROR: "获取SDK用户信息失败",
68   - RECODE_CAOZUOPINFAN_ERROR: "操作频繁",
69   - RECODE_REQUESTXIANLIU_ERROR: "操作被限流",
70   - RECODE_REQUESTTIME_ERROR: "time errors",
71   -
72   - RECODE_MERGE_CONFIG_ERROR: "获取配置文件错误",
73   - RECODE_MERGE_CFLQ_ERROR: "不能重复领取",
74   - RECODE_MERGE_AZSXLQ_ERROR: "请按照顺序领取",
75   - RECODE_MERGE_QXGMSP_ERROR: "请先购买对应商品",
76   -
77   - RECODE_MERGE_MEMBERSHIP_QXCZZK_ERROR: "请先购买周卡",
78   - RECODE_MERGE_MEMBERSHIP_QXCZYK_ERROR: "请先购买月卡",
79   - RECODE_MERGE_MEMBERSHIP_QXCZ_ERROR: "请先购买对应商品",
80   - RECODE_MERGE_MEMBERSHIP_BNCFLQ_ERROR: "不能重复领取",
81   -
82   - RECODE_MERGE_NOVICE_QXCZ_ERROR: "请先购买对应商品",
83   - RECODE_MERGE_NOVICE_BNCFLQ_ERROR: "不能重复领取",
84   - RECODE_MERGE_NOVICE_MYDDLQTJ_ERROR: "没有达到领取条件",
85   -
86   - RECODE_MERGE_HUODONGWEIKAISHI_ERROR: "活动未开始",
87   - RECODE_MERGE_HUODONGYIJIESHU_ERROR: "活动已结束",
88   - RECODE_MERGE_CCZDXX_ERROR: "超出最大限制",
89   -
90   - RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在",
91   - RECODE_MERGE_QINGXIANGMTXZ_ERROR: "请先购买通行证",
92   -
93   - RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR: "活动未开始",
94   - RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR: "活动已结束",
95   - RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR: "活动轮次已全部完成",
96   - RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR: "卡包ID错误",
97   - RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR: "数目不合法",
98   - RECODE_MERGE_CARDHOLDER_CARDHOLDER_NOTENOUGH_ERROR: "卡包不足",
99   - RECODE_MERGE_CARDHOLDER_ALBUMID_ERROR: "卡组ID错误",
100   - RECODE_MERGE_CARDHOLDER_ALBUM_HASGOT_ERROR: "卡组奖励已领取",
101   - RECODE_MERGE_CARDHOLDER_ALBUM_NOTFINISH_ERROR: "卡组卡牌未集齐",
102   - RECODE_MERGE_CARDHOLDER_ROUND_NOTFINISH_ERROR: "卡册未集齐",
103   -}
104   -
105   -func RecodeText(code string) string {
106   - str, ok := recodeText[code]
107   - if ok {
108   - return str
109   - }
110   - return RecodeText(RECODE_UNKNOWERR)
111   -}
112   -
113   -func CodeMsg(data map[string]interface{}, code interface{}) map[string]interface{} {
114   - data["code"] = code
115   - data["msg"] = RecodeText(code.(string))
116   - lxtime.NowUninx()
117   - data["servertime"] = lxtime.NowUninx()
118   - return data
119   -}
120   -
121   -func CodeMsgLog(data map[string]interface{}, code interface{}, log ...interface{}) map[string]interface{} {
122   - // 写入日志
123   - lxalilog.ErrorCode(code, log)
124   - return CodeMsg(data, code)
125   -}
service/constd/mysql.go
... ... @@ -10,7 +10,7 @@ const (
10 10 MYSQL_MERGECONFIG = "merge_config"
11 11 MYSQL_DEFAULT_QUERY_MAXCOUNT = 100
12 12  
13   - MYSQL_TABLE_S_CARD_ACTIVITY = "s_card_activity_" // 开卡包活动配置
  13 + MYSQL_TABLE_S_CARDHOLDER_CONFIG = "s_card_activity_" // 开卡包活动配置
14 14 MYSQL_TABLE_S_CARDHOLDER_DATA = "s_cardholder_data_" // 开卡包活动数据
15 15 MYSQL_TABLE_S_CARDHOLDER_RECORD_GETNEW = "s_cardholder_record_getnew_" // 开卡包活动日志获得卡包
16 16 MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN = "s_cardholder_record_open_" // 开卡包活动日志开卡包
... ... @@ -18,7 +18,3 @@ const (
18 18 MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND = "s_cardholder_record_rewardround_" // 开卡包活动日志领取轮次奖励
19 19  
20 20 )
21   -
22   -const (
23   - GAME_ID_HT = "10128"
24   -)
... ...
service/game-record/record.go
... ... @@ -1,16 +0,0 @@
1   -package game_record
2   -
3   -import (
4   - "apigame/dto"
5   - "apigame/service/constd"
6   - "apigame/util/util-lx/lxalilog"
7   - "github.com/astaxie/beego/orm"
8   -)
9   -
10   -func Save(d dto.RecordMysql) {
11   - o := orm.NewOrm()
12   - o.Using(constd.MYSQL_DEFAULT)
13   - if _, err := o.Insert(d); err != nil {
14   - lxalilog.Errors(err, d.TableName())
15   - }
16   -}
util/utmysql/index.go
... ... @@ -1,55 +0,0 @@
1   -package utmysql
2   -
3   -import (
4   - "github.com/astaxie/beego/orm"
5   - "strings"
6   -)
7   -
8   -// FindSql 查询数据 根据sql
9   -func FindSql(dbName string, sql string, result any) (err error) {
10   - orm := orm.NewOrm()
11   - orm.Using(dbName)
12   -
13   - if _, err = orm.Raw(sql).QueryRows(result); err != nil {
14   - if strings.Contains(err.Error(), "doesn't exist") {
15   - err = nil
16   - return
17   - }
18   - return
19   - }
20   - return
21   -}
22   -
23   -// FindOneSql 查询一条数据 根据sql
24   -func FindOneSql(dbName string, sql string, result any) (err error) {
25   - orm := orm.NewOrm()
26   - orm.Using(dbName)
27   -
28   - if err = orm.Raw(sql).QueryRow(result); err != nil {
29   - if strings.Contains(err.Error(), "doesn't exist") {
30   - err = nil
31   - return
32   - }
33   - return
34   - }
35   - return
36   -}
37   -
38   -//
39   -//// Find 查询数据
40   -//func Find(dbName string, tableName string, result any) (err error) {
41   -// o := orm.NewOrm()
42   -// o.Using(dbName)
43   -//
44   -// // 也可以直接使用对象作为表名
45   -// qs := o.QueryTable(tableName)
46   -//
47   -// if _, err = qs.All(result); err != nil {
48   -// if strings.Contains(err.Error(), "doesn't exist") {
49   -// err = nil
50   -// return
51   -// }
52   -// return
53   -// }
54   -// return
55   -//}
util/utmysql/query.go 0 → 100644
... ... @@ -0,0 +1,58 @@
  1 +package utmysql
  2 +
  3 +import (
  4 + "github.com/astaxie/beego/orm"
  5 + "strings"
  6 +)
  7 +
  8 +// FindSql 查询数据 根据sql
  9 +func FindSql(dbName string, sql string, result any) (err error) {
  10 + o := orm.NewOrm()
  11 + o.Using(dbName)
  12 +
  13 + if _, err = o.Raw(sql).QueryRows(result); err != nil {
  14 + if strings.Contains(err.Error(), "doesn't exist") {
  15 + err = nil
  16 + return
  17 + }
  18 + return
  19 + }
  20 + return
  21 +}
  22 +
  23 +// FindOneSql 查询一条数据 根据sql
  24 +func FindOneSql(dbName string, sql string, result any) (has bool, err error) {
  25 + has = true
  26 + o := orm.NewOrm()
  27 + o.Using(dbName)
  28 +
  29 + if err = o.Raw(sql).QueryRow(result); err != nil {
  30 + if strings.Contains(err.Error(), "no row found") ||
  31 + strings.Contains(err.Error(), "doesn't exist") {
  32 + has = false
  33 + err = nil
  34 + return
  35 + }
  36 + return
  37 + }
  38 + return
  39 +}
  40 +
  41 +//
  42 +//// Find 查询数据
  43 +//func Find(dbName string, tableName string, result any) (err error) {
  44 +// o := orm.NewOrm()
  45 +// o.Using(dbName)
  46 +//
  47 +// // 也可以直接使用对象作为表名
  48 +// qs := o.QueryTable(tableName)
  49 +//
  50 +// if _, err = qs.All(result); err != nil {
  51 +// if strings.Contains(err.Error(), "doesn't exist") {
  52 +// err = nil
  53 +// return
  54 +// }
  55 +// return
  56 +// }
  57 +// return
  58 +//}
... ...