playerMange.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799
  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) GetLastestTaskInfo(userName, taskId string) (*eventmodels.TaskFinishEventContent, *code.Result) {
  387. taskRecord := &eventmodels.TaskFinishEventContent{}
  388. where := &eventmodels.TaskFinishEventContent{
  389. UserBasic: eventmodels.UserBasic{
  390. UserId: userName,
  391. },
  392. TaskId: taskId,
  393. }
  394. err := mdb.LogstashDB.Model(&eventmodels.TaskFinishEventContent{}).Where(where).Order("create_at desc").First(&taskRecord).Error
  395. if err != nil && err != gorm.ErrRecordNotFound {
  396. mhayaLogger.Warnf("GetLastestTaskInfo First error:%v", err)
  397. return nil, common.NewResult(code.InternalError)
  398. }
  399. if err == gorm.ErrRecordNotFound {
  400. return nil, nil
  401. }
  402. return taskRecord, nil
  403. }
  404. // 获取玩家详情
  405. func (a *PlayerManage) PlayerInfo(ctx context.Context, req entity.PlayerInfoReq) (*entity.PlayerInfoResp, *code.Result) {
  406. registerRecord, codeResult := a.GetPlayerRegisterRecord(req.UserName)
  407. if codeResult != nil {
  408. mhayaLogger.Warnf("PlayerInfo GetPlayerRegisterRecord error:%v", codeResult)
  409. return nil, codeResult
  410. }
  411. if registerRecord == nil {
  412. mhayaLogger.Warnf("PlayerInfo registerRecord:%v", registerRecord)
  413. return nil, nil
  414. }
  415. updateRecord, codeResult := a.GetPlayerLastestUpdateRecord(req.UserName)
  416. if codeResult != nil {
  417. mhayaLogger.Warnf("PlayerInfo GetPlayerLastestUpdateRecord error:%v", codeResult)
  418. return nil, codeResult
  419. }
  420. loginRecord, codeResult := a.GetPlayerLastestLoginRecord(req.UserName)
  421. if codeResult != nil {
  422. mhayaLogger.Warnf("PlayerInfo GetPlayerLastestLoginRecord error:%v", codeResult)
  423. return nil, codeResult
  424. }
  425. return &entity.PlayerInfoResp{
  426. UserName: func() string {
  427. if updateRecord != nil {
  428. return updateRecord.UserId
  429. }
  430. if registerRecord != nil {
  431. return registerRecord.UserId
  432. }
  433. return ""
  434. }(),
  435. OpenId: func() string {
  436. if updateRecord != nil {
  437. return updateRecord.TgId
  438. }
  439. if registerRecord != nil {
  440. return registerRecord.TgId
  441. }
  442. return ""
  443. }(),
  444. NickName: func() string {
  445. if updateRecord != nil {
  446. return updateRecord.UserName
  447. }
  448. if registerRecord != nil {
  449. return registerRecord.UserName
  450. }
  451. return ""
  452. }(),
  453. Pid: func() string {
  454. if updateRecord != nil {
  455. return updateRecord.ParentUserId
  456. }
  457. if registerRecord != nil {
  458. return registerRecord.ParentUserId
  459. }
  460. return ""
  461. }(),
  462. XID: func() string {
  463. if updateRecord != nil {
  464. return updateRecord.XId
  465. }
  466. if registerRecord != nil {
  467. return registerRecord.XId
  468. }
  469. return ""
  470. }(),
  471. TonWall: func() string {
  472. if updateRecord != nil {
  473. return updateRecord.TonWall
  474. }
  475. if registerRecord != nil {
  476. return registerRecord.TonWall
  477. }
  478. return ""
  479. }(),
  480. Email: func() string {
  481. if updateRecord != nil {
  482. return updateRecord.Email
  483. }
  484. if registerRecord != nil {
  485. return registerRecord.Email
  486. }
  487. return ""
  488. }(),
  489. Level: func() int {
  490. if updateRecord != nil {
  491. return updateRecord.Level
  492. }
  493. if registerRecord != nil {
  494. return registerRecord.Level
  495. }
  496. return 0
  497. }(),
  498. Status: func() int {
  499. if updateRecord != nil {
  500. return updateRecord.UserStatus
  501. }
  502. if registerRecord != nil {
  503. return registerRecord.UserStatus
  504. }
  505. return 0
  506. }(),
  507. LoginTime: func() int64 {
  508. if loginRecord != nil {
  509. return loginRecord.CreateAt
  510. }
  511. return 0
  512. }(),
  513. LoginIP: func() string {
  514. if loginRecord != nil {
  515. return loginRecord.Ip
  516. }
  517. return ""
  518. }(),
  519. JoinIP: func() string {
  520. if registerRecord != nil {
  521. return registerRecord.Ip
  522. }
  523. return ""
  524. }(),
  525. JoinTime: func() int64 {
  526. if registerRecord != nil {
  527. return registerRecord.CreateAt
  528. }
  529. return 0
  530. }(),
  531. Avatar: "",
  532. IsRobot: func() int {
  533. if updateRecord != nil && updateRecord.IsRobot {
  534. return 1
  535. }
  536. if registerRecord != nil && registerRecord.IsRobot {
  537. return 1
  538. }
  539. return 0
  540. }(),
  541. IsLeader: func() int {
  542. if updateRecord != nil && updateRecord.UpdateIsLeader {
  543. return 1
  544. }
  545. return 0
  546. }(),
  547. IsVip: func() int {
  548. if updateRecord != nil && updateRecord.UpdateIsVip {
  549. return 1
  550. }
  551. return 0
  552. }(),
  553. Successions: func() int {
  554. if loginRecord != nil {
  555. return loginRecord.ContinuousDays
  556. }
  557. return 0
  558. }(),
  559. MaxSuccessions: func() int {
  560. if loginRecord != nil {
  561. return loginRecord.ContinuousDaysMax
  562. }
  563. return 0
  564. }(),
  565. PrevTime: func() int64 {
  566. if loginRecord != nil {
  567. return loginRecord.CreateAt
  568. }
  569. return 0
  570. }(),
  571. UpdateTime: func() int64 {
  572. if updateRecord != nil {
  573. return updateRecord.CreateAt
  574. }
  575. return 0
  576. }(),
  577. // TODO 其他玩家信息
  578. Share: nil, // TODO 每天分享一次
  579. FirstReward: 0,
  580. // Item:,
  581. // SinIn:,
  582. // DailyTask:,
  583. // AchieveTask:,
  584. // RankReward:,
  585. // Invite:,
  586. // InviteReward:,
  587. // Roll:,
  588. }, nil
  589. }
  590. // 获取玩家中奖记录
  591. func (a *PlayerManage) RewardList(ctx context.Context, req entity.RewardListReq) (*entity.RewardListResp, *code.Result) {
  592. page, pageSize := checkPageParam(req.Page, req.Size)
  593. var rewardRecords []*eventmodels.UserRewardEventContent
  594. where := &eventmodels.UserRewardEventContent{
  595. UserBasic: eventmodels.UserBasic{
  596. UserId: req.UserName,
  597. },
  598. Source: models.SourceDraw,
  599. }
  600. db := mdb.LogstashDB.Model(&eventmodels.UserRewardEventContent{}).Where(where).Order("create_at")
  601. if req.StartTime > 0 && req.EndTime > 0 && req.StartTime <= req.EndTime {
  602. db = db.Where("create_at >= ? and create_at <= ?", req.StartTime, req.EndTime)
  603. }
  604. pages := Paginate(db, page, pageSize)
  605. err := db.Scopes(pages.Limit).Find(&rewardRecords).Error
  606. if err != nil && err != gorm.ErrRecordNotFound {
  607. mhayaLogger.Warnf("RewardList Find error:%v", err)
  608. return nil, common.NewResult(code.InternalError)
  609. }
  610. var results []*entity.RewardListDetail
  611. for _, v := range rewardRecords {
  612. addReward := make([]*entity.ShowItemReward, 0, 8)
  613. addRewards := make([]eventmodels.ItemReward, 0, 8)
  614. if v.AddReward == "" {
  615. addRewards = nil
  616. } else {
  617. err := json.Unmarshal([]byte(v.AddReward), &addRewards)
  618. if err != nil {
  619. mhayaLogger.Warnf("RewardList Unmarshal v.AddReward error:%v", err)
  620. return nil, common.NewResult(code.InternalError)
  621. }
  622. }
  623. if addRewards == nil {
  624. addReward = nil
  625. } else {
  626. for _, item := range addRewards {
  627. addReward = append(addReward, a.packItemReward(item))
  628. }
  629. }
  630. var desc *entity.Desc
  631. if v.Desc != "" {
  632. descDraw := eventmodels.DescDraw{}
  633. err := json.Unmarshal([]byte(v.Desc), &descDraw)
  634. if err != nil {
  635. mhayaLogger.Warnf("RewardList Unmarshal v.Desc error:%v", err)
  636. return nil, common.NewResult(code.InternalError)
  637. }
  638. ret := make([]*entity.ShowItemReward, 0, 8)
  639. for _, item := range descDraw.Reward {
  640. ret = append(ret, a.packItemReward(item))
  641. }
  642. desc = &entity.Desc{
  643. ID: descDraw.ID,
  644. CurID: descDraw.CurID,
  645. Reward: ret,
  646. }
  647. }
  648. results = append(results, &entity.RewardListDetail{
  649. UserName: v.UserId,
  650. AddReward: addReward,
  651. Desc: desc,
  652. CreateTime: v.CreateAt,
  653. })
  654. }
  655. return &entity.RewardListResp{
  656. Details: results,
  657. Total: pages.Count,
  658. }, nil
  659. }
  660. func (a *PlayerManage) packItemReward(reward eventmodels.ItemReward) *entity.ShowItemReward {
  661. itemName := ""
  662. cfg, exist := data.ItemConfig.Get(reward.ItemID)
  663. if exist {
  664. itemName = cfg.ItemKey
  665. }
  666. return &entity.ShowItemReward{
  667. ItemBaseType: reward.ItemBaseType,
  668. ItemID: reward.ItemID,
  669. ItemName: itemName,
  670. Amount: func() float64 {
  671. if itemName == "u" || itemName == "ton" {
  672. return cutils.QuoInt64ByRatioToFloat64(int64(reward.Amount), constant.MoneyRatio)
  673. }
  674. return float64(reward.Amount)
  675. }(),
  676. }
  677. }