playerMange.go 23 KB

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