From 5ed82d23cf34515b75069a7e0ef432729ef6b160 Mon Sep 17 00:00:00 2001 From: 王家文 Date: Wed, 10 Apr 2024 18:59:23 +0800 Subject: [PATCH] faet: 卡牌功能重构为支持多个游戏,数据库自己实现模拟orm接口 --- conf/conf/db/s_cardholder_data_.sql | 8 ++++++++ conf/conf/db/s_cardholder_record_getnew_.sql | 11 +++++++++++ conf/conf/db/s_cardholder_record_open_.sql | 11 +++++++++++ conf/conf/db/s_cardholder_record_rewardalbum_.sql | 11 +++++++++++ conf/conf/db/s_cardholder_record_rewardround_.sql | 10 ++++++++++ conf/prod.conf | 2 +- dto/cardholder-record.go | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- dto/cardholder.go | 52 ++++++++++++++++++++++++++++++++++++++-------------- dto/dto.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ dto/interface.go | 26 ++++++++++++++++++++++++++ dto/player-data.go | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dto/record.go | 33 +++++++++++++++++++++++++++++++-- models/cardholder.go | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ models/ht-cardholder.go | 73 ------------------------------------------------------------------------- service/cardholder/config-load.go | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ service/cardholder/config-registry.go | 58 +++++++++++++++++++++++++++++++--------------------------- service/cardholder/config.go | 15 +++++---------- service/cardholder/configs.go | 69 --------------------------------------------------------------------- service/cardholder/handle.go | 79 +++++++++++++++++++++++++++++++++++++++++++++++++------------------------------ service/cardholder/logic.go | 66 ++++++++++++++++++++++++++++-------------------------------------- service/constd/code-msg.go | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ service/constd/games.go | 5 +++++ service/constd/index.go | 125 ----------------------------------------------------------------------------------------------------------------------------- service/constd/mysql.go | 6 +----- service/game-record/record.go | 16 ---------------- util/utmysql/index.go | 55 ------------------------------------------------------- util/utmysql/query.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 27 files changed, 795 insertions(+), 474 deletions(-) create mode 100644 conf/conf/db/s_cardholder_data_.sql create mode 100644 conf/conf/db/s_cardholder_record_getnew_.sql create mode 100644 conf/conf/db/s_cardholder_record_open_.sql create mode 100644 conf/conf/db/s_cardholder_record_rewardalbum_.sql create mode 100644 conf/conf/db/s_cardholder_record_rewardround_.sql create mode 100644 dto/dto.go create mode 100644 dto/interface.go create mode 100644 dto/player-data.go create mode 100644 models/cardholder.go delete mode 100644 models/ht-cardholder.go create mode 100644 service/cardholder/config-load.go delete mode 100644 service/cardholder/configs.go create mode 100644 service/constd/code-msg.go create mode 100644 service/constd/games.go delete mode 100644 service/constd/index.go delete mode 100644 service/game-record/record.go delete mode 100644 util/utmysql/index.go create mode 100644 util/utmysql/query.go diff --git a/conf/conf/db/s_cardholder_data_.sql b/conf/conf/db/s_cardholder_data_.sql new file mode 100644 index 0000000..96a4509 --- /dev/null +++ b/conf/conf/db/s_cardholder_data_.sql @@ -0,0 +1,8 @@ +CREATE TABLE `{tablename}` ( + `uid` bigint(20) NOT NULL COMMENT '玩家唯一ID', + `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID', + `details_text` longtext CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL COMMENT '活动详情封装', + `create_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建时间戳', + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳', + PRIMARY KEY (`uid`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '卡包卡牌数据'; \ No newline at end of file diff --git a/conf/conf/db/s_cardholder_record_getnew_.sql b/conf/conf/db/s_cardholder_record_getnew_.sql new file mode 100644 index 0000000..8a50c20 --- /dev/null +++ b/conf/conf/db/s_cardholder_record_getnew_.sql @@ -0,0 +1,11 @@ +CREATE TABLE `{tablename}` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID', + `uid` bigint(20) NOT NULL DEFAULT 0 COMMENT '玩家唯一ID', + `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID', + `round` int(11) NOT NULL DEFAULT 0 COMMENT '活动轮次', + `cardholder_id` int(11) NOT NULL DEFAULT 0 COMMENT '卡包ID', + `cardholder_count` int(11) NOT NULL DEFAULT 0 COMMENT '卡包数量', + `create_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建时间戳', + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '开卡包活动日志获得卡包'; \ No newline at end of file diff --git a/conf/conf/db/s_cardholder_record_open_.sql b/conf/conf/db/s_cardholder_record_open_.sql new file mode 100644 index 0000000..50156f3 --- /dev/null +++ b/conf/conf/db/s_cardholder_record_open_.sql @@ -0,0 +1,11 @@ +CREATE TABLE `{tablename}` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID', + `uid` bigint(20) NOT NULL DEFAULT 0 COMMENT '玩家唯一ID', + `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID', + `round` int(11) NOT NULL DEFAULT 0 COMMENT '活动轮次', + `cardholder_id` int(11) NOT NULL DEFAULT 0 COMMENT '卡包ID', + `card_list` varchar(255) NOT NULL DEFAULT '' COMMENT '开卡内容', + `create_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建时间戳', + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '开卡包活动日志开卡包'; \ No newline at end of file diff --git a/conf/conf/db/s_cardholder_record_rewardalbum_.sql b/conf/conf/db/s_cardholder_record_rewardalbum_.sql new file mode 100644 index 0000000..f5e89b8 --- /dev/null +++ b/conf/conf/db/s_cardholder_record_rewardalbum_.sql @@ -0,0 +1,11 @@ +CREATE TABLE `{tablename}` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID', + `uid` bigint(20) NOT NULL DEFAULT 0 COMMENT '玩家唯一ID', + `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID', + `round` int(11) NOT NULL DEFAULT 0 COMMENT '活动轮次', + `album_id` int(11) NOT NULL DEFAULT 0 COMMENT '卡组ID', + `award` varchar(255) NOT NULL DEFAULT '' COMMENT '奖励内容', + `create_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建时间戳', + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '开卡包活动日志领取卡组奖励'; \ No newline at end of file diff --git a/conf/conf/db/s_cardholder_record_rewardround_.sql b/conf/conf/db/s_cardholder_record_rewardround_.sql new file mode 100644 index 0000000..904ea12 --- /dev/null +++ b/conf/conf/db/s_cardholder_record_rewardround_.sql @@ -0,0 +1,10 @@ +CREATE TABLE `{tablename}` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID', + `uid` bigint(20) NOT NULL DEFAULT 0 COMMENT '玩家唯一ID', + `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID', + `round` int(11) NOT NULL DEFAULT 0 COMMENT '活动轮次', + `award` varchar(255) NOT NULL DEFAULT '' COMMENT '奖励内容', + `create_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建时间戳', + `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '开卡包活动日志领取轮次奖励'; \ No newline at end of file diff --git a/conf/prod.conf b/conf/prod.conf index 3cb2490..1c61355 100644 --- a/conf/prod.conf +++ b/conf/prod.conf @@ -1,5 +1,5 @@ appname = api-game -httpport = 60080 +httpport = 39080 runmode = prod autorender = false copyrequestbody = true diff --git a/dto/cardholder-record.go b/dto/cardholder-record.go index a55ac30..4899215 100644 --- a/dto/cardholder-record.go +++ b/dto/cardholder-record.go @@ -3,6 +3,7 @@ package dto import ( "apigame/service/constd" "apigame/util/util-lx/lxtime" + "fmt" ) // CardHolderRecordGetNew 开卡包活动日志获得卡包 @@ -17,8 +18,24 @@ type CardHolderRecordGetNew struct { UpdateTime int64 // 修改时间戳 } -func (d *CardHolderRecordGetNew) TableName() string { - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_GETNEW + constd.GAME_ID_HT +func (d *CardHolderRecordGetNew) TableName(gameId string) string { + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_GETNEW + gameId +} + +func (d *CardHolderRecordGetNew) CreateSqlPath() string { + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_GETNEW +} + +func (d *CardHolderRecordGetNew) SqlPairs() map[string]string { + m := make(map[string]string) + m["uid"] = fmt.Sprintf("%d", d.Uid) + m["activity_id"] = fmt.Sprintf("%d", d.ActivityId) + m["round"] = fmt.Sprintf("%d", d.Round) + m["cardholder_id"] = fmt.Sprintf("%d", d.CardholderId) + m["cardholder_count"] = fmt.Sprintf("%d", d.CardholderCount) + m["create_time"] = fmt.Sprintf("%d", d.CreateTime) + m["update_time"] = fmt.Sprintf("%d", d.UpdateTime) + return m } func NewCardHolderRecordGetNew(uid int64, activityId int64, round int, @@ -47,8 +64,24 @@ type CardHolderRecordOpen struct { UpdateTime int64 // 修改时间戳 } -func (d *CardHolderRecordOpen) TableName() string { - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN + constd.GAME_ID_HT +func (d *CardHolderRecordOpen) TableName(gameId string) string { + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN + gameId +} + +func (d *CardHolderRecordOpen) CreateSqlPath() string { + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN +} + +func (d *CardHolderRecordOpen) SqlPairs() map[string]string { + m := make(map[string]string) + m["uid"] = fmt.Sprintf("%d", d.Uid) + m["activity_id"] = fmt.Sprintf("%d", d.ActivityId) + m["round"] = fmt.Sprintf("%d", d.Round) + m["cardholder_id"] = fmt.Sprintf("%d", d.CardholderId) + m["card_list"] = fmt.Sprintf("'%s'", d.CardList) + m["create_time"] = fmt.Sprintf("%d", d.CreateTime) + m["update_time"] = fmt.Sprintf("%d", d.UpdateTime) + return m } func NewCardHolderRecordOpen(uid int64, activityId int64, round int, @@ -77,8 +110,24 @@ type CardHolderRecordRewardAlbum struct { UpdateTime int64 // 修改时间戳 } -func (d *CardHolderRecordRewardAlbum) TableName() string { - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM + constd.GAME_ID_HT +func (d *CardHolderRecordRewardAlbum) TableName(gameId string) string { + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM + gameId +} + +func (d *CardHolderRecordRewardAlbum) CreateSqlPath() string { + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM +} + +func (d *CardHolderRecordRewardAlbum) SqlPairs() map[string]string { + m := make(map[string]string) + m["uid"] = fmt.Sprintf("%d", d.Uid) + m["activity_id"] = fmt.Sprintf("%d", d.ActivityId) + m["round"] = fmt.Sprintf("%d", d.Round) + m["album_id"] = fmt.Sprintf("%d", d.AlbumId) + m["award"] = fmt.Sprintf("'%s'", d.Award) + m["create_time"] = fmt.Sprintf("%d", d.CreateTime) + m["update_time"] = fmt.Sprintf("%d", d.UpdateTime) + return m } func NewCardHolderRecordRewardAlbum(uid int64, activityId int64, round int, @@ -95,7 +144,7 @@ func NewCardHolderRecordRewardAlbum(uid int64, activityId int64, round int, } } -// CardHolderRecordRewardRound 开卡包活动日志领取卡组奖励 +// CardHolderRecordRewardRound 开卡包活动日志领取轮次奖励 type CardHolderRecordRewardRound struct { Id int64 `orm:"auto"` // 日志ID Uid int64 // 玩家唯一ID @@ -106,8 +155,23 @@ type CardHolderRecordRewardRound struct { UpdateTime int64 // 修改时间戳 } -func (d *CardHolderRecordRewardRound) TableName() string { - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND + constd.GAME_ID_HT +func (d *CardHolderRecordRewardRound) TableName(gameId string) string { + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND + gameId +} + +func (d *CardHolderRecordRewardRound) CreateSqlPath() string { + return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND +} + +func (d *CardHolderRecordRewardRound) SqlPairs() map[string]string { + m := make(map[string]string) + m["uid"] = fmt.Sprintf("%d", d.Uid) + m["activity_id"] = fmt.Sprintf("%d", d.ActivityId) + m["round"] = fmt.Sprintf("%d", d.Round) + m["award"] = fmt.Sprintf("'%s'", d.Award) + m["create_time"] = fmt.Sprintf("%d", d.CreateTime) + m["update_time"] = fmt.Sprintf("%d", d.UpdateTime) + return m } func NewCardHolderRecordRewardRound(uid int64, activityId int64, round int, diff --git a/dto/cardholder.go b/dto/cardholder.go index 8d1a51d..a75c475 100644 --- a/dto/cardholder.go +++ b/dto/cardholder.go @@ -4,29 +4,33 @@ import ( "apigame/models" "apigame/service/constd" "apigame/util/util-lx/lxalilog" + "apigame/util/util-lx/lxtime" "encoding/json" + "fmt" "github.com/astaxie/beego/orm" ) func InitCardholder() { - // register model - orm.RegisterModel(new(CardHolderData)) - orm.RegisterModel(new(CardHolderRecordGetNew)) - orm.RegisterModel(new(CardHolderRecordOpen)) - orm.RegisterModel(new(CardHolderRecordRewardAlbum)) - orm.RegisterModel(new(CardHolderRecordRewardRound)) - // create table - orm.RunSyncdb("default", false, true) + o := orm.NewOrm() + for _, gameId := range constd.GameListCardHolder { + CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderData), gameId) + + CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordGetNew), gameId) + CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordOpen), gameId) + CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordRewardAlbum), gameId) + CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordRewardRound), gameId) + } + } // CardHolderData 卡牌活动持久数据 type CardHolderData struct { - Uid int64 `orm:"pk"` // 玩家唯一ID + Uid int64 // 玩家唯一ID ActivityId int64 // 活动ID - Details *CardHolderDataDetails `orm:"-"` // 活动详情 - DetailsText string `orm:"type(text)"` // 活动详情封装 + Details *CardHolderDataDetails // 活动详情 + DetailsText string // 活动详情封装 CreateTime int64 // 创建时间戳 UpdateTime int64 // 修改时间戳 } @@ -42,10 +46,12 @@ type CardHolderDataDetails struct { } func NewCardHolderData(uid int64) *CardHolderData { - return &CardHolderData{ + d := &CardHolderData{ Uid: uid, Details: NewCardHolderDataDetails(), } + d.Encode() + return d } func NewCardHolderDataDetails() *CardHolderDataDetails { @@ -59,8 +65,26 @@ func NewCardHolderDataDetails() *CardHolderDataDetails { } } -func (d *CardHolderData) TableName() string { - return constd.MYSQL_TABLE_S_CARDHOLDER_DATA + constd.GAME_ID_HT +func (d *CardHolderData) TableName(gameId string) string { + return constd.MYSQL_TABLE_S_CARDHOLDER_DATA + gameId +} + +func (d *CardHolderData) CreateSqlPath() string { + return constd.MYSQL_TABLE_S_CARDHOLDER_DATA +} + +func (d *CardHolderData) SqlPairs() map[string]string { + m := make(map[string]string) + m["activity_id"] = fmt.Sprintf("%d", d.ActivityId) + m["details_text"] = fmt.Sprintf("'%s'", d.DetailsText) + m["create_time"] = fmt.Sprintf("%d", d.CreateTime) + m["update_time"] = fmt.Sprintf("%d", d.UpdateTime) + return m +} + +func (d *CardHolderData) Init(uid int64) { + d.Uid = uid + d.CreateTime = lxtime.NowUninx() } // Encode 打包数据 diff --git a/dto/dto.go b/dto/dto.go new file mode 100644 index 0000000..66f561f --- /dev/null +++ b/dto/dto.go @@ -0,0 +1,46 @@ +package dto + +import ( + "github.com/astaxie/beego/logs" + "github.com/astaxie/beego/orm" + "io/ioutil" + "os" + "strings" +) + +func CreateTable(o orm.Ormer, dbName string, tb ITableData, gameId string) (err error) { + + o.Using(dbName) + + createSqlPath := "./conf/conf/db/" + tb.CreateSqlPath() + ".sql" + createSql, err := readFileSql(createSqlPath, tb.TableName(gameId)) + if err != nil { + logs.Error(err) + return + } + + _, err = o.Raw(createSql).Exec() + if err != nil { + //logs.Error(err) + return + } + + return +} + +func readFileSql(createSqlPath, tableName string) (sql string, err error) { + filePtr, err := os.Open(createSqlPath) + if err != nil { + return + } + defer filePtr.Close() + + by, err := ioutil.ReadAll(filePtr) + if err != nil { + return + } + + sql = strings.Replace(string(by), "{tablename}", tableName, -1) + + return +} diff --git a/dto/interface.go b/dto/interface.go new file mode 100644 index 0000000..b285a65 --- /dev/null +++ b/dto/interface.go @@ -0,0 +1,26 @@ +package dto + +// ITableData 数据库表 +type ITableData interface { + // TableName 表名 后缀是 gameId + TableName(gameId string) string + // CreateSqlPath 创建sql位置 + CreateSqlPath() string +} + +type IRecordData interface { + // TableName 表名 后缀是 gameId + TableName(gameId string) string + // SqlPairs 数据键值对 + SqlPairs() map[string]string +} + +// IPlayerData 玩家数据表 +type IPlayerData interface { + // TableName 表名 后缀是 gameId + TableName(gameId string) string + // SqlPairs 数据键值对 + SqlPairs() map[string]string + // Init 新建 + Init(uid int64) +} diff --git a/dto/player-data.go b/dto/player-data.go new file mode 100644 index 0000000..3498e98 --- /dev/null +++ b/dto/player-data.go @@ -0,0 +1,67 @@ +package dto + +import ( + "apigame/service/constd" + "apigame/util/util-lx/lxalilog" + "apigame/util/utmysql" + "fmt" + "github.com/astaxie/beego/orm" +) + +func LoadPlayerData(gameId string, uid int64, data IPlayerData) (has bool, err error) { + tableName := data.TableName(gameId) + sql := fmt.Sprintf("select * from %s where uid=%d limit 1", tableName, uid) + has, err = utmysql.FindOneSql(constd.MYSQL_MERGECOMMON, sql, data) + if err != nil { + lxalilog.Errors(err, sql, gameId, uid) + return + } + // 档案不存在 新建 + if !has { + data.Init(uid) + CreatePlayerData(gameId, uid, data) + } + return +} + +func CreatePlayerData(gameId string, uid int64, data IPlayerData) { + text1 := "" + text2 := "" + for s, s2 := range data.SqlPairs() { + text1 += "," + s + text2 += "," + s2 + } + sql := fmt.Sprintf("insert into %s (uid%s) value (%d%s)", + data.TableName(gameId), text1, uid, text2) + + o := orm.NewOrm() + o.Using(constd.MYSQL_MERGECOMMON) + + _, err := o.Raw(sql).Exec() + if err != nil { + lxalilog.Errors(err, sql, gameId, uid) + return + } +} + +func SavePlayerData(gameId string, uid int64, data IPlayerData) { + text := "" + indexPairs := 0 + for s, s2 := range data.SqlPairs() { + if indexPairs != 0 { + text += "," + } + text += fmt.Sprintf("%s=%s", s, s2) + indexPairs++ + } + sql := fmt.Sprintf("update %s set %s where uid=%d", data.TableName(gameId), text, uid) + + o := orm.NewOrm() + o.Using(constd.MYSQL_MERGECOMMON) + + _, err := o.Raw(sql).Exec() + if err != nil { + lxalilog.Errors(err, sql, gameId, uid) + return + } +} diff --git a/dto/record.go b/dto/record.go index d80daa0..bae1ec6 100644 --- a/dto/record.go +++ b/dto/record.go @@ -1,5 +1,34 @@ package dto -type RecordMysql interface { - TableName() string +import ( + "apigame/service/constd" + "apigame/util/util-lx/lxalilog" + "fmt" + "github.com/astaxie/beego/orm" +) + +func SaveRecord(gameId string, data IRecordData) { + text1 := "" + text2 := "" + indexPairs := 0 + for s, s2 := range data.SqlPairs() { + if indexPairs != 0 { + text1 += "," + text2 += "," + } + text1 += s + text2 += s2 + indexPairs++ + } + sql := fmt.Sprintf("insert into %s (%s) value (%s)", + data.TableName(gameId), text1, text2) + + o := orm.NewOrm() + o.Using(constd.MYSQL_MERGECOMMON) + + _, err := o.Raw(sql).Exec() + if err != nil { + lxalilog.Errors(err, sql, gameId) + return + } } diff --git a/models/cardholder.go b/models/cardholder.go new file mode 100644 index 0000000..995a644 --- /dev/null +++ b/models/cardholder.go @@ -0,0 +1,73 @@ +package models + +// 海滩卡包 + +// CardHolderInfo 卡包信息 +type CardHolderInfo struct { + Cardholder map[int]int `form:"cardholder" json:"cardholder"` // 卡包数量 k=卡包ID v=卡包数量 + Cards map[int]int `form:"cards" json:"cards"` // 每张卡集了多少张 k=卡牌ID v=数量 + Album map[string]int `form:"album" json:"album"` // 卡组奖励领取 k=卡组ID v=数量 + Round int `form:"round" json:"round"` // 卡册当前轮次 +} + +// ReqCardHolderInfo 请求 卡包信息 +type ReqCardHolderInfo struct { + BaseLoginInfo + BaseSign +} + +// RspCardHolderInfo 返回 卡包信息 +type RspCardHolderInfo struct { + CardHolderInfo +} + +// ReqCardHolderGetNew 请求 获取卡包 +type ReqCardHolderGetNew struct { + BaseLoginInfo + BaseSign + Id int `form:"id" json:"id" valid:"Required"` // 卡包ID + Count int `form:"count" json:"count" valid:"Required"` // 卡包数量 +} + +// RspCardHolderGetNew 返回 获取卡包 +type RspCardHolderGetNew struct { + CardHolderInfo +} + +// ReqCardHolderOpen 请求 打开卡包 +type ReqCardHolderOpen struct { + BaseLoginInfo + BaseSign + Id int `form:"id" json:"id" valid:"Required"` // 卡包ID +} + +// RspCardHolderOpen 返回 打开卡包 +type RspCardHolderOpen struct { + CardHolderInfo + NewCards []int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表 +} + +// ReqCardHolderGetRewardAlbum 请求 领取卡组奖励 +type ReqCardHolderGetRewardAlbum struct { + BaseLoginInfo + BaseSign + Id int `form:"id" json:"id" valid:"Required"` // 卡组ID +} + +// RspCardHolderGetRewardAlbum 返回 领取卡组奖励 +type RspCardHolderGetRewardAlbum struct { + CardHolderInfo + Award string `form:"award" json:"award"` // 奖励字符串 +} + +// ReqCardHolderGetRewardRound 请求 领取轮次奖励 +type ReqCardHolderGetRewardRound struct { + BaseLoginInfo + BaseSign +} + +// RspCardHolderGetRewardRound 返回 领取轮次奖励 +type RspCardHolderGetRewardRound struct { + CardHolderInfo + Award string `form:"award" json:"award"` // 奖励字符串 +} diff --git a/models/ht-cardholder.go b/models/ht-cardholder.go deleted file mode 100644 index 995a644..0000000 --- a/models/ht-cardholder.go +++ /dev/null @@ -1,73 +0,0 @@ -package models - -// 海滩卡包 - -// CardHolderInfo 卡包信息 -type CardHolderInfo struct { - Cardholder map[int]int `form:"cardholder" json:"cardholder"` // 卡包数量 k=卡包ID v=卡包数量 - Cards map[int]int `form:"cards" json:"cards"` // 每张卡集了多少张 k=卡牌ID v=数量 - Album map[string]int `form:"album" json:"album"` // 卡组奖励领取 k=卡组ID v=数量 - Round int `form:"round" json:"round"` // 卡册当前轮次 -} - -// ReqCardHolderInfo 请求 卡包信息 -type ReqCardHolderInfo struct { - BaseLoginInfo - BaseSign -} - -// RspCardHolderInfo 返回 卡包信息 -type RspCardHolderInfo struct { - CardHolderInfo -} - -// ReqCardHolderGetNew 请求 获取卡包 -type ReqCardHolderGetNew struct { - BaseLoginInfo - BaseSign - Id int `form:"id" json:"id" valid:"Required"` // 卡包ID - Count int `form:"count" json:"count" valid:"Required"` // 卡包数量 -} - -// RspCardHolderGetNew 返回 获取卡包 -type RspCardHolderGetNew struct { - CardHolderInfo -} - -// ReqCardHolderOpen 请求 打开卡包 -type ReqCardHolderOpen struct { - BaseLoginInfo - BaseSign - Id int `form:"id" json:"id" valid:"Required"` // 卡包ID -} - -// RspCardHolderOpen 返回 打开卡包 -type RspCardHolderOpen struct { - CardHolderInfo - NewCards []int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表 -} - -// ReqCardHolderGetRewardAlbum 请求 领取卡组奖励 -type ReqCardHolderGetRewardAlbum struct { - BaseLoginInfo - BaseSign - Id int `form:"id" json:"id" valid:"Required"` // 卡组ID -} - -// RspCardHolderGetRewardAlbum 返回 领取卡组奖励 -type RspCardHolderGetRewardAlbum struct { - CardHolderInfo - Award string `form:"award" json:"award"` // 奖励字符串 -} - -// ReqCardHolderGetRewardRound 请求 领取轮次奖励 -type ReqCardHolderGetRewardRound struct { - BaseLoginInfo - BaseSign -} - -// RspCardHolderGetRewardRound 返回 领取轮次奖励 -type RspCardHolderGetRewardRound struct { - CardHolderInfo - Award string `form:"award" json:"award"` // 奖励字符串 -} diff --git a/service/cardholder/config-load.go b/service/cardholder/config-load.go new file mode 100644 index 0000000..23ef778 --- /dev/null +++ b/service/cardholder/config-load.go @@ -0,0 +1,85 @@ +package cardholder + +import ( + "apigame/service/constd" + "apigame/util/util-lx/lxalilog" + "apigame/util/utmysql" + "fmt" + "github.com/astaxie/beego/logs" +) + +// Init 初始化 +func Init() { + + NewConfigs() + + TryUpdateConfigs() +} + +// TryUpdateConfigs 尝试更新配置表 +func TryUpdateConfigs() { + LoadConfigs() +} + +// LoadConfigs 读取mysql配置 +func LoadConfigs() { + for _, gameId := range constd.GameListCardHolder { + LoadConfig(gameId) + } +} + +// TryUpdateConfig 尝试更新配置表 +func TryUpdateConfig(gameId string) (config *CardActivityConfig, has bool) { + LoadConfig(gameId) + return GetConfig(gameId) +} + +// LoadConfig 读取mysql配置 +func LoadConfig(gameId string) { + configTableName := constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG + gameId + // 找到当前开放的活动 + configOpen := CardActivityUpdateConfig{Id: 0} + { + conf := make([]CardActivityUpdateConfig, 0) + sql := fmt.Sprintf("select id,status,update_time from %s", configTableName) + err := utmysql.FindSql(constd.MYSQL_MERGECONFIG, sql, &conf) + if err != nil { + lxalilog.Errors(err, sql, gameId) + return + } + for _, config := range conf { + if config.Status != 0 { + configOpen = config + continue + } + } + fmt.Println(configOpen) + } + // 没有开放的活动 + if configOpen.Id == 0 { + return + } + // 判断是否需要更新 + needUpdate := false + configOld, has := GetConfig(gameId) + if has { + if configOpen.Id != configOld.Raw.Id || configOpen.UpdateTime != configOld.Raw.UpdateTime { + needUpdate = true + } + } else { + needUpdate = true + } + // 更新数据 + if needUpdate { + logs.Debug("__________________尝试更新活动条目ID:", configOpen.Id) + confNew := CardActivityConfigRaw{} + sql := fmt.Sprintf("select * from %s where id=%d limit 1", configTableName, configOpen.Id) + _, err := utmysql.FindOneSql(constd.MYSQL_MERGECONFIG, sql, &confNew) + if err != nil { + lxalilog.Errors(err, sql, gameId, configOpen.Id) + return + } + logs.Debug("__________________更新活动条目ID:", confNew.Id) + ConfigDecode(gameId, &confNew) + } +} diff --git a/service/cardholder/config-registry.go b/service/cardholder/config-registry.go index 30e4322..1872018 100644 --- a/service/cardholder/config-registry.go +++ b/service/cardholder/config-registry.go @@ -1,7 +1,6 @@ package cardholder import ( - "apigame/service/constd" "apigame/util/util-lx/lxalilog" "encoding/json" "errors" @@ -10,41 +9,45 @@ import ( ) var ( - ConfigRaws CardActivityConfigRaw // 活动配置 原始数据 - Config CardActivityConfig // 活动配置 分析后数据 + Configs map[string]*CardActivityConfig // 配置列表 k=GameId v=配置 ) func NewConfigs() { - ConfigRaws = CardActivityConfigRaw{} - Config = CardActivityConfig{} + Configs = make(map[string]*CardActivityConfig) +} + +func GetConfig(gameId string) (config *CardActivityConfig, has bool) { + config, has = Configs[gameId] + return } // ConfigDecode 解析配置原始数据 -func ConfigDecode() { - Config = CardActivityConfig{ - Raw: ConfigRaws, - Id: ConfigRaws.Id, +func ConfigDecode(gameId string, configRaw *CardActivityConfigRaw) { + Config := &CardActivityConfig{ + Raw: configRaw, + GameId: gameId, + Id: configRaw.Id, Awards: make(map[string]string), AlbumConfig: make(map[string]AlbumConfig), CardConfig: make(map[int]CardConfig), - CardholderConfig: make(map[string]CardholderConfig), + CardholderConfig: make(map[string]OpenCardholderConfig), NormalCardStarConfig: make(map[string]NormalCardStarConfig), CardSequenceConfig: make(map[string]CardSequenceConfig), } // 解析奖励 { - err := json.Unmarshal([]byte(ConfigRaws.Awards), &Config.Awards) + err := json.Unmarshal([]byte(configRaw.Awards), &Config.Awards) if err != nil { - lxalilog.Errors(err, ConfigRaws.Awards, constd.GAME_ID_HT, ConfigRaws.Id) + lxalilog.Errors(err, configRaw.Awards, gameId, configRaw.Id) return } } // 卡组配置 { configs := make([]AlbumConfig, 0) - err := json.Unmarshal([]byte(ConfigRaws.AlbumConfig), &configs) + err := json.Unmarshal([]byte(configRaw.AlbumConfig), &configs) if err != nil { - lxalilog.Errors(err, ConfigRaws.AlbumConfig, constd.GAME_ID_HT, ConfigRaws.Id) + lxalilog.Errors(err, configRaw.AlbumConfig, gameId, configRaw.Id) return } for _, i2 := range configs { @@ -54,9 +57,9 @@ func ConfigDecode() { // 卡牌配置 { configs := make([]CardConfig, 0) - err := json.Unmarshal([]byte(ConfigRaws.CardConfig), &configs) + err := json.Unmarshal([]byte(configRaw.CardConfig), &configs) if err != nil { - lxalilog.Errors(err, ConfigRaws.CardConfig, constd.GAME_ID_HT, ConfigRaws.Id) + lxalilog.Errors(err, configRaw.CardConfig, gameId, configRaw.Id) return } for _, i2 := range configs { @@ -65,10 +68,10 @@ func ConfigDecode() { } // 卡包开卡规则 { - configs := make([]CardholderConfig, 0) - err := json.Unmarshal([]byte(ConfigRaws.CardHolderConfig), &configs) + configs := make([]OpenCardholderConfig, 0) + err := json.Unmarshal([]byte(configRaw.CardHolderConfig), &configs) if err != nil { - lxalilog.Errors(err, ConfigRaws.CardHolderConfig, constd.GAME_ID_HT, ConfigRaws.Id) + lxalilog.Errors(err, configRaw.CardHolderConfig, gameId, configRaw.Id) return } for _, i2 := range configs { @@ -78,9 +81,9 @@ func ConfigDecode() { // 卡片星级配置 { configs := make([]NormalCardStarConfig, 0) - err := json.Unmarshal([]byte(ConfigRaws.NormalCardStarSequence), &configs) + err := json.Unmarshal([]byte(configRaw.NormalCardStarSequence), &configs) if err != nil { - lxalilog.Errors(err, ConfigRaws.NormalCardStarSequence, constd.GAME_ID_HT, ConfigRaws.Id) + lxalilog.Errors(err, configRaw.NormalCardStarSequence, gameId, configRaw.Id) return } for _, i2 := range configs { @@ -92,9 +95,9 @@ func ConfigDecode() { // 卡片星级对应卡牌配置 { configs := make([]CardSequenceConfig, 0) - err := json.Unmarshal([]byte(ConfigRaws.CardSequenceConfig), &configs) + err := json.Unmarshal([]byte(configRaw.CardSequenceConfig), &configs) if err != nil { - lxalilog.Errors(err, ConfigRaws.CardSequenceConfig, constd.GAME_ID_HT, ConfigRaws.Id) + lxalilog.Errors(err, configRaw.CardSequenceConfig, gameId, configRaw.Id) return } for _, i2 := range configs { @@ -103,6 +106,7 @@ func ConfigDecode() { Config.CardSequenceConfig[combineId] = i2 } } + Configs[gameId] = Config } // CombineIdSequenceIdCohort 组合ID k=ID_用户序列_用户分组 @@ -111,9 +115,9 @@ func CombineIdSequenceIdCohort(id, sequenceId, cohort string) string { } // FindNormalCardStarConfig 查找配置 非保底卡星级ID -func FindNormalCardStarConfig(id, sequenceId, cohort string) (conf NormalCardStarConfig, has bool) { +func (c *CardActivityConfig) FindNormalCardStarConfig(id, sequenceId, cohort string) (conf NormalCardStarConfig, has bool) { combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort) - conf, has = Config.NormalCardStarConfig[combineId] + conf, has = c.NormalCardStarConfig[combineId] if !has { lxalilog.Errors(errors.New("ht_cardholder NormalCardStarConfig error"), id, sequenceId, cohort) } @@ -121,9 +125,9 @@ func FindNormalCardStarConfig(id, sequenceId, cohort string) (conf NormalCardSta } // FindCardSequenceConfig 查找配置 星级ID对应的卡片 -func FindCardSequenceConfig(id, sequenceId, cohort string) (conf CardSequenceConfig, has bool) { +func (c *CardActivityConfig) FindCardSequenceConfig(id, sequenceId, cohort string) (conf CardSequenceConfig, has bool) { combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort) - conf, has = Config.CardSequenceConfig[combineId] + conf, has = c.CardSequenceConfig[combineId] if !has { lxalilog.Errors(errors.New("ht_cardholder CardSequenceConfig error"), id, sequenceId, cohort) } diff --git a/service/cardholder/config.go b/service/cardholder/config.go index fe0f78d..f6c2b1e 100644 --- a/service/cardholder/config.go +++ b/service/cardholder/config.go @@ -1,7 +1,5 @@ package cardholder -import "apigame/service/constd" - // CardActivityUpdateConfig 卡牌活动更新配置 type CardActivityUpdateConfig struct { Id int64 // ID @@ -11,20 +9,17 @@ type CardActivityUpdateConfig struct { // CardActivityConfig 卡牌活动配置 分析后数据 type CardActivityConfig struct { - Raw CardActivityConfigRaw + Raw *CardActivityConfigRaw + GameId string // 所属游戏ID Id int64 // ID Awards map[string]string // 奖励配置 AlbumConfig map[string]AlbumConfig // 卡组配置 CardConfig map[int]CardConfig // 卡牌配置 - CardholderConfig map[string]CardholderConfig // 卡包开卡规则 + CardholderConfig map[string]OpenCardholderConfig // 卡包开卡规则 NormalCardStarConfig map[string]NormalCardStarConfig // k=ID_用户序列_用户分组 卡片星级配置 CardSequenceConfig map[string]CardSequenceConfig // k=ID_用户序列_用户分组 卡片星级对应卡牌配置 } -func (c *CardActivityConfig) TableName() string { - return constd.MYSQL_TABLE_S_CARD_ACTIVITY + constd.GAME_ID_HT -} - // CardActivityConfigRaw 卡牌活动配置 原始数据 type CardActivityConfigRaw struct { Id int64 // ID @@ -60,8 +55,8 @@ type CardConfig struct { Star int `json:"star"` // 星级 } -// CardholderConfig 卡包开卡规则表 -type CardholderConfig struct { +// OpenCardholderConfig 卡包开卡规则表 +type OpenCardholderConfig struct { Id string `json:"id"` // ID IsGoldCardholder int `json:"is_gold_card_holder"` // 是否是金卡包 IsNew int `json:"is_new"` // 是否是新卡包 diff --git a/service/cardholder/configs.go b/service/cardholder/configs.go deleted file mode 100644 index 2c57b52..0000000 --- a/service/cardholder/configs.go +++ /dev/null @@ -1,69 +0,0 @@ -package cardholder - -import ( - "apigame/service/constd" - "apigame/util/util-lx/lxalilog" - "apigame/util/utmysql" - "fmt" - "github.com/astaxie/beego/logs" -) - -// Init 初始化 -func Init() { - - NewConfigs() - - TryUpdateConfigs() - - //DumpConfigs() -} - -// TryUpdateConfigs 尝试更新配置表 -func TryUpdateConfigs() { - LoadConfigs() -} - -// LoadConfigs 读取mysql配置 -func LoadConfigs() { - configTableName := new(CardActivityConfig).TableName() - // 找到当前开放的活动 - configOpen := CardActivityUpdateConfig{Id: 0} - { - conf := make([]CardActivityUpdateConfig, 0) - sql := fmt.Sprintf("select id,status,update_time from %s", configTableName) - err := utmysql.FindSql(constd.MYSQL_MERGECONFIG, sql, &conf) - if err != nil { - lxalilog.Errors(err, sql, constd.GAME_ID_HT) - return - } - for _, config := range conf { - if config.Status != 0 { - configOpen = config - continue - } - } - fmt.Println(configOpen) - } - // 没有开放的活动 - if configOpen.Id == 0 { - return - } - // 更新数据 - if configOpen.Id != Config.Raw.Id || configOpen.UpdateTime != Config.Raw.UpdateTime { - logs.Debug("__________________尝试更新活动条目ID:", configOpen.Id) - confNew := CardActivityConfigRaw{} - sql := fmt.Sprintf("select * from %s where id=%d limit 1", configTableName, configOpen.Id) - err := utmysql.FindOneSql(constd.MYSQL_MERGECONFIG, sql, &confNew) - if err != nil { - lxalilog.Errors(err, sql, constd.GAME_ID_HT, configOpen.Id) - return - } - logs.Debug("__________________更新活动条目ID:", confNew.Id) - ConfigRaws = confNew - ConfigDecode() - } -} - -func DumpConfigs() { - -} diff --git a/service/cardholder/handle.go b/service/cardholder/handle.go index 76bc8ad..f9df395 100644 --- a/service/cardholder/handle.go +++ b/service/cardholder/handle.go @@ -4,7 +4,6 @@ import ( "apigame/dto" "apigame/models" "apigame/service/constd" - game_record "apigame/service/game-record" "apigame/util/utjson" "apigame/util/uttype" "strconv" @@ -16,10 +15,14 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH code = constd.RECODE_OK // 尝试更新配置 - TryUpdateConfigs() + Config, hasConfig := TryUpdateConfig(req.GameID) + if !hasConfig { + code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR + return + } // 读取游戏数据 - gameData := LoadData(req.UID) + gameData := LoadData(req.GameID, req.UID, Config.Id) rsp.CardHolderInfo = gameData.GetInfo() @@ -32,10 +35,14 @@ func HandleGetNew(req *models.ReqCardHolderGetNew) (code string, rsp models.RspC code = constd.RECODE_OK // 尝试更新配置 - TryUpdateConfigs() + Config, hasConfig := TryUpdateConfig(req.GameID) + if !hasConfig { + code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR + return + } // 检查活动状态 - code = CheckStatus() + code = CheckStatus(Config) if code != constd.RECODE_OK { return } @@ -52,21 +59,21 @@ func HandleGetNew(req *models.ReqCardHolderGetNew) (code string, rsp models.RspC } // 读取游戏数据 - gameData := LoadData(req.UID) + gameData := LoadData(req.GameID, req.UID, Config.Id) // 检查游戏数据 轮次等 - code = CheckGameData(gameData) + code = CheckGameData(gameData, Config) if code != constd.RECODE_OK { return } gameData.Details.Cardholder[req.Id] += req.Count - SaveData(gameData) + SaveData(req.GameID, gameData) // 返回信息 rsp.CardHolderInfo = gameData.GetInfo() // 记录日志 - game_record.Save(dto.NewCardHolderRecordGetNew(gameData.Uid, Config.Id, gameData.Details.Round, + dto.SaveRecord(req.GameID, dto.NewCardHolderRecordGetNew(gameData.Uid, Config.Id, gameData.Details.Round, req.Id, req.Count)) return @@ -78,10 +85,14 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH code = constd.RECODE_OK // 尝试更新配置 - TryUpdateConfigs() + Config, hasConfig := TryUpdateConfig(req.GameID) + if !hasConfig { + code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR + return + } // 检查活动状态 - code = CheckStatus() + code = CheckStatus(Config) if code != constd.RECODE_OK { return } @@ -93,9 +104,9 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH } // 读取游戏数据 - gameData := LoadData(req.UID) + gameData := LoadData(req.GameID, req.UID, Config.Id) // 检查游戏数据 轮次等 - code = CheckGameData(gameData) + code = CheckGameData(gameData, Config) if code != constd.RECODE_OK { return } @@ -113,14 +124,14 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH //logs.Debug("wjwdbg 用户分组IDcohort:", cohort) if confCardholder.IsNew != 0 { // 如果是新卡包 按顺序查找数目最少的一张卡抽取 - cardId := GetNewCard(gameData) + cardId := GetNewCard(gameData, Config) //logs.Debug("wjwdbg 抽取新卡ID:", cardId) // 增加卡牌 gameData.Details.Cards[cardId] += 1 rsp.NewCards = append(rsp.NewCards, cardId) } else { getCardFunc := func(cardConfigId string) { - confCardSequence, hasCardSequence := FindCardSequenceConfig(cardConfigId, sequenceId, cohort) + confCardSequence, hasCardSequence := Config.FindCardSequenceConfig(cardConfigId, sequenceId, cohort) if hasCardSequence { combineId := CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort) scale := gameData.Details.CardSequenceScales[combineId] @@ -143,7 +154,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH // 非保底卡 if confCardholder.NormalCardNumber > 0 { count := confCardholder.NormalCardNumber - confNormalCardStar, hasNormalCardStar := FindNormalCardStarConfig(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort) + confNormalCardStar, hasNormalCardStar := Config.FindNormalCardStarConfig(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort) if hasNormalCardStar { combineIdStar := CombineIdSequenceIdCohort(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort) scaleStar := gameData.Details.StarSequenceScales[combineIdStar] @@ -164,10 +175,10 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH gameData.Details.Cardholder[req.Id] = countOld - 1 // 存档 - SaveData(gameData) + SaveData(req.GameID, gameData) // 记录日志 - game_record.Save(dto.NewCardHolderRecordOpen(gameData.Uid, Config.Id, gameData.Details.Round, + dto.SaveRecord(req.GameID, dto.NewCardHolderRecordOpen(gameData.Uid, Config.Id, gameData.Details.Round, req.Id, utjson.JsonString(rsp.NewCards))) //logs.Debug("wjwdbg 获取卡牌列表:", rsp.NewCards) @@ -186,10 +197,14 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string, code = constd.RECODE_OK // 尝试更新配置 - TryUpdateConfigs() + Config, hasConfig := TryUpdateConfig(req.GameID) + if !hasConfig { + code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR + return + } // 检查活动状态 - code = CheckStatus() + code = CheckStatus(Config) if code != constd.RECODE_OK { return } @@ -202,9 +217,9 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string, } // 读取游戏数据 - gameData := LoadData(req.UID) + gameData := LoadData(req.GameID, req.UID, Config.Id) // 检查游戏数据 轮次等 - code = CheckGameData(gameData) + code = CheckGameData(gameData, Config) if code != constd.RECODE_OK { return } @@ -227,7 +242,7 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string, } gameData.Details.Album[albumId] += 1 - SaveData(gameData) + SaveData(req.GameID, gameData) // 当前轮次 round := gameData.Details.Round @@ -238,7 +253,7 @@ func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string, rsp.CardHolderInfo = gameData.GetInfo() // 记录日志 - game_record.Save(dto.NewCardHolderRecordRewardAlbum(gameData.Uid, Config.Id, gameData.Details.Round, + dto.SaveRecord(req.GameID, dto.NewCardHolderRecordRewardAlbum(gameData.Uid, Config.Id, gameData.Details.Round, req.Id, rsp.Award)) return @@ -250,18 +265,22 @@ func HandleGetRewardRound(req *models.ReqCardHolderGetRewardRound) (code string, code = constd.RECODE_OK // 尝试更新配置 - TryUpdateConfigs() + Config, hasConfig := TryUpdateConfig(req.GameID) + if !hasConfig { + code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR + return + } // 检查活动状态 - code = CheckStatus() + code = CheckStatus(Config) if code != constd.RECODE_OK { return } // 读取游戏数据 - gameData := LoadData(req.UID) + gameData := LoadData(req.GameID, req.UID, Config.Id) // 检查游戏数据 轮次等 - code = CheckGameData(gameData) + code = CheckGameData(gameData, Config) if code != constd.RECODE_OK { return } @@ -282,12 +301,12 @@ func HandleGetRewardRound(req *models.ReqCardHolderGetRewardRound) (code string, rsp.Award = Config.Awards[uttype.IntToString(round)] // 记录日志 - game_record.Save(dto.NewCardHolderRecordRewardRound(gameData.Uid, Config.Id, gameData.Details.Round, + dto.SaveRecord(req.GameID, dto.NewCardHolderRecordRewardRound(gameData.Uid, Config.Id, gameData.Details.Round, rsp.Award)) // 处理轮次完成 HandleNextRound(gameData) - SaveData(gameData) + SaveData(req.GameID, gameData) // 返回信息 rsp.CardHolderInfo = gameData.GetInfo() diff --git a/service/cardholder/logic.go b/service/cardholder/logic.go index aa7723c..5b812ba 100644 --- a/service/cardholder/logic.go +++ b/service/cardholder/logic.go @@ -6,72 +6,62 @@ import ( "apigame/util/util-lx/lxalilog" "apigame/util/util-lx/lxtime" "apigame/util/uttype" - "github.com/astaxie/beego/orm" ) // SaveData 存储数据 -func SaveData(d *dto.CardHolderData) { +func SaveData(gameId string, d *dto.CardHolderData) { d.UpdateTime = lxtime.NowUninx() d.Encode() - o := orm.NewOrm() - o.Using(constd.MYSQL_DEFAULT) - if _, err := o.InsertOrUpdate(d); err != nil { - lxalilog.Errors(err, "ht_cardholder SaveData Error", d.Uid) - } + + dto.SavePlayerData(gameId, d.Uid, d) } -func _LoadData(uid int64) (d *dto.CardHolderData) { +func _LoadData(gameId string, uid int64) (d *dto.CardHolderData) { d = dto.NewCardHolderData(uid) - o := orm.NewOrm() - o.Using(constd.MYSQL_DEFAULT) - qs := o.QueryTable(d) - qs = qs.Filter("uid", uid) - count, err := qs.Count() - if count == 0 { - d.CreateTime = lxtime.NowUninx() - } else { - err = qs.One(d) - if err != nil { - lxalilog.Errors(err, "ht_cardholder LoadData Error", uid) - } else { - d.Details = dto.NewCardHolderDataDetails() - d.Decode() - } + + has, err := dto.LoadPlayerData(gameId, uid, d) + if err != nil { + lxalilog.Errors(err, "cardholder._LoadData", gameId, uid) + return + } + // 解析 + if has { + d.Decode() } return } // LoadData 获取数据 外部接口 -func LoadData(uid int64) (d *dto.CardHolderData) { - d = _LoadData(uid) +func LoadData(gameId string, uid int64, configId int64) (d *dto.CardHolderData) { + d = _LoadData(gameId, uid) // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新 - if Config.Id != 0 && - Config.Id != d.ActivityId { - d.ActivityId = Config.Id + if configId != 0 && + configId != d.ActivityId { + d.ActivityId = configId d.Details = dto.NewCardHolderDataDetails() - SaveData(d) + SaveData(gameId, d) } return } // CheckStatus 判断活动是否开启 -func CheckStatus() string { +func CheckStatus(conf *CardActivityConfig) string { sec := lxtime.NowUninx() - if Config.Id == 0 { + if conf.Id == 0 { return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR } - if sec < Config.Raw.StartTime { + if sec < conf.Raw.StartTime { return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR } - if sec > Config.Raw.EndTime { + if sec > conf.Raw.EndTime { return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR } return constd.RECODE_OK } // CheckGameData 检查游戏数据 轮次等 -func CheckGameData(d *dto.CardHolderData) string { - if d.Details.Round > Config.Raw.Round { +func CheckGameData(d *dto.CardHolderData, conf *CardActivityConfig) string { + if d.Details.Round > conf.Raw.Round { return constd.RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR } return constd.RECODE_OK @@ -113,13 +103,13 @@ func GetListFromArray(array []string, scale, count int) []string { } // GetNewCard 按顺序查找数目最少的一张卡抽取 -func GetNewCard(gameData *dto.CardHolderData) int { - if len(Config.CardConfig) < 1 { +func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int { + if len(conf.CardConfig) < 1 { return 0 } rate := int64(100000000) list := make([]int64, 0) - for id, _ := range Config.CardConfig { + for id, _ := range conf.CardConfig { count, _ := gameData.Details.Cards[id] index := int64(count)*rate + int64(id) list = append(list, index) diff --git a/service/constd/code-msg.go b/service/constd/code-msg.go new file mode 100644 index 0000000..7be0135 --- /dev/null +++ b/service/constd/code-msg.go @@ -0,0 +1,127 @@ +package constd + +import ( + "apigame/util/util-lx/lxalilog" + "apigame/util/util-lx/lxtime" +) + +const ( + RECODE_OK = "0" + RECODE_FALIED = "1000" + RECODE_UNKNOWERR = "1001" + RECODE_PARAMERROR = "1002" + RECODE_SIGNERROR = "1003" + RECODE_DATA_BUCUNZIA_ERROR = "1004" + RECODE_PARAMDECODE_ERROR = "1005" + RECODE_DATANOEXIST_ERROR = "1006" + RECODE_CREATEUID_ERROR = "1007" + RECODE_LOGINCHECK_ERROR = "1008" + RECODE_WEIXINAZIFU_ERROR = "1009" + RECODE_SDKMEMBER_ERROR = "1010" + RECODE_CAOZUOPINFAN_ERROR = "1011" + RECODE_REQUESTXIANLIU_ERROR = "1110" + RECODE_REQUESTTIME_ERROR = "1111" + + RECODE_MERGE_CONFIG_ERROR = "2000" + RECODE_MERGE_CFLQ_ERROR = "2001" + RECODE_MERGE_AZSXLQ_ERROR = "2002" + RECODE_MERGE_QXGMSP_ERROR = "2003" + RECODE_MERGE_MEMBERSHIP_QXCZZK_ERROR = "2010" + RECODE_MERGE_MEMBERSHIP_QXCZYK_ERROR = "2011" + RECODE_MERGE_MEMBERSHIP_QXCZ_ERROR = "2012" + RECODE_MERGE_MEMBERSHIP_BNCFLQ_ERROR = "2013" + + RECODE_MERGE_NOVICE_QXCZ_ERROR = "2021" + RECODE_MERGE_NOVICE_BNCFLQ_ERROR = "2032" + RECODE_MERGE_NOVICE_MYDDLQTJ_ERROR = "2033" + RECODE_MERGE_HUODONGWEIKAISHI_ERROR = "2040" + RECODE_MERGE_HUODONGYIJIESHU_ERROR = "2041" + RECODE_MERGE_CCZDXX_ERROR = "2042" + RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR = "2051" + RECODE_MERGE_QINGXIANGMTXZ_ERROR = "2052" + + RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR = "2100" + RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR = "2101" + RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR = "2102" + RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR = "2103" + RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR = "2104" + RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR = "2105" + RECODE_MERGE_CARDHOLDER_CARDHOLDER_NOTENOUGH_ERROR = "2106" + RECODE_MERGE_CARDHOLDER_ALBUMID_ERROR = "2107" + RECODE_MERGE_CARDHOLDER_ALBUM_HASGOT_ERROR = "2108" + RECODE_MERGE_CARDHOLDER_ALBUM_NOTFINISH_ERROR = "2109" + RECODE_MERGE_CARDHOLDER_ROUND_NOTFINISH_ERROR = "2110" +) + +var recodeText = map[string]string{ + RECODE_OK: "成功", + RECODE_FALIED: "操作失败", + RECODE_UNKNOWERR: "未知错误", + RECODE_PARAMERROR: "参数错误", + RECODE_SIGNERROR: "签名错误", + RECODE_DATA_BUCUNZIA_ERROR: "数据不存在", + RECODE_PARAMDECODE_ERROR: "解析参数失败,请检查参数合法性", + RECODE_DATANOEXIST_ERROR: "数据不存在", + RECODE_CREATEUID_ERROR: "创建用户UID失败", + RECODE_LOGINCHECK_ERROR: "登录验证失败,请重新登录", + RECODE_WEIXINAZIFU_ERROR: "参数存在危险字符", + RECODE_SDKMEMBER_ERROR: "获取SDK用户信息失败", + RECODE_CAOZUOPINFAN_ERROR: "操作频繁", + RECODE_REQUESTXIANLIU_ERROR: "操作被限流", + RECODE_REQUESTTIME_ERROR: "time errors", + + RECODE_MERGE_CONFIG_ERROR: "获取配置文件错误", + RECODE_MERGE_CFLQ_ERROR: "不能重复领取", + RECODE_MERGE_AZSXLQ_ERROR: "请按照顺序领取", + RECODE_MERGE_QXGMSP_ERROR: "请先购买对应商品", + + RECODE_MERGE_MEMBERSHIP_QXCZZK_ERROR: "请先购买周卡", + RECODE_MERGE_MEMBERSHIP_QXCZYK_ERROR: "请先购买月卡", + RECODE_MERGE_MEMBERSHIP_QXCZ_ERROR: "请先购买对应商品", + RECODE_MERGE_MEMBERSHIP_BNCFLQ_ERROR: "不能重复领取", + + RECODE_MERGE_NOVICE_QXCZ_ERROR: "请先购买对应商品", + RECODE_MERGE_NOVICE_BNCFLQ_ERROR: "不能重复领取", + RECODE_MERGE_NOVICE_MYDDLQTJ_ERROR: "没有达到领取条件", + + RECODE_MERGE_HUODONGWEIKAISHI_ERROR: "活动未开始", + RECODE_MERGE_HUODONGYIJIESHU_ERROR: "活动已结束", + RECODE_MERGE_CCZDXX_ERROR: "超出最大限制", + + RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在", + RECODE_MERGE_QINGXIANGMTXZ_ERROR: "请先购买通行证", + + RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR: "活动未开放", + RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR: "活动未开始", + RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR: "活动已结束", + RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR: "活动轮次已全部完成", + RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR: "卡包ID错误", + RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR: "数目不合法", + RECODE_MERGE_CARDHOLDER_CARDHOLDER_NOTENOUGH_ERROR: "卡包不足", + RECODE_MERGE_CARDHOLDER_ALBUMID_ERROR: "卡组ID错误", + RECODE_MERGE_CARDHOLDER_ALBUM_HASGOT_ERROR: "卡组奖励已领取", + RECODE_MERGE_CARDHOLDER_ALBUM_NOTFINISH_ERROR: "卡组卡牌未集齐", + RECODE_MERGE_CARDHOLDER_ROUND_NOTFINISH_ERROR: "卡册未集齐", +} + +func RecodeText(code string) string { + str, ok := recodeText[code] + if ok { + return str + } + return RecodeText(RECODE_UNKNOWERR) +} + +func CodeMsg(data map[string]interface{}, code interface{}) map[string]interface{} { + data["code"] = code + data["msg"] = RecodeText(code.(string)) + lxtime.NowUninx() + data["servertime"] = lxtime.NowUninx() + return data +} + +func CodeMsgLog(data map[string]interface{}, code interface{}, log ...interface{}) map[string]interface{} { + // 写入日志 + lxalilog.ErrorCode(code, log) + return CodeMsg(data, code) +} diff --git a/service/constd/games.go b/service/constd/games.go new file mode 100644 index 0000000..3cb3612 --- /dev/null +++ b/service/constd/games.go @@ -0,0 +1,5 @@ +package constd + +var ( + GameListCardHolder = []string{"10128"} +) diff --git a/service/constd/index.go b/service/constd/index.go deleted file mode 100644 index d9017a7..0000000 --- a/service/constd/index.go +++ /dev/null @@ -1,125 +0,0 @@ -package constd - -import ( - "apigame/util/util-lx/lxalilog" - "apigame/util/util-lx/lxtime" -) - -const ( - RECODE_OK = "0" - RECODE_FALIED = "1000" - RECODE_UNKNOWERR = "1001" - RECODE_PARAMERROR = "1002" - RECODE_SIGNERROR = "1003" - RECODE_DATA_BUCUNZIA_ERROR = "1004" - RECODE_PARAMDECODE_ERROR = "1005" - RECODE_DATANOEXIST_ERROR = "1006" - RECODE_CREATEUID_ERROR = "1007" - RECODE_LOGINCHECK_ERROR = "1008" - RECODE_WEIXINAZIFU_ERROR = "1009" - RECODE_SDKMEMBER_ERROR = "1010" - RECODE_CAOZUOPINFAN_ERROR = "1011" - RECODE_REQUESTXIANLIU_ERROR = "1110" - RECODE_REQUESTTIME_ERROR = "1111" - - RECODE_MERGE_CONFIG_ERROR = "2000" - RECODE_MERGE_CFLQ_ERROR = "2001" - RECODE_MERGE_AZSXLQ_ERROR = "2002" - RECODE_MERGE_QXGMSP_ERROR = "2003" - RECODE_MERGE_MEMBERSHIP_QXCZZK_ERROR = "2010" - RECODE_MERGE_MEMBERSHIP_QXCZYK_ERROR = "2011" - RECODE_MERGE_MEMBERSHIP_QXCZ_ERROR = "2012" - RECODE_MERGE_MEMBERSHIP_BNCFLQ_ERROR = "2013" - - RECODE_MERGE_NOVICE_QXCZ_ERROR = "2021" - RECODE_MERGE_NOVICE_BNCFLQ_ERROR = "2032" - RECODE_MERGE_NOVICE_MYDDLQTJ_ERROR = "2033" - RECODE_MERGE_HUODONGWEIKAISHI_ERROR = "2040" - RECODE_MERGE_HUODONGYIJIESHU_ERROR = "2041" - RECODE_MERGE_CCZDXX_ERROR = "2042" - RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR = "2051" - RECODE_MERGE_QINGXIANGMTXZ_ERROR = "2052" - - RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR = "2101" - RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR = "2102" - RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR = "2103" - RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR = "2104" - RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR = "2105" - RECODE_MERGE_CARDHOLDER_CARDHOLDER_NOTENOUGH_ERROR = "2106" - RECODE_MERGE_CARDHOLDER_ALBUMID_ERROR = "2107" - RECODE_MERGE_CARDHOLDER_ALBUM_HASGOT_ERROR = "2108" - RECODE_MERGE_CARDHOLDER_ALBUM_NOTFINISH_ERROR = "2109" - RECODE_MERGE_CARDHOLDER_ROUND_NOTFINISH_ERROR = "2110" -) - -var recodeText = map[string]string{ - RECODE_OK: "成功", - RECODE_FALIED: "操作失败", - RECODE_UNKNOWERR: "未知错误", - RECODE_PARAMERROR: "参数错误", - RECODE_SIGNERROR: "签名错误", - RECODE_DATA_BUCUNZIA_ERROR: "数据不存在", - RECODE_PARAMDECODE_ERROR: "解析参数失败,请检查参数合法性", - RECODE_DATANOEXIST_ERROR: "数据不存在", - RECODE_CREATEUID_ERROR: "创建用户UID失败", - RECODE_LOGINCHECK_ERROR: "登录验证失败,请重新登录", - RECODE_WEIXINAZIFU_ERROR: "参数存在危险字符", - RECODE_SDKMEMBER_ERROR: "获取SDK用户信息失败", - RECODE_CAOZUOPINFAN_ERROR: "操作频繁", - RECODE_REQUESTXIANLIU_ERROR: "操作被限流", - RECODE_REQUESTTIME_ERROR: "time errors", - - RECODE_MERGE_CONFIG_ERROR: "获取配置文件错误", - RECODE_MERGE_CFLQ_ERROR: "不能重复领取", - RECODE_MERGE_AZSXLQ_ERROR: "请按照顺序领取", - RECODE_MERGE_QXGMSP_ERROR: "请先购买对应商品", - - RECODE_MERGE_MEMBERSHIP_QXCZZK_ERROR: "请先购买周卡", - RECODE_MERGE_MEMBERSHIP_QXCZYK_ERROR: "请先购买月卡", - RECODE_MERGE_MEMBERSHIP_QXCZ_ERROR: "请先购买对应商品", - RECODE_MERGE_MEMBERSHIP_BNCFLQ_ERROR: "不能重复领取", - - RECODE_MERGE_NOVICE_QXCZ_ERROR: "请先购买对应商品", - RECODE_MERGE_NOVICE_BNCFLQ_ERROR: "不能重复领取", - RECODE_MERGE_NOVICE_MYDDLQTJ_ERROR: "没有达到领取条件", - - RECODE_MERGE_HUODONGWEIKAISHI_ERROR: "活动未开始", - RECODE_MERGE_HUODONGYIJIESHU_ERROR: "活动已结束", - RECODE_MERGE_CCZDXX_ERROR: "超出最大限制", - - RECODE_MERGE_TONGXINGZHENGBUCUNZAI_ERROR: "通行证不存在", - RECODE_MERGE_QINGXIANGMTXZ_ERROR: "请先购买通行证", - - RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR: "活动未开始", - RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR: "活动已结束", - RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR: "活动轮次已全部完成", - RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR: "卡包ID错误", - RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR: "数目不合法", - RECODE_MERGE_CARDHOLDER_CARDHOLDER_NOTENOUGH_ERROR: "卡包不足", - RECODE_MERGE_CARDHOLDER_ALBUMID_ERROR: "卡组ID错误", - RECODE_MERGE_CARDHOLDER_ALBUM_HASGOT_ERROR: "卡组奖励已领取", - RECODE_MERGE_CARDHOLDER_ALBUM_NOTFINISH_ERROR: "卡组卡牌未集齐", - RECODE_MERGE_CARDHOLDER_ROUND_NOTFINISH_ERROR: "卡册未集齐", -} - -func RecodeText(code string) string { - str, ok := recodeText[code] - if ok { - return str - } - return RecodeText(RECODE_UNKNOWERR) -} - -func CodeMsg(data map[string]interface{}, code interface{}) map[string]interface{} { - data["code"] = code - data["msg"] = RecodeText(code.(string)) - lxtime.NowUninx() - data["servertime"] = lxtime.NowUninx() - return data -} - -func CodeMsgLog(data map[string]interface{}, code interface{}, log ...interface{}) map[string]interface{} { - // 写入日志 - lxalilog.ErrorCode(code, log) - return CodeMsg(data, code) -} diff --git a/service/constd/mysql.go b/service/constd/mysql.go index 950416d..5e8b02a 100644 --- a/service/constd/mysql.go +++ b/service/constd/mysql.go @@ -10,7 +10,7 @@ const ( MYSQL_MERGECONFIG = "merge_config" MYSQL_DEFAULT_QUERY_MAXCOUNT = 100 - MYSQL_TABLE_S_CARD_ACTIVITY = "s_card_activity_" // 开卡包活动配置 + MYSQL_TABLE_S_CARDHOLDER_CONFIG = "s_card_activity_" // 开卡包活动配置 MYSQL_TABLE_S_CARDHOLDER_DATA = "s_cardholder_data_" // 开卡包活动数据 MYSQL_TABLE_S_CARDHOLDER_RECORD_GETNEW = "s_cardholder_record_getnew_" // 开卡包活动日志获得卡包 MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN = "s_cardholder_record_open_" // 开卡包活动日志开卡包 @@ -18,7 +18,3 @@ const ( MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND = "s_cardholder_record_rewardround_" // 开卡包活动日志领取轮次奖励 ) - -const ( - GAME_ID_HT = "10128" -) diff --git a/service/game-record/record.go b/service/game-record/record.go deleted file mode 100644 index 72306f9..0000000 --- a/service/game-record/record.go +++ /dev/null @@ -1,16 +0,0 @@ -package game_record - -import ( - "apigame/dto" - "apigame/service/constd" - "apigame/util/util-lx/lxalilog" - "github.com/astaxie/beego/orm" -) - -func Save(d dto.RecordMysql) { - o := orm.NewOrm() - o.Using(constd.MYSQL_DEFAULT) - if _, err := o.Insert(d); err != nil { - lxalilog.Errors(err, d.TableName()) - } -} diff --git a/util/utmysql/index.go b/util/utmysql/index.go deleted file mode 100644 index d0b843b..0000000 --- a/util/utmysql/index.go +++ /dev/null @@ -1,55 +0,0 @@ -package utmysql - -import ( - "github.com/astaxie/beego/orm" - "strings" -) - -// FindSql 查询数据 根据sql -func FindSql(dbName string, sql string, result any) (err error) { - orm := orm.NewOrm() - orm.Using(dbName) - - if _, err = orm.Raw(sql).QueryRows(result); err != nil { - if strings.Contains(err.Error(), "doesn't exist") { - err = nil - return - } - return - } - return -} - -// FindOneSql 查询一条数据 根据sql -func FindOneSql(dbName string, sql string, result any) (err error) { - orm := orm.NewOrm() - orm.Using(dbName) - - if err = orm.Raw(sql).QueryRow(result); err != nil { - if strings.Contains(err.Error(), "doesn't exist") { - err = nil - return - } - return - } - return -} - -// -//// Find 查询数据 -//func Find(dbName string, tableName string, result any) (err error) { -// o := orm.NewOrm() -// o.Using(dbName) -// -// // 也可以直接使用对象作为表名 -// qs := o.QueryTable(tableName) -// -// if _, err = qs.All(result); err != nil { -// if strings.Contains(err.Error(), "doesn't exist") { -// err = nil -// return -// } -// return -// } -// return -//} diff --git a/util/utmysql/query.go b/util/utmysql/query.go new file mode 100644 index 0000000..3ce894f --- /dev/null +++ b/util/utmysql/query.go @@ -0,0 +1,58 @@ +package utmysql + +import ( + "github.com/astaxie/beego/orm" + "strings" +) + +// FindSql 查询数据 根据sql +func FindSql(dbName string, sql string, result any) (err error) { + o := orm.NewOrm() + o.Using(dbName) + + if _, err = o.Raw(sql).QueryRows(result); err != nil { + if strings.Contains(err.Error(), "doesn't exist") { + err = nil + return + } + return + } + return +} + +// FindOneSql 查询一条数据 根据sql +func FindOneSql(dbName string, sql string, result any) (has bool, err error) { + has = true + o := orm.NewOrm() + o.Using(dbName) + + if err = o.Raw(sql).QueryRow(result); err != nil { + if strings.Contains(err.Error(), "no row found") || + strings.Contains(err.Error(), "doesn't exist") { + has = false + err = nil + return + } + return + } + return +} + +// +//// Find 查询数据 +//func Find(dbName string, tableName string, result any) (err error) { +// o := orm.NewOrm() +// o.Using(dbName) +// +// // 也可以直接使用对象作为表名 +// qs := o.QueryTable(tableName) +// +// if _, err = qs.All(result); err != nil { +// if strings.Contains(err.Error(), "doesn't exist") { +// err = nil +// return +// } +// return +// } +// return +//} -- libgit2 0.21.0