playerMange.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775
  1. package service
  2. import (
  3. "context"
  4. jsoniter "github.com/json-iterator/go"
  5. cutils "github.com/mhaya/extend/utils"
  6. "github.com/mhaya/game/game_cluster/internal/code"
  7. "github.com/mhaya/game/game_cluster/internal/constant"
  8. "github.com/mhaya/game/game_cluster/internal/data"
  9. "github.com/mhaya/game/game_cluster/internal/mdb"
  10. "github.com/mhaya/game/game_cluster/internal/mdb/eventmodels"
  11. "github.com/mhaya/game/game_cluster/internal/mdb/models"
  12. "github.com/mhaya/game/game_cluster/nodes/webadmin/common"
  13. "github.com/mhaya/game/game_cluster/nodes/webadmin/entity"
  14. mhayaLogger "github.com/mhaya/logger"
  15. "go.mongodb.org/mongo-driver/mongo"
  16. "gorm.io/gorm"
  17. )
  18. var (
  19. json = jsoniter.ConfigCompatibleWithStandardLibrary
  20. )
  21. type PlayerManage struct {
  22. db *mongo.Database
  23. }
  24. func NewPlayerManage() *PlayerManage {
  25. return &PlayerManage{
  26. db: mdb.MDB,
  27. }
  28. }
  29. // 获取玩家列表
  30. func (a *PlayerManage) List(ctx context.Context, req entity.PlayerListReq) (*entity.PlayerListResp, *code.Result) {
  31. page, pageSize := checkPageParam(req.Page, req.Size)
  32. var registerRecords []*eventmodels.UserRegisterEventContent
  33. where := &eventmodels.UserRegisterEventContent{
  34. UserBasic: eventmodels.UserBasic{
  35. UserId: req.UserName,
  36. TgId: req.OpenId,
  37. XId: req.XID,
  38. ParentUserId: req.Pid,
  39. TonWall: req.TonWall,
  40. Email: req.Email,
  41. UserStatus: req.Status,
  42. },
  43. }
  44. db := mdb.LogstashDB.Model(&eventmodels.UserRegisterEventContent{}).Where(where).Order("create_at")
  45. if req.LevelMin > 0 && req.LevelMax == 0 {
  46. db = db.Where("level >= ? and level <= ?", req.LevelMin, 1000) // 等级最大值 暂定1000
  47. }
  48. if req.LevelMin > 0 && req.LevelMax > 0 && req.LevelMin <= req.LevelMax {
  49. db = db.Where("level >= ? and level <= ?", req.LevelMin, req.LevelMax)
  50. }
  51. if req.JoinTimeMin > 0 && req.JoinTimeMax > 0 && req.JoinTimeMin <= req.JoinTimeMax {
  52. db = db.Where("create_at >= ? and create_at <= ?", req.JoinTimeMin, req.JoinTimeMax)
  53. }
  54. pages := Paginate(db, page, pageSize)
  55. err := db.Scopes(pages.Limit).Find(&registerRecords).Error
  56. if err != nil && err != gorm.ErrRecordNotFound {
  57. mhayaLogger.Warnf("List Find error:%v", err)
  58. return nil, common.NewResult(code.InternalError)
  59. }
  60. var results []*entity.PlayerListDetail
  61. for _, v := range registerRecords {
  62. updateRecord, codeResult := a.GetPlayerLastestUpdateRecord(v.UserName)
  63. if codeResult != nil {
  64. mhayaLogger.Warnf("List GetPlayerLastestUpdateRecord error:%v", codeResult)
  65. return nil, codeResult
  66. }
  67. loginRecord, codeResult := a.GetPlayerLastestLoginRecord(v.UserName)
  68. if codeResult != nil {
  69. mhayaLogger.Warnf("List GetPlayerLastestLoginRecord error:%v", codeResult)
  70. return nil, codeResult
  71. }
  72. results = append(results, &entity.PlayerListDetail{
  73. UserName: v.UserId,
  74. OpenId: func() string {
  75. if updateRecord == nil {
  76. return v.TgId
  77. }
  78. return updateRecord.TgId
  79. }(),
  80. NickName: func() string {
  81. if updateRecord == nil {
  82. return v.UserName
  83. }
  84. return updateRecord.UserName
  85. }(),
  86. Pid: func() string {
  87. if updateRecord == nil {
  88. return v.ParentUserId
  89. }
  90. return updateRecord.ParentUserId
  91. }(),
  92. XID: func() string {
  93. if updateRecord == nil {
  94. return v.XId
  95. }
  96. return updateRecord.XId
  97. }(),
  98. TonWall: func() string {
  99. if updateRecord == nil {
  100. return v.TonWall
  101. }
  102. return updateRecord.TonWall
  103. }(),
  104. Email: func() string {
  105. if updateRecord == nil {
  106. return v.Email
  107. }
  108. return updateRecord.Email
  109. }(),
  110. Level: func() int {
  111. if updateRecord == nil {
  112. return v.Level
  113. }
  114. return updateRecord.Level
  115. }(),
  116. Status: func() int {
  117. if updateRecord == nil {
  118. return v.UserStatus
  119. }
  120. return updateRecord.UserStatus
  121. }(),
  122. LoginTime: func() int64 {
  123. if loginRecord != nil {
  124. return loginRecord.CreateAt
  125. }
  126. return 0
  127. }(),
  128. LoginIP: func() string {
  129. if loginRecord != nil {
  130. return loginRecord.Ip
  131. }
  132. return ""
  133. }(),
  134. JoinIP: v.Ip,
  135. JoinTime: v.CreateAt,
  136. })
  137. }
  138. return &entity.PlayerListResp{
  139. Details: results,
  140. Total: pages.Count,
  141. }, nil
  142. }
  143. // 获取转盘实际抽奖次数
  144. func (a *PlayerManage) GetTurntableRuns(userName string) (int64, *code.Result) {
  145. turntableWhere := &eventmodels.TurntableEventContent{
  146. UserBasic: eventmodels.UserBasic{
  147. UserId: userName,
  148. },
  149. }
  150. turntableDb := mdb.LogstashDB.Model(&eventmodels.TurntableEventContent{}).Where(turntableWhere).Order("create_at")
  151. var turntableRuns int64
  152. err := turntableDb.Count(&turntableRuns).Error
  153. if err != nil {
  154. mhayaLogger.Warnf("GetTurntableRuns turntableRuns error:%v", err)
  155. return 0, common.NewResult(code.InternalError)
  156. }
  157. return turntableRuns, nil
  158. }
  159. // 获取邀请成功人数 status:查询的事件状态
  160. func (a *PlayerManage) GetSuccessfulInvitations(userName string, status int) (int64, *code.Result) {
  161. inviteWhere := &eventmodels.InviteEventContent{
  162. UserBasic: eventmodels.UserBasic{
  163. UserId: userName,
  164. },
  165. EventBasic: eventmodels.EventBasic{
  166. Status: status,
  167. },
  168. }
  169. inviteDb := mdb.LogstashDB.Model(&eventmodels.InviteEventContent{}).Where(inviteWhere).Order("create_at")
  170. var successfulInvitations int64
  171. err := inviteDb.Count(&successfulInvitations).Error
  172. if err != nil {
  173. mhayaLogger.Warnf("GetSuccessfulInvitations successfulInvitations error:%v", err)
  174. return 0, common.NewResult(code.InternalError)
  175. }
  176. return successfulInvitations, nil
  177. }
  178. // 获取提现次数 status:查询的事件状态 -1表示查询全部
  179. func (a *PlayerManage) GetWithdrawalCount(userName string, status int) (int64, *code.Result) {
  180. withdrawalWhere := &eventmodels.UserWithdrawEventContent{
  181. UserBasic: eventmodels.UserBasic{
  182. UserId: userName,
  183. },
  184. }
  185. if status != -1 {
  186. withdrawalWhere.Status = status
  187. }
  188. withdrawalDb := mdb.LogstashDB.Model(&eventmodels.UserWithdrawEventContent{}).Where(withdrawalWhere).Order("create_at")
  189. var withdrawals int64
  190. err := withdrawalDb.Count(&withdrawals).Error
  191. if err != nil {
  192. mhayaLogger.Warnf("GetWithdrawalCount withdrawals error:%v", err)
  193. return 0, common.NewResult(code.InternalError)
  194. }
  195. return withdrawals, nil
  196. }
  197. // 获取累计提现金额 currency:货币类型 status:查询的事件状态 -1表示查询全部
  198. func (a *PlayerManage) GetCumulativeWithdrawalAmount(userName, currency string, status int) (int64, *code.Result) {
  199. withdrawalAmountWhere := &eventmodels.UserWithdrawEventContent{
  200. UserBasic: eventmodels.UserBasic{
  201. UserId: userName,
  202. },
  203. Currency: currency,
  204. }
  205. if status != -1 {
  206. withdrawalAmountWhere.Status = status
  207. }
  208. var cumulativeWithdrawalAmount int64
  209. err := mdb.LogstashDB.Model(&eventmodels.UserWithdrawEventContent{}).Where(withdrawalAmountWhere).Pluck("SUM(amount) as total_amount", &cumulativeWithdrawalAmount).Error
  210. if err != nil {
  211. mhayaLogger.Warnf("GetCumulativeWithdrawalAmount Pluck currency error:%v", err)
  212. return 0, common.NewResult(code.InternalError)
  213. }
  214. return cumulativeWithdrawalAmount, nil
  215. }
  216. // 获取注册记录
  217. func (a *PlayerManage) GetRegisterRecord(userName string) (*eventmodels.UserRegisterEventContent, *code.Result) {
  218. var registerRecord *eventmodels.UserRegisterEventContent
  219. where := &eventmodels.UserRegisterEventContent{
  220. UserBasic: eventmodels.UserBasic{
  221. UserId: userName,
  222. },
  223. EventBasic: eventmodels.EventBasic{
  224. Status: 0,
  225. },
  226. }
  227. err := mdb.LogstashDB.Model(&eventmodels.UserRegisterEventContent{}).Where(where).First(&registerRecord).Error
  228. if err != nil && err != gorm.ErrRecordNotFound {
  229. mhayaLogger.Warnf("GetRegisterRecord First registerRecord error:%v", err)
  230. return nil, common.NewResult(code.InternalError)
  231. }
  232. if err == gorm.ErrRecordNotFound {
  233. return nil, nil
  234. }
  235. return registerRecord, nil
  236. }
  237. // 获取的是注册的总人数
  238. func (a *PlayerManage) GetPlayerTotalCount() (int64, *code.Result) {
  239. where := &eventmodels.UserRegisterEventContent{
  240. EventBasic: eventmodels.EventBasic{
  241. Status: 0,
  242. },
  243. }
  244. db := mdb.LogstashDB.Model(&eventmodels.UserRegisterEventContent{}).Where(where).Order("create_at")
  245. var count int64
  246. err := db.Count(&count).Error
  247. if err != nil {
  248. mhayaLogger.Warnf("GetPlayerTotalCount Count error:%v", err)
  249. return 0, common.NewResult(code.InternalError)
  250. }
  251. return count, nil
  252. }
  253. // 获取的是登录过的总人数 根据user_id去重
  254. func (a *PlayerManage) GetLoginedPlayerTotalCount() (int64, *code.Result) {
  255. where := &eventmodels.UserLoginEventContent{
  256. EventBasic: eventmodels.EventBasic{
  257. Status: 0,
  258. },
  259. }
  260. db := mdb.LogstashDB.Model(&eventmodels.UserLoginEventContent{}).Distinct("user_id").Where(where)
  261. var count int64
  262. err := db.Count(&count).Error
  263. if err != nil {
  264. mhayaLogger.Warnf("GetLoginedPlayerTotalCount Count error:%v", err)
  265. return 0, common.NewResult(code.InternalError)
  266. }
  267. return count, nil
  268. }
  269. // 获取最新的用户信息更新记录
  270. func (a *PlayerManage) GetPlayerLastestUpdateRecord(userName string) (*eventmodels.UserUpdateInfoEventContent, *code.Result) {
  271. var updateRecord *eventmodels.UserUpdateInfoEventContent
  272. updateWhere := &eventmodels.UserUpdateInfoEventContent{
  273. UserBasic: eventmodels.UserBasic{UserId: userName},
  274. }
  275. err := mdb.LogstashDB.Model(&eventmodels.UserUpdateInfoEventContent{}).Where(updateWhere).Order("create_at desc").First(&updateRecord).Error
  276. if err != nil && err != gorm.ErrRecordNotFound {
  277. mhayaLogger.Warnf("GetPlayerLastestUpdateRecord First updateRecord error:%v", err)
  278. return nil, common.NewResult(code.InternalError)
  279. }
  280. if err == gorm.ErrRecordNotFound {
  281. return nil, nil
  282. }
  283. return updateRecord, nil
  284. }
  285. // 获取用户的首次登录记录
  286. func (a *PlayerManage) GetPlayerFirstLoginRecord(userName string) (*eventmodels.UserLoginEventContent, *code.Result) {
  287. var loginRecord *eventmodels.UserLoginEventContent
  288. loginWhere := &eventmodels.UserLoginEventContent{
  289. UserBasic: eventmodels.UserBasic{
  290. UserId: userName,
  291. },
  292. }
  293. err := mdb.LogstashDB.Model(&eventmodels.UserLoginEventContent{}).Where(loginWhere).Order("create_at").First(&loginRecord).Error
  294. if err != nil && err != gorm.ErrRecordNotFound {
  295. mhayaLogger.Warnf("GetPlayerFirstLoginRecord First loginRecord error:%v", err)
  296. return nil, common.NewResult(code.InternalError)
  297. }
  298. if err == gorm.ErrRecordNotFound {
  299. return nil, nil
  300. }
  301. return loginRecord, nil
  302. }
  303. // 获取最新的用户登录记录
  304. func (a *PlayerManage) GetPlayerLastestLoginRecord(userName string) (*eventmodels.UserLoginEventContent, *code.Result) {
  305. var loginRecord *eventmodels.UserLoginEventContent
  306. loginWhere := &eventmodels.UserLoginEventContent{
  307. UserBasic: eventmodels.UserBasic{UserId: userName},
  308. }
  309. err := mdb.LogstashDB.Model(&eventmodels.UserLoginEventContent{}).Where(loginWhere).Order("create_at desc").First(&loginRecord).Error
  310. if err != nil && err != gorm.ErrRecordNotFound {
  311. mhayaLogger.Warnf("GetPlayerLastestLoginRecord First loginRecord error:%v", err)
  312. return nil, common.NewResult(code.InternalError)
  313. }
  314. if err == gorm.ErrRecordNotFound {
  315. return nil, nil
  316. }
  317. return loginRecord, nil
  318. }
  319. // 获取用户的注册记录
  320. func (a *PlayerManage) GetPlayerRegisterRecord(userName string) (*eventmodels.UserRegisterEventContent, *code.Result) {
  321. var registerRecord *eventmodels.UserRegisterEventContent
  322. where := &eventmodels.UserRegisterEventContent{
  323. UserBasic: eventmodels.UserBasic{UserId: userName},
  324. }
  325. err := mdb.LogstashDB.Model(&eventmodels.UserRegisterEventContent{}).Where(where).First(&registerRecord).Error
  326. if err != nil && err != gorm.ErrRecordNotFound {
  327. mhayaLogger.Warnf("GetPlayerRegisterRecord First registerRecord error:%v", err)
  328. return nil, common.NewResult(code.InternalError)
  329. }
  330. if err == gorm.ErrRecordNotFound {
  331. return nil, nil
  332. }
  333. return registerRecord, nil
  334. }
  335. // 获取用户加入频道的记录
  336. func (a *PlayerManage) GetJoinRecord(userName, channelName string) (*eventmodels.JoinChannelEventContent, *code.Result) {
  337. var joinRecord *eventmodels.JoinChannelEventContent
  338. where := &eventmodels.JoinChannelEventContent{
  339. UserBasic: eventmodels.UserBasic{UserId: userName},
  340. ChannelName: channelName,
  341. }
  342. err := mdb.LogstashDB.Model(&eventmodels.JoinChannelEventContent{}).Where(where).First(&joinRecord).Error
  343. if err != nil && err != gorm.ErrRecordNotFound {
  344. mhayaLogger.Warnf("GetJoinRecord First joinRecord error:%v", err)
  345. return nil, common.NewResult(code.InternalError)
  346. }
  347. if err == gorm.ErrRecordNotFound {
  348. return nil, nil
  349. }
  350. return joinRecord, nil
  351. }
  352. // 获取用户关注的记录
  353. func (a *PlayerManage) GetFollowRecord(userName, channelName string) (*eventmodels.FollowEventContent, *code.Result) {
  354. var followRecord *eventmodels.FollowEventContent
  355. where := &eventmodels.FollowEventContent{
  356. UserBasic: eventmodels.UserBasic{UserId: userName},
  357. ChannelName: channelName,
  358. }
  359. err := mdb.LogstashDB.Model(&eventmodels.FollowEventContent{}).Where(where).First(&followRecord).Error
  360. if err != nil && err != gorm.ErrRecordNotFound {
  361. mhayaLogger.Warnf("GetFollowRecord First followRecord error:%v", err)
  362. return nil, common.NewResult(code.InternalError)
  363. }
  364. if err == gorm.ErrRecordNotFound {
  365. return nil, nil
  366. }
  367. return followRecord, nil
  368. }
  369. // 获取最新的用户骰子投掷记录
  370. func (a *PlayerManage) GetPlayerLastestDiceRecord(userName string) (*eventmodels.DiceEventContent, *code.Result) {
  371. var diceRecord *eventmodels.DiceEventContent
  372. where := &eventmodels.DiceEventContent{
  373. UserBasic: eventmodels.UserBasic{UserId: userName},
  374. }
  375. err := mdb.LogstashDB.Model(&eventmodels.DiceEventContent{}).Where(where).Order("create_at desc").First(&diceRecord).Error
  376. if err != nil && err != gorm.ErrRecordNotFound {
  377. mhayaLogger.Warnf("GetPlayerLastestDiceRecord First diceRecord error:%v", err)
  378. return nil, common.NewResult(code.InternalError)
  379. }
  380. if err == gorm.ErrRecordNotFound {
  381. return nil, nil
  382. }
  383. return diceRecord, nil
  384. }
  385. // 获取玩家详情
  386. func (a *PlayerManage) PlayerInfo(ctx context.Context, req entity.PlayerInfoReq) (*entity.PlayerInfoResp, *code.Result) {
  387. updateRecord, codeResult := a.GetPlayerLastestUpdateRecord(req.UserName)
  388. if codeResult != nil {
  389. mhayaLogger.Warnf("PlayerInfo GetPlayerLastestUpdateRecord error:%v", codeResult)
  390. return nil, codeResult
  391. }
  392. var registerRecord *eventmodels.UserRegisterEventContent
  393. if updateRecord == nil {
  394. record, codeResult := a.GetPlayerRegisterRecord(req.UserName)
  395. if codeResult != nil {
  396. mhayaLogger.Warnf("PlayerInfo GetPlayerRegisterRecord error:%v", codeResult)
  397. return nil, codeResult
  398. }
  399. if record == nil {
  400. mhayaLogger.Warnf("PlayerInfo registerRecord:%v", record)
  401. return nil, nil
  402. }
  403. registerRecord = record
  404. }
  405. loginRecord, codeResult := a.GetPlayerLastestLoginRecord(req.UserName)
  406. if codeResult != nil {
  407. mhayaLogger.Warnf("PlayerInfo GetPlayerLastestLoginRecord error:%v", codeResult)
  408. return nil, codeResult
  409. }
  410. return &entity.PlayerInfoResp{
  411. UserName: func() string {
  412. if updateRecord != nil {
  413. return updateRecord.UserId
  414. }
  415. if registerRecord != nil {
  416. return registerRecord.UserId
  417. }
  418. return ""
  419. }(),
  420. OpenId: func() string {
  421. if updateRecord != nil {
  422. return updateRecord.TgId
  423. }
  424. if registerRecord != nil {
  425. return registerRecord.TgId
  426. }
  427. return ""
  428. }(),
  429. NickName: func() string {
  430. if updateRecord != nil {
  431. return updateRecord.UserName
  432. }
  433. if registerRecord != nil {
  434. return registerRecord.UserName
  435. }
  436. return ""
  437. }(),
  438. Pid: func() string {
  439. if updateRecord != nil {
  440. return updateRecord.ParentUserId
  441. }
  442. if registerRecord != nil {
  443. return registerRecord.ParentUserId
  444. }
  445. return ""
  446. }(),
  447. XID: func() string {
  448. if updateRecord != nil {
  449. return updateRecord.XId
  450. }
  451. if registerRecord != nil {
  452. return registerRecord.XId
  453. }
  454. return ""
  455. }(),
  456. TonWall: func() string {
  457. if updateRecord != nil {
  458. return updateRecord.TonWall
  459. }
  460. if registerRecord != nil {
  461. return registerRecord.TonWall
  462. }
  463. return ""
  464. }(),
  465. Email: func() string {
  466. if updateRecord != nil {
  467. return updateRecord.Email
  468. }
  469. if registerRecord != nil {
  470. return registerRecord.Email
  471. }
  472. return ""
  473. }(),
  474. Level: func() int {
  475. if updateRecord != nil {
  476. return updateRecord.Level
  477. }
  478. if registerRecord != nil {
  479. return registerRecord.Level
  480. }
  481. return 0
  482. }(),
  483. Status: func() int {
  484. if updateRecord != nil {
  485. return updateRecord.UserStatus
  486. }
  487. if registerRecord != nil {
  488. return registerRecord.UserStatus
  489. }
  490. return 0
  491. }(),
  492. LoginTime: func() int64 {
  493. if loginRecord != nil {
  494. return loginRecord.CreateAt
  495. }
  496. return 0
  497. }(),
  498. LoginIP: func() string {
  499. if loginRecord != nil {
  500. return loginRecord.Ip
  501. }
  502. return ""
  503. }(),
  504. JoinIP: func() string {
  505. if registerRecord != nil {
  506. return registerRecord.Ip
  507. }
  508. return ""
  509. }(),
  510. JoinTime: func() int64 {
  511. if registerRecord != nil {
  512. return registerRecord.CreateAt
  513. }
  514. return 0
  515. }(),
  516. Avatar: "",
  517. IsRobot: func() int {
  518. if updateRecord != nil && updateRecord.IsRobot {
  519. return 1
  520. }
  521. if registerRecord != nil && registerRecord.IsRobot {
  522. return 1
  523. }
  524. return 0
  525. }(),
  526. IsLeader: func() int {
  527. if updateRecord != nil && updateRecord.UpdateIsLeader {
  528. return 1
  529. }
  530. return 0
  531. }(),
  532. IsVip: func() int {
  533. if updateRecord != nil && updateRecord.UpdateIsVip {
  534. return 1
  535. }
  536. return 0
  537. }(),
  538. Successions: func() int {
  539. if loginRecord != nil {
  540. return loginRecord.ContinuousDays
  541. }
  542. return 0
  543. }(),
  544. MaxSuccessions: func() int {
  545. if loginRecord != nil {
  546. return loginRecord.ContinuousDaysMax
  547. }
  548. return 0
  549. }(),
  550. PrevTime: func() int64 {
  551. if loginRecord != nil {
  552. return loginRecord.CreateAt
  553. }
  554. return 0
  555. }(),
  556. UpdateTime: func() int64 {
  557. if updateRecord != nil {
  558. return updateRecord.CreateAt
  559. }
  560. return 0
  561. }(),
  562. IsDrawShare: 0, // TODO
  563. DrawShareTime: 0, // TODO
  564. FirstReward: 0, // TODO
  565. // TODO 其他玩家信息
  566. }, nil
  567. }
  568. // 获取玩家中奖记录
  569. func (a *PlayerManage) RewardList(ctx context.Context, req entity.RewardListReq) (*entity.RewardListResp, *code.Result) {
  570. page, pageSize := checkPageParam(req.Page, req.Size)
  571. var rewardRecords []*eventmodels.UserRewardEventContent
  572. where := &eventmodels.UserRewardEventContent{
  573. UserBasic: eventmodels.UserBasic{
  574. UserId: req.UserName,
  575. },
  576. Source: models.SourceDraw,
  577. }
  578. db := mdb.LogstashDB.Model(&eventmodels.UserRewardEventContent{}).Where(where).Order("create_at")
  579. if req.StartTime > 0 && req.EndTime > 0 && req.StartTime <= req.EndTime {
  580. db = db.Where("create_at >= ? and create_at <= ?", req.StartTime, req.EndTime)
  581. }
  582. pages := Paginate(db, page, pageSize)
  583. err := db.Scopes(pages.Limit).Find(&rewardRecords).Error
  584. if err != nil && err != gorm.ErrRecordNotFound {
  585. mhayaLogger.Warnf("RewardList Find error:%v", err)
  586. return nil, common.NewResult(code.InternalError)
  587. }
  588. var results []*entity.RewardListDetail
  589. for _, v := range rewardRecords {
  590. addReward := make([]*entity.ShowItemReward, 0, 8)
  591. addRewards := make([]eventmodels.ItemReward, 0, 8)
  592. if v.AddReward == "" {
  593. addRewards = nil
  594. } else {
  595. err := json.Unmarshal([]byte(v.AddReward), &addRewards)
  596. if err != nil {
  597. mhayaLogger.Warnf("RewardList Unmarshal v.AddReward error:%v", err)
  598. return nil, common.NewResult(code.InternalError)
  599. }
  600. }
  601. if addRewards == nil {
  602. addReward = nil
  603. } else {
  604. for _, item := range addRewards {
  605. addReward = append(addReward, a.packItemReward(item))
  606. }
  607. }
  608. var desc *entity.Desc
  609. if v.Desc != "" {
  610. descDraw := eventmodels.DescDraw{}
  611. err := json.Unmarshal([]byte(v.Desc), &descDraw)
  612. if err != nil {
  613. mhayaLogger.Warnf("RewardList Unmarshal v.Desc error:%v", err)
  614. return nil, common.NewResult(code.InternalError)
  615. }
  616. ret := make([]*entity.ShowItemReward, 0, 8)
  617. for _, item := range descDraw.Reward {
  618. ret = append(ret, a.packItemReward(item))
  619. }
  620. desc = &entity.Desc{
  621. ID: descDraw.ID,
  622. CurID: descDraw.CurID,
  623. Reward: ret,
  624. }
  625. }
  626. results = append(results, &entity.RewardListDetail{
  627. UserName: v.UserId,
  628. AddReward: addReward,
  629. Desc: desc,
  630. CreateTime: v.CreateAt,
  631. })
  632. }
  633. return &entity.RewardListResp{
  634. Details: results,
  635. Total: pages.Count,
  636. }, nil
  637. }
  638. func (a *PlayerManage) packItemReward(reward eventmodels.ItemReward) *entity.ShowItemReward {
  639. itemName := ""
  640. cfg, exist := data.ItemConfig.Get(reward.ItemID)
  641. if exist {
  642. itemName = cfg.ItemKey
  643. }
  644. return &entity.ShowItemReward{
  645. ItemBaseType: reward.ItemBaseType,
  646. ItemID: reward.ItemID,
  647. ItemName: itemName,
  648. Amount: func() float64 {
  649. if itemName == "u" || itemName == "ton" {
  650. return cutils.QuoInt64ByRatioToFloat64(int64(reward.Amount), constant.MoneyRatio)
  651. }
  652. return float64(reward.Amount)
  653. }(),
  654. }
  655. }