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 @@ @@ -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 \ No newline at end of file 9 \ No newline at end of file
conf/conf/db/s_cardholder_record_getnew_.sql 0 → 100644
@@ -0,0 +1,11 @@ @@ -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 \ No newline at end of file 12 \ No newline at end of file
conf/conf/db/s_cardholder_record_open_.sql 0 → 100644
@@ -0,0 +1,11 @@ @@ -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 \ No newline at end of file 12 \ No newline at end of file
conf/conf/db/s_cardholder_record_rewardalbum_.sql 0 → 100644
@@ -0,0 +1,11 @@ @@ -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 \ No newline at end of file 12 \ No newline at end of file
conf/conf/db/s_cardholder_record_rewardround_.sql 0 → 100644
@@ -0,0 +1,10 @@ @@ -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 \ No newline at end of file 11 \ No newline at end of file
conf/prod.conf
1 appname = api-game 1 appname = api-game
2 -httpport = 60080 2 +httpport = 39080
3 runmode = prod 3 runmode = prod
4 autorender = false 4 autorender = false
5 copyrequestbody = true 5 copyrequestbody = true
dto/cardholder-record.go
@@ -3,6 +3,7 @@ package dto @@ -3,6 +3,7 @@ package dto
3 import ( 3 import (
4 "apigame/service/constd" 4 "apigame/service/constd"
5 "apigame/util/util-lx/lxtime" 5 "apigame/util/util-lx/lxtime"
  6 + "fmt"
6 ) 7 )
7 8
8 // CardHolderRecordGetNew 开卡包活动日志获得卡包 9 // CardHolderRecordGetNew 开卡包活动日志获得卡包
@@ -17,8 +18,24 @@ type CardHolderRecordGetNew struct { @@ -17,8 +18,24 @@ type CardHolderRecordGetNew struct {
17 UpdateTime int64 // 修改时间戳 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 func NewCardHolderRecordGetNew(uid int64, activityId int64, round int, 41 func NewCardHolderRecordGetNew(uid int64, activityId int64, round int,
@@ -47,8 +64,24 @@ type CardHolderRecordOpen struct { @@ -47,8 +64,24 @@ type CardHolderRecordOpen struct {
47 UpdateTime int64 // 修改时间戳 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 func NewCardHolderRecordOpen(uid int64, activityId int64, round int, 87 func NewCardHolderRecordOpen(uid int64, activityId int64, round int,
@@ -77,8 +110,24 @@ type CardHolderRecordRewardAlbum struct { @@ -77,8 +110,24 @@ type CardHolderRecordRewardAlbum struct {
77 UpdateTime int64 // 修改时间戳 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 func NewCardHolderRecordRewardAlbum(uid int64, activityId int64, round int, 133 func NewCardHolderRecordRewardAlbum(uid int64, activityId int64, round int,
@@ -95,7 +144,7 @@ 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 type CardHolderRecordRewardRound struct { 148 type CardHolderRecordRewardRound struct {
100 Id int64 `orm:"auto"` // 日志ID 149 Id int64 `orm:"auto"` // 日志ID
101 Uid int64 // 玩家唯一ID 150 Uid int64 // 玩家唯一ID
@@ -106,8 +155,23 @@ type CardHolderRecordRewardRound struct { @@ -106,8 +155,23 @@ type CardHolderRecordRewardRound struct {
106 UpdateTime int64 // 修改时间戳 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 func NewCardHolderRecordRewardRound(uid int64, activityId int64, round int, 177 func NewCardHolderRecordRewardRound(uid int64, activityId int64, round int,
dto/cardholder.go
@@ -4,29 +4,33 @@ import ( @@ -4,29 +4,33 @@ import (
4 "apigame/models" 4 "apigame/models"
5 "apigame/service/constd" 5 "apigame/service/constd"
6 "apigame/util/util-lx/lxalilog" 6 "apigame/util/util-lx/lxalilog"
  7 + "apigame/util/util-lx/lxtime"
7 "encoding/json" 8 "encoding/json"
  9 + "fmt"
8 "github.com/astaxie/beego/orm" 10 "github.com/astaxie/beego/orm"
9 ) 11 )
10 12
11 func InitCardholder() { 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 // create table 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 // CardHolderData 卡牌活动持久数据 28 // CardHolderData 卡牌活动持久数据
25 type CardHolderData struct { 29 type CardHolderData struct {
26 - Uid int64 `orm:"pk"` // 玩家唯一ID 30 + Uid int64 // 玩家唯一ID
27 ActivityId int64 // 活动ID 31 ActivityId int64 // 活动ID
28 - Details *CardHolderDataDetails `orm:"-"` // 活动详情  
29 - DetailsText string `orm:"type(text)"` // 活动详情封装 32 + Details *CardHolderDataDetails // 活动详情
  33 + DetailsText string // 活动详情封装
30 CreateTime int64 // 创建时间戳 34 CreateTime int64 // 创建时间戳
31 UpdateTime int64 // 修改时间戳 35 UpdateTime int64 // 修改时间戳
32 } 36 }
@@ -42,10 +46,12 @@ type CardHolderDataDetails struct { @@ -42,10 +46,12 @@ type CardHolderDataDetails struct {
42 } 46 }
43 47
44 func NewCardHolderData(uid int64) *CardHolderData { 48 func NewCardHolderData(uid int64) *CardHolderData {
45 - return &CardHolderData{ 49 + d := &CardHolderData{
46 Uid: uid, 50 Uid: uid,
47 Details: NewCardHolderDataDetails(), 51 Details: NewCardHolderDataDetails(),
48 } 52 }
  53 + d.Encode()
  54 + return d
49 } 55 }
50 56
51 func NewCardHolderDataDetails() *CardHolderDataDetails { 57 func NewCardHolderDataDetails() *CardHolderDataDetails {
@@ -59,8 +65,26 @@ 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 // Encode 打包数据 90 // Encode 打包数据
dto/dto.go 0 → 100644
@@ -0,0 +1,46 @@ @@ -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 @@ @@ -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 @@ @@ -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 +}
1 package dto 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 @@ @@ -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,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 @@ @@ -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 package cardholder 1 package cardholder
2 2
3 import ( 3 import (
4 - "apigame/service/constd"  
5 "apigame/util/util-lx/lxalilog" 4 "apigame/util/util-lx/lxalilog"
6 "encoding/json" 5 "encoding/json"
7 "errors" 6 "errors"
@@ -10,41 +9,45 @@ import ( @@ -10,41 +9,45 @@ import (
10 ) 9 )
11 10
12 var ( 11 var (
13 - ConfigRaws CardActivityConfigRaw // 活动配置 原始数据  
14 - Config CardActivityConfig // 活动配置 分析后数据 12 + Configs map[string]*CardActivityConfig // 配置列表 k=GameId v=配置
15 ) 13 )
16 14
17 func NewConfigs() { 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 // ConfigDecode 解析配置原始数据 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 Awards: make(map[string]string), 30 Awards: make(map[string]string),
28 AlbumConfig: make(map[string]AlbumConfig), 31 AlbumConfig: make(map[string]AlbumConfig),
29 CardConfig: make(map[int]CardConfig), 32 CardConfig: make(map[int]CardConfig),
30 - CardholderConfig: make(map[string]CardholderConfig), 33 + CardholderConfig: make(map[string]OpenCardholderConfig),
31 NormalCardStarConfig: make(map[string]NormalCardStarConfig), 34 NormalCardStarConfig: make(map[string]NormalCardStarConfig),
32 CardSequenceConfig: make(map[string]CardSequenceConfig), 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 if err != nil { 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 return 42 return
40 } 43 }
41 } 44 }
42 // 卡组配置 45 // 卡组配置
43 { 46 {
44 configs := make([]AlbumConfig, 0) 47 configs := make([]AlbumConfig, 0)
45 - err := json.Unmarshal([]byte(ConfigRaws.AlbumConfig), &configs) 48 + err := json.Unmarshal([]byte(configRaw.AlbumConfig), &configs)
46 if err != nil { 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 return 51 return
49 } 52 }
50 for _, i2 := range configs { 53 for _, i2 := range configs {
@@ -54,9 +57,9 @@ func ConfigDecode() { @@ -54,9 +57,9 @@ func ConfigDecode() {
54 // 卡牌配置 57 // 卡牌配置
55 { 58 {
56 configs := make([]CardConfig, 0) 59 configs := make([]CardConfig, 0)
57 - err := json.Unmarshal([]byte(ConfigRaws.CardConfig), &configs) 60 + err := json.Unmarshal([]byte(configRaw.CardConfig), &configs)
58 if err != nil { 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 return 63 return
61 } 64 }
62 for _, i2 := range configs { 65 for _, i2 := range configs {
@@ -65,10 +68,10 @@ func ConfigDecode() { @@ -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 if err != nil { 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 return 75 return
73 } 76 }
74 for _, i2 := range configs { 77 for _, i2 := range configs {
@@ -78,9 +81,9 @@ func ConfigDecode() { @@ -78,9 +81,9 @@ func ConfigDecode() {
78 // 卡片星级配置 81 // 卡片星级配置
79 { 82 {
80 configs := make([]NormalCardStarConfig, 0) 83 configs := make([]NormalCardStarConfig, 0)
81 - err := json.Unmarshal([]byte(ConfigRaws.NormalCardStarSequence), &configs) 84 + err := json.Unmarshal([]byte(configRaw.NormalCardStarSequence), &configs)
82 if err != nil { 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 return 87 return
85 } 88 }
86 for _, i2 := range configs { 89 for _, i2 := range configs {
@@ -92,9 +95,9 @@ func ConfigDecode() { @@ -92,9 +95,9 @@ func ConfigDecode() {
92 // 卡片星级对应卡牌配置 95 // 卡片星级对应卡牌配置
93 { 96 {
94 configs := make([]CardSequenceConfig, 0) 97 configs := make([]CardSequenceConfig, 0)
95 - err := json.Unmarshal([]byte(ConfigRaws.CardSequenceConfig), &configs) 98 + err := json.Unmarshal([]byte(configRaw.CardSequenceConfig), &configs)
96 if err != nil { 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 return 101 return
99 } 102 }
100 for _, i2 := range configs { 103 for _, i2 := range configs {
@@ -103,6 +106,7 @@ func ConfigDecode() { @@ -103,6 +106,7 @@ func ConfigDecode() {
103 Config.CardSequenceConfig[combineId] = i2 106 Config.CardSequenceConfig[combineId] = i2
104 } 107 }
105 } 108 }
  109 + Configs[gameId] = Config
106 } 110 }
107 111
108 // CombineIdSequenceIdCohort 组合ID k=ID_用户序列_用户分组 112 // CombineIdSequenceIdCohort 组合ID k=ID_用户序列_用户分组
@@ -111,9 +115,9 @@ func CombineIdSequenceIdCohort(id, sequenceId, cohort string) string { @@ -111,9 +115,9 @@ func CombineIdSequenceIdCohort(id, sequenceId, cohort string) string {
111 } 115 }
112 116
113 // FindNormalCardStarConfig 查找配置 非保底卡星级ID 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 combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort) 119 combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort)
116 - conf, has = Config.NormalCardStarConfig[combineId] 120 + conf, has = c.NormalCardStarConfig[combineId]
117 if !has { 121 if !has {
118 lxalilog.Errors(errors.New("ht_cardholder NormalCardStarConfig error"), id, sequenceId, cohort) 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,9 +125,9 @@ func FindNormalCardStarConfig(id, sequenceId, cohort string) (conf NormalCardSta
121 } 125 }
122 126
123 // FindCardSequenceConfig 查找配置 星级ID对应的卡片 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 combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort) 129 combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort)
126 - conf, has = Config.CardSequenceConfig[combineId] 130 + conf, has = c.CardSequenceConfig[combineId]
127 if !has { 131 if !has {
128 lxalilog.Errors(errors.New("ht_cardholder CardSequenceConfig error"), id, sequenceId, cohort) 132 lxalilog.Errors(errors.New("ht_cardholder CardSequenceConfig error"), id, sequenceId, cohort)
129 } 133 }
service/cardholder/config.go
1 package cardholder 1 package cardholder
2 2
3 -import "apigame/service/constd"  
4 -  
5 // CardActivityUpdateConfig 卡牌活动更新配置 3 // CardActivityUpdateConfig 卡牌活动更新配置
6 type CardActivityUpdateConfig struct { 4 type CardActivityUpdateConfig struct {
7 Id int64 // ID 5 Id int64 // ID
@@ -11,20 +9,17 @@ type CardActivityUpdateConfig struct { @@ -11,20 +9,17 @@ type CardActivityUpdateConfig struct {
11 9
12 // CardActivityConfig 卡牌活动配置 分析后数据 10 // CardActivityConfig 卡牌活动配置 分析后数据
13 type CardActivityConfig struct { 11 type CardActivityConfig struct {
14 - Raw CardActivityConfigRaw 12 + Raw *CardActivityConfigRaw
  13 + GameId string // 所属游戏ID
15 Id int64 // ID 14 Id int64 // ID
16 Awards map[string]string // 奖励配置 15 Awards map[string]string // 奖励配置
17 AlbumConfig map[string]AlbumConfig // 卡组配置 16 AlbumConfig map[string]AlbumConfig // 卡组配置
18 CardConfig map[int]CardConfig // 卡牌配置 17 CardConfig map[int]CardConfig // 卡牌配置
19 - CardholderConfig map[string]CardholderConfig // 卡包开卡规则 18 + CardholderConfig map[string]OpenCardholderConfig // 卡包开卡规则
20 NormalCardStarConfig map[string]NormalCardStarConfig // k=ID_用户序列_用户分组 卡片星级配置 19 NormalCardStarConfig map[string]NormalCardStarConfig // k=ID_用户序列_用户分组 卡片星级配置
21 CardSequenceConfig map[string]CardSequenceConfig // k=ID_用户序列_用户分组 卡片星级对应卡牌配置 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 // CardActivityConfigRaw 卡牌活动配置 原始数据 23 // CardActivityConfigRaw 卡牌活动配置 原始数据
29 type CardActivityConfigRaw struct { 24 type CardActivityConfigRaw struct {
30 Id int64 // ID 25 Id int64 // ID
@@ -60,8 +55,8 @@ type CardConfig struct { @@ -60,8 +55,8 @@ type CardConfig struct {
60 Star int `json:"star"` // 星级 55 Star int `json:"star"` // 星级
61 } 56 }
62 57
63 -// CardholderConfig 卡包开卡规则表  
64 -type CardholderConfig struct { 58 +// OpenCardholderConfig 卡包开卡规则表
  59 +type OpenCardholderConfig struct {
65 Id string `json:"id"` // ID 60 Id string `json:"id"` // ID
66 IsGoldCardholder int `json:"is_gold_card_holder"` // 是否是金卡包 61 IsGoldCardholder int `json:"is_gold_card_holder"` // 是否是金卡包
67 IsNew int `json:"is_new"` // 是否是新卡包 62 IsNew int `json:"is_new"` // 是否是新卡包
service/cardholder/configs.go
@@ -1,69 +0,0 @@ @@ -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,7 +4,6 @@ import (
4 "apigame/dto" 4 "apigame/dto"
5 "apigame/models" 5 "apigame/models"
6 "apigame/service/constd" 6 "apigame/service/constd"
7 - game_record "apigame/service/game-record"  
8 "apigame/util/utjson" 7 "apigame/util/utjson"
9 "apigame/util/uttype" 8 "apigame/util/uttype"
10 "strconv" 9 "strconv"
@@ -16,10 +15,14 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH @@ -16,10 +15,14 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH
16 code = constd.RECODE_OK 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 rsp.CardHolderInfo = gameData.GetInfo() 27 rsp.CardHolderInfo = gameData.GetInfo()
25 28
@@ -32,10 +35,14 @@ func HandleGetNew(req *models.ReqCardHolderGetNew) (code string, rsp models.RspC @@ -32,10 +35,14 @@ func HandleGetNew(req *models.ReqCardHolderGetNew) (code string, rsp models.RspC
32 code = constd.RECODE_OK 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 if code != constd.RECODE_OK { 46 if code != constd.RECODE_OK {
40 return 47 return
41 } 48 }
@@ -52,21 +59,21 @@ func HandleGetNew(req *models.ReqCardHolderGetNew) (code string, rsp models.RspC @@ -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 if code != constd.RECODE_OK { 65 if code != constd.RECODE_OK {
59 return 66 return
60 } 67 }
61 68
62 gameData.Details.Cardholder[req.Id] += req.Count 69 gameData.Details.Cardholder[req.Id] += req.Count
63 - SaveData(gameData) 70 + SaveData(req.GameID, gameData)
64 71
65 // 返回信息 72 // 返回信息
66 rsp.CardHolderInfo = gameData.GetInfo() 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 req.Id, req.Count)) 77 req.Id, req.Count))
71 78
72 return 79 return
@@ -78,10 +85,14 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -78,10 +85,14 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
78 code = constd.RECODE_OK 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 if code != constd.RECODE_OK { 96 if code != constd.RECODE_OK {
86 return 97 return
87 } 98 }
@@ -93,9 +104,9 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -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 if code != constd.RECODE_OK { 110 if code != constd.RECODE_OK {
100 return 111 return
101 } 112 }
@@ -113,14 +124,14 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -113,14 +124,14 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
113 //logs.Debug("wjwdbg 用户分组IDcohort:", cohort) 124 //logs.Debug("wjwdbg 用户分组IDcohort:", cohort)
114 if confCardholder.IsNew != 0 { 125 if confCardholder.IsNew != 0 {
115 // 如果是新卡包 按顺序查找数目最少的一张卡抽取 126 // 如果是新卡包 按顺序查找数目最少的一张卡抽取
116 - cardId := GetNewCard(gameData) 127 + cardId := GetNewCard(gameData, Config)
117 //logs.Debug("wjwdbg 抽取新卡ID:", cardId) 128 //logs.Debug("wjwdbg 抽取新卡ID:", cardId)
118 // 增加卡牌 129 // 增加卡牌
119 gameData.Details.Cards[cardId] += 1 130 gameData.Details.Cards[cardId] += 1
120 rsp.NewCards = append(rsp.NewCards, cardId) 131 rsp.NewCards = append(rsp.NewCards, cardId)
121 } else { 132 } else {
122 getCardFunc := func(cardConfigId string) { 133 getCardFunc := func(cardConfigId string) {
123 - confCardSequence, hasCardSequence := FindCardSequenceConfig(cardConfigId, sequenceId, cohort) 134 + confCardSequence, hasCardSequence := Config.FindCardSequenceConfig(cardConfigId, sequenceId, cohort)
124 if hasCardSequence { 135 if hasCardSequence {
125 combineId := CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort) 136 combineId := CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort)
126 scale := gameData.Details.CardSequenceScales[combineId] 137 scale := gameData.Details.CardSequenceScales[combineId]
@@ -143,7 +154,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -143,7 +154,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
143 // 非保底卡 154 // 非保底卡
144 if confCardholder.NormalCardNumber > 0 { 155 if confCardholder.NormalCardNumber > 0 {
145 count := confCardholder.NormalCardNumber 156 count := confCardholder.NormalCardNumber
146 - confNormalCardStar, hasNormalCardStar := FindNormalCardStarConfig(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort) 157 + confNormalCardStar, hasNormalCardStar := Config.FindNormalCardStarConfig(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
147 if hasNormalCardStar { 158 if hasNormalCardStar {
148 combineIdStar := CombineIdSequenceIdCohort(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort) 159 combineIdStar := CombineIdSequenceIdCohort(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
149 scaleStar := gameData.Details.StarSequenceScales[combineIdStar] 160 scaleStar := gameData.Details.StarSequenceScales[combineIdStar]
@@ -164,10 +175,10 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -164,10 +175,10 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
164 gameData.Details.Cardholder[req.Id] = countOld - 1 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 req.Id, utjson.JsonString(rsp.NewCards))) 182 req.Id, utjson.JsonString(rsp.NewCards)))
172 183
173 //logs.Debug("wjwdbg 获取卡牌列表:", rsp.NewCards) 184 //logs.Debug("wjwdbg 获取卡牌列表:", rsp.NewCards)
@@ -186,10 +197,14 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string, @@ -186,10 +197,14 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string,
186 code = constd.RECODE_OK 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 if code != constd.RECODE_OK { 208 if code != constd.RECODE_OK {
194 return 209 return
195 } 210 }
@@ -202,9 +217,9 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string, @@ -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 if code != constd.RECODE_OK { 223 if code != constd.RECODE_OK {
209 return 224 return
210 } 225 }
@@ -227,7 +242,7 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string, @@ -227,7 +242,7 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string,
227 } 242 }
228 243
229 gameData.Details.Album[albumId] += 1 244 gameData.Details.Album[albumId] += 1
230 - SaveData(gameData) 245 + SaveData(req.GameID, gameData)
231 246
232 // 当前轮次 247 // 当前轮次
233 round := gameData.Details.Round 248 round := gameData.Details.Round
@@ -238,7 +253,7 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string, @@ -238,7 +253,7 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string,
238 rsp.CardHolderInfo = gameData.GetInfo() 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 req.Id, rsp.Award)) 257 req.Id, rsp.Award))
243 258
244 return 259 return
@@ -250,18 +265,22 @@ func HandleGetRewardRound(req *models.ReqCardHolderGetRewardRound) (code string, @@ -250,18 +265,22 @@ func HandleGetRewardRound(req *models.ReqCardHolderGetRewardRound) (code string,
250 code = constd.RECODE_OK 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 if code != constd.RECODE_OK { 276 if code != constd.RECODE_OK {
258 return 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 if code != constd.RECODE_OK { 284 if code != constd.RECODE_OK {
266 return 285 return
267 } 286 }
@@ -282,12 +301,12 @@ func HandleGetRewardRound(req *models.ReqCardHolderGetRewardRound) (code string, @@ -282,12 +301,12 @@ func HandleGetRewardRound(req *models.ReqCardHolderGetRewardRound) (code string,
282 rsp.Award = Config.Awards[uttype.IntToString(round)] 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 rsp.Award)) 305 rsp.Award))
287 306
288 // 处理轮次完成 307 // 处理轮次完成
289 HandleNextRound(gameData) 308 HandleNextRound(gameData)
290 - SaveData(gameData) 309 + SaveData(req.GameID, gameData)
291 310
292 // 返回信息 311 // 返回信息
293 rsp.CardHolderInfo = gameData.GetInfo() 312 rsp.CardHolderInfo = gameData.GetInfo()
service/cardholder/logic.go
@@ -6,72 +6,62 @@ import ( @@ -6,72 +6,62 @@ import (
6 "apigame/util/util-lx/lxalilog" 6 "apigame/util/util-lx/lxalilog"
7 "apigame/util/util-lx/lxtime" 7 "apigame/util/util-lx/lxtime"
8 "apigame/util/uttype" 8 "apigame/util/uttype"
9 - "github.com/astaxie/beego/orm"  
10 ) 9 )
11 10
12 // SaveData 存储数据 11 // SaveData 存储数据
13 -func SaveData(d *dto.CardHolderData) { 12 +func SaveData(gameId string, d *dto.CardHolderData) {
14 d.UpdateTime = lxtime.NowUninx() 13 d.UpdateTime = lxtime.NowUninx()
15 d.Encode() 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 d = dto.NewCardHolderData(uid) 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 return 31 return
42 } 32 }
43 33
44 // LoadData 获取数据 外部接口 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 // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新 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 d.Details = dto.NewCardHolderDataDetails() 41 d.Details = dto.NewCardHolderDataDetails()
52 - SaveData(d) 42 + SaveData(gameId, d)
53 } 43 }
54 return 44 return
55 } 45 }
56 46
57 // CheckStatus 判断活动是否开启 47 // CheckStatus 判断活动是否开启
58 -func CheckStatus() string { 48 +func CheckStatus(conf *CardActivityConfig) string {
59 sec := lxtime.NowUninx() 49 sec := lxtime.NowUninx()
60 - if Config.Id == 0 { 50 + if conf.Id == 0 {
61 return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR 51 return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
62 } 52 }
63 - if sec < Config.Raw.StartTime { 53 + if sec < conf.Raw.StartTime {
64 return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR 54 return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
65 } 55 }
66 - if sec > Config.Raw.EndTime { 56 + if sec > conf.Raw.EndTime {
67 return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR 57 return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR
68 } 58 }
69 return constd.RECODE_OK 59 return constd.RECODE_OK
70 } 60 }
71 61
72 // CheckGameData 检查游戏数据 轮次等 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 return constd.RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR 65 return constd.RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR
76 } 66 }
77 return constd.RECODE_OK 67 return constd.RECODE_OK
@@ -113,13 +103,13 @@ func GetListFromArray(array []string, scale, count int) []string { @@ -113,13 +103,13 @@ func GetListFromArray(array []string, scale, count int) []string {
113 } 103 }
114 104
115 // GetNewCard 按顺序查找数目最少的一张卡抽取 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 return 0 108 return 0
119 } 109 }
120 rate := int64(100000000) 110 rate := int64(100000000)
121 list := make([]int64, 0) 111 list := make([]int64, 0)
122 - for id, _ := range Config.CardConfig { 112 + for id, _ := range conf.CardConfig {
123 count, _ := gameData.Details.Cards[id] 113 count, _ := gameData.Details.Cards[id]
124 index := int64(count)*rate + int64(id) 114 index := int64(count)*rate + int64(id)
125 list = append(list, index) 115 list = append(list, index)
service/constd/code-msg.go 0 → 100644
@@ -0,0 +1,127 @@ @@ -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 @@ @@ -0,0 +1,5 @@
  1 +package constd
  2 +
  3 +var (
  4 + GameListCardHolder = []string{"10128"}
  5 +)
service/constd/index.go
@@ -1,125 +0,0 @@ @@ -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,7 +10,7 @@ const (
10 MYSQL_MERGECONFIG = "merge_config" 10 MYSQL_MERGECONFIG = "merge_config"
11 MYSQL_DEFAULT_QUERY_MAXCOUNT = 100 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 MYSQL_TABLE_S_CARDHOLDER_DATA = "s_cardholder_data_" // 开卡包活动数据 14 MYSQL_TABLE_S_CARDHOLDER_DATA = "s_cardholder_data_" // 开卡包活动数据
15 MYSQL_TABLE_S_CARDHOLDER_RECORD_GETNEW = "s_cardholder_record_getnew_" // 开卡包活动日志获得卡包 15 MYSQL_TABLE_S_CARDHOLDER_RECORD_GETNEW = "s_cardholder_record_getnew_" // 开卡包活动日志获得卡包
16 MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN = "s_cardholder_record_open_" // 开卡包活动日志开卡包 16 MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN = "s_cardholder_record_open_" // 开卡包活动日志开卡包
@@ -18,7 +18,3 @@ const ( @@ -18,7 +18,3 @@ const (
18 MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND = "s_cardholder_record_rewardround_" // 开卡包活动日志领取轮次奖励 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,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,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 @@ @@ -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 +//}