db_user.go
6.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
package db
import (
"World/common"
"World/utils"
"common/logger"
stat "common/statistic"
_ "database/sql"
_ "errors"
"strconv"
_ "strings"
_ "sync"
)
func LoadPlayerTokenFromDB(uid int) (token string, err error) {
cmd := "select token from " + user_tablename + " where id = " + strconv.Itoa(uid)
rows, err := m_game_db.Query(cmd)
if rows != nil {
defer rows.Close()
}
if err != nil {
logger.Notic("LoadPlayerTokenFromDB Query error:%v", err)
return
}
for rows.Next() {
var value string
err = rows.Scan(&value)
if err != nil {
logger.Notic("LoadPlayerTokenFromDB scan error:%v", err)
return
}
token = value
return
}
err = common.ErrorsNotFoundPlayerInMysql
return
}
func LoadPlayerFromDB(uid int) (*common.GamePlayer, error) {
// cmd := `select COALESCE(id,0), COALESCE(mobile,''), COALESCE(passwd,''), COALESCE(avatar,''), COALESCE(avatar_thumb,''),
// COALESCE(nick_name,''), COALESCE(gender,0), COALESCE(user_marks,''), COALESCE(diamond_num,0), COALESCE(user_gold,0),
// COALESCE(games_max,0), COALESCE(clubs_max,0), COALESCE(current_games,0), COALESCE(current_clubs,0), COALESCE(point,0),
// COALESCE(reg_code,''), COALESCE(sale_code,''), COALESCE(card_type,0), COALESCE(token,''), COALESCE(device_type,0),
// COALESCE(reg_time,0), COALESCE(last_login,0), COALESCE(is_online,0), COALESCE(room_id,0) from dtb_user_main `
cmd := "select COALESCE(id,0) from dtb_user_main where id = " + strconv.Itoa(uid)
rows, err := m_game_db.Query(cmd)
if rows != nil {
defer rows.Close()
}
if err != nil {
logger.Info("LoadPlayerFromDB Query error:%v cmd:%v", err, cmd)
return nil, err
}
for rows.Next() {
var id int
err = rows.Scan(&id)
if err != nil {
logger.Notic("LoadPlayerFromDB scan error:%v", err)
return nil, err
}
logger.Info("id:%v", id)
player := new(common.GamePlayer)
player.UID = uid
return player, nil
}
err = common.ErrorsNotFoundPlayerInMysql
return nil, err
}
func UpdatePlayerMoney2DB(playerid uint32, money uint32) error {
cmd := "update " + user_tablename + " set user_gold = " + strconv.Itoa(int(money)) + " where id = " + strconv.Itoa(int(playerid))
rows, err := m_game_db.Query(cmd)
if rows != nil {
defer rows.Close()
}
if err != nil {
logger.Notic("UpdatePlayerMoney2DB error:%v cmd:%v", err, cmd)
return err
}
return nil
}
func LoadPlayerRemarksFromDB(uid int) (remarks string) {
cmd := "select data from " + remarks_tablename + " where uid = " + strconv.Itoa(uid)
rows, err := m_game_db.Query(cmd)
if rows != nil {
defer rows.Close()
}
if err != nil {
logger.Notic("LoadPlayerRemarksFromDB query error:%v cmd:%d", err, cmd)
return
}
for rows.Next() {
var value string
err = rows.Scan(&value)
if err != nil {
logger.Notic("LoadPlayerRemarksFromDB scan error:%v", err)
return
}
remarks = value
return
}
return
}
func InsertPlayerRemarks(playerID int32, data string) error {
cmd := `INSERT INTO dtb_remarks (uid, data) VALUES (`
cmd = cmd + strconv.Itoa(int(playerID)) + ",'" + data + "')"
err := ExcuteCmd(cmd)
if err != nil {
logger.Notic("InsertPlayerRemarks ExcuteCmd error:%v cmd:%v", err, cmd)
return err
}
return nil
}
func UpdatePlayerRemarks(playerID int32, data string) error {
cmd := "UPDATE dtb_remarks SET data='" + data + "'" + " WHERE uid=" + strconv.Itoa(int(playerID))
err := ExcuteCmd(cmd)
if err != nil {
logger.Notic("UpdatePlayerRemarks error:%v", err)
return err
}
return nil
}
func UpdatePlayLeftGold(playerID uint32, num int32, roomid uint32) error {
cmd := "INSERT into t_user_buyin_gold(user_id,left_gold,room_id) values(" + strconv.Itoa(int(playerID)) +
"," + strconv.Itoa(int(num)) + "," + strconv.Itoa(int(roomid)) + ") on duplicate key update left_gold=" + strconv.Itoa(int(num))
if num == 0 {
cmd = "DELETE FROM t_user_buyin_gold where user_id = " + strconv.Itoa(int(playerID)) + " and " + "room_id = " + strconv.Itoa(int(roomid))
}
err := ExcuteCmd(cmd)
if err != nil {
logger.Notic("UpdatePlayLeftGold error:%v", err)
return err
}
return nil
}
//如果宕机恢复玩家的金币
func RecoverPlayerGold() error {
logger.Info("DO RecoverPlayerGold!")
cmd := "SELECT user_id from t_user_buyin_gold group by(user_id)"
rows, err := m_game_db.Query(cmd)
userleftMap := map[int]int{}
if rows != nil {
defer rows.Close()
}
if err != nil {
logger.Notic("RecoverPlayerGold query error:%v cmd:%d", err, cmd)
return err
}
for rows.Next() {
var id int
err = rows.Scan(&id)
if err != nil {
logger.Notic("RecoverPlayerGold scan error:%v", err)
continue
}
cmd1 := "SELECT sum(left_gold) from t_user_buyin_gold where user_id = " + strconv.Itoa(int(id))
left_num, err1 := GetSingleIntValue(cmd1)
if err1 != nil {
logger.Notic("RecoverPlayerGold query1 error:%v cmd:%d", err, cmd)
continue
}
userleftMap[id] = left_num
logger.Info("get playerid:%v,left_value:%v", id, left_num)
}
for playerID, goldNum := range userleftMap {
cmd := "select COALESCE(user_gold,0) from dtb_user_main where id =" + strconv.Itoa(int(playerID))
origin, err := GetSingleIntValue(cmd)
if err != nil {
continue
}
var current int
current = origin + (int(goldNum))
//加上金币
cmd = "UPDATE dtb_user_main SET user_gold = '" + strconv.Itoa(current) + "'where id =" + strconv.Itoa(int(playerID))
err = ExcuteCmd(cmd)
if err != nil {
logger.Notic("RecoverPlayerGold query1 error:%v cmd:%d", err, cmd)
continue
}
logger.Info("do return playerid:%v gold:%v", playerID, goldNum)
utils.SendCurrencyReport(uint32(playerID), 0,
stat.Currency_Channel_ReturnGold, stat.Currency_Type_Money,
int(goldNum), int(origin), int(current), 0, "return player gold")
//需要删除记录
cmd = "delete from t_user_buyin_gold where user_id = " + strconv.Itoa(int(playerID))
err = ExcuteCmd(cmd)
if err != nil {
logger.Notic("RecoverPlayerGold query1 error:%v cmd:%d", err, cmd)
continue
}
logger.Info("return and delete playerid:%v gold:%v", playerID, goldNum)
}
logger.Info("RecoverPlayerGold finished!!")
return nil
}