playerMange.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885
  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. // 获取玩家的签到记录 date:2006-01-02
  435. func (a *PlayerManage) GetSigninRecord(userName, date string, signinType int) (*eventmodels.SigninEventContent, *code.Result) {
  436. where := &eventmodels.SigninEventContent{
  437. UserBasic: eventmodels.UserBasic{
  438. UserId: userName,
  439. },
  440. SigninType: signinType,
  441. }
  442. db := mdb.LogstashDB.Model(&eventmodels.SigninEventContent{}).Where(where)
  443. t, err := time.Parse(time.DateOnly, date)
  444. if err != nil {
  445. mhayaLogger.Warnf("GetSigninRecord Parse date:%s error:%v", date, err)
  446. return nil, common.NewResult(code.InternalError)
  447. }
  448. dateTime := mhayaTime.CreateFromDate(t.Year(), int(t.Month()), t.Day())
  449. startTime := dateTime.StartOfDay().Unix()
  450. endTime := dateTime.EndOfDay().Unix()
  451. db = db.Where("create_at >= ? and create_at <= ?", startTime, endTime)
  452. signinRecord := &eventmodels.SigninEventContent{}
  453. err = db.First(&signinRecord).Error
  454. if err != nil && err != gorm.ErrRecordNotFound {
  455. mhayaLogger.Warnf("GetSigninRecord First error:%v", err)
  456. return nil, common.NewResult(code.InternalError)
  457. }
  458. if err == gorm.ErrRecordNotFound {
  459. return nil, nil
  460. }
  461. return signinRecord, nil
  462. }
  463. // 获取玩家详情
  464. func (a *PlayerManage) PlayerInfo(ctx context.Context, req entity.PlayerInfoReq) (*entity.PlayerInfoResp, *code.Result) {
  465. registerRecord, codeResult := a.GetPlayerRegisterRecord(req.UserName)
  466. if codeResult != nil {
  467. mhayaLogger.Warnf("PlayerInfo GetPlayerRegisterRecord error:%v", codeResult)
  468. return nil, codeResult
  469. }
  470. if registerRecord == nil {
  471. mhayaLogger.Warnf("PlayerInfo registerRecord:%v", registerRecord)
  472. return nil, nil
  473. }
  474. updateRecord, codeResult := a.GetPlayerLastestUpdateRecord(req.UserName)
  475. if codeResult != nil {
  476. mhayaLogger.Warnf("PlayerInfo GetPlayerLastestUpdateRecord error:%v", codeResult)
  477. return nil, codeResult
  478. }
  479. loginRecord, codeResult := a.GetPlayerLastestLoginRecord(req.UserName)
  480. if codeResult != nil {
  481. mhayaLogger.Warnf("PlayerInfo GetPlayerLastestLoginRecord error:%v", codeResult)
  482. return nil, codeResult
  483. }
  484. shareRecord, codeResult := a.GetShareRecord(req.UserName, mhayaTime.Now().Format(time.DateOnly))
  485. if codeResult != nil {
  486. mhayaLogger.Warnf("PlayerInfo GetShareRecord error:%v", codeResult)
  487. return nil, codeResult
  488. }
  489. return &entity.PlayerInfoResp{
  490. UserName: func() string {
  491. if updateRecord != nil {
  492. return updateRecord.UserId
  493. }
  494. if registerRecord != nil {
  495. return registerRecord.UserId
  496. }
  497. return ""
  498. }(),
  499. OpenId: func() string {
  500. if updateRecord != nil {
  501. return updateRecord.TgId
  502. }
  503. if registerRecord != nil {
  504. return registerRecord.TgId
  505. }
  506. return ""
  507. }(),
  508. NickName: func() string {
  509. if updateRecord != nil {
  510. return updateRecord.UserName
  511. }
  512. if registerRecord != nil {
  513. return registerRecord.UserName
  514. }
  515. return ""
  516. }(),
  517. Pid: func() string {
  518. if updateRecord != nil {
  519. return updateRecord.ParentUserId
  520. }
  521. if registerRecord != nil {
  522. return registerRecord.ParentUserId
  523. }
  524. return ""
  525. }(),
  526. XID: func() string {
  527. if updateRecord != nil {
  528. return updateRecord.XId
  529. }
  530. if registerRecord != nil {
  531. return registerRecord.XId
  532. }
  533. return ""
  534. }(),
  535. TonWall: func() string {
  536. if updateRecord != nil {
  537. return updateRecord.TonWall
  538. }
  539. if registerRecord != nil {
  540. return registerRecord.TonWall
  541. }
  542. return ""
  543. }(),
  544. Email: func() string {
  545. if updateRecord != nil {
  546. return updateRecord.Email
  547. }
  548. if registerRecord != nil {
  549. return registerRecord.Email
  550. }
  551. return ""
  552. }(),
  553. Level: func() int {
  554. if updateRecord != nil {
  555. return updateRecord.Level
  556. }
  557. if registerRecord != nil {
  558. return registerRecord.Level
  559. }
  560. return 0
  561. }(),
  562. Status: func() int {
  563. if updateRecord != nil {
  564. return updateRecord.UserStatus
  565. }
  566. if registerRecord != nil {
  567. return registerRecord.UserStatus
  568. }
  569. return 0
  570. }(),
  571. LoginTime: func() int64 {
  572. if loginRecord != nil {
  573. return loginRecord.CreateAt
  574. }
  575. return 0
  576. }(),
  577. LoginIP: func() string {
  578. if loginRecord != nil {
  579. return loginRecord.Ip
  580. }
  581. return ""
  582. }(),
  583. JoinIP: func() string {
  584. if registerRecord != nil {
  585. return registerRecord.Ip
  586. }
  587. return ""
  588. }(),
  589. JoinTime: func() int64 {
  590. if registerRecord != nil {
  591. return registerRecord.CreateAt
  592. }
  593. return 0
  594. }(),
  595. Avatar: "",
  596. IsRobot: func() int {
  597. if updateRecord != nil && updateRecord.IsRobot {
  598. return 1
  599. }
  600. if registerRecord != nil && registerRecord.IsRobot {
  601. return 1
  602. }
  603. return 0
  604. }(),
  605. IsLeader: func() int {
  606. if updateRecord != nil && updateRecord.UpdateIsLeader {
  607. return 1
  608. }
  609. return 0
  610. }(),
  611. IsVip: func() int {
  612. if updateRecord != nil && updateRecord.UpdateIsVip {
  613. return 1
  614. }
  615. return 0
  616. }(),
  617. Successions: func() int {
  618. if loginRecord != nil {
  619. return loginRecord.ContinuousDays
  620. }
  621. return 0
  622. }(),
  623. MaxSuccessions: func() int {
  624. if loginRecord != nil {
  625. return loginRecord.ContinuousDaysMax
  626. }
  627. return 0
  628. }(),
  629. PrevTime: func() int64 {
  630. if loginRecord != nil {
  631. return loginRecord.CreateAt
  632. }
  633. return 0
  634. }(),
  635. UpdateTime: func() int64 {
  636. if updateRecord != nil {
  637. return updateRecord.CreateAt
  638. }
  639. return 0
  640. }(),
  641. Share: func() *models.Share {
  642. if shareRecord != nil {
  643. return &models.Share{
  644. IsDrawShare: shareRecord.RewardDrawStatus,
  645. DrawShareTime: shareRecord.CreateAt,
  646. }
  647. }
  648. return nil
  649. }(),
  650. // TODO 其他玩家信息
  651. FirstReward: 0,
  652. // Item:,
  653. // SinIn:,
  654. // DailyTask:,
  655. // AchieveTask:,
  656. // RankReward:,
  657. // Invite:,
  658. // InviteReward:,
  659. // Roll:,
  660. }, nil
  661. }
  662. // 获取玩家中奖记录
  663. func (a *PlayerManage) RewardList(ctx context.Context, req entity.RewardListReq) (*entity.RewardListResp, *code.Result) {
  664. page, pageSize := checkPageParam(req.Page, req.Size)
  665. var rewardRecords []*eventmodels.UserRewardEventContent
  666. where := &eventmodels.UserRewardEventContent{
  667. UserBasic: eventmodels.UserBasic{
  668. UserId: req.UserName,
  669. },
  670. Source: models.SourceDraw,
  671. }
  672. db := mdb.LogstashDB.Model(&eventmodels.UserRewardEventContent{}).Where(where).Order("create_at")
  673. if req.StartTime > 0 && req.EndTime > 0 && req.StartTime <= req.EndTime {
  674. db = db.Where("create_at >= ? and create_at <= ?", req.StartTime, req.EndTime)
  675. }
  676. pages := Paginate(db, page, pageSize)
  677. err := db.Scopes(pages.Limit).Find(&rewardRecords).Error
  678. if err != nil && err != gorm.ErrRecordNotFound {
  679. mhayaLogger.Warnf("RewardList Find error:%v", err)
  680. return nil, common.NewResult(code.InternalError)
  681. }
  682. var results []*entity.RewardListDetail
  683. for _, v := range rewardRecords {
  684. addReward := make([]*entity.ShowItemReward, 0, 8)
  685. addRewards := make([]eventmodels.ItemReward, 0, 8)
  686. if v.AddReward == "" {
  687. addRewards = nil
  688. } else {
  689. err := json.Unmarshal([]byte(v.AddReward), &addRewards)
  690. if err != nil {
  691. mhayaLogger.Warnf("RewardList Unmarshal v.AddReward error:%v", err)
  692. return nil, common.NewResult(code.InternalError)
  693. }
  694. }
  695. if addRewards == nil {
  696. addReward = nil
  697. } else {
  698. for _, item := range addRewards {
  699. addReward = append(addReward, a.packItemReward(item))
  700. }
  701. }
  702. var desc *entity.Desc
  703. if v.Desc != "" {
  704. descDraw := eventmodels.DescDraw{}
  705. err := json.Unmarshal([]byte(v.Desc), &descDraw)
  706. if err != nil {
  707. mhayaLogger.Warnf("RewardList Unmarshal v.Desc error:%v", err)
  708. return nil, common.NewResult(code.InternalError)
  709. }
  710. ret := make([]*entity.ShowItemReward, 0, 8)
  711. for _, item := range descDraw.Reward {
  712. ret = append(ret, a.packItemReward(item))
  713. }
  714. desc = &entity.Desc{
  715. ID: descDraw.ID,
  716. CurID: descDraw.CurID,
  717. Reward: ret,
  718. }
  719. }
  720. results = append(results, &entity.RewardListDetail{
  721. UserName: v.UserId,
  722. AddReward: addReward,
  723. Desc: desc,
  724. CreateTime: v.CreateAt,
  725. })
  726. }
  727. return &entity.RewardListResp{
  728. Details: results,
  729. Total: pages.Count,
  730. }, nil
  731. }
  732. func (a *PlayerManage) packItemReward(reward eventmodels.ItemReward) *entity.ShowItemReward {
  733. itemName := ""
  734. cfg, exist := data.ItemConfig.Get(reward.ItemID)
  735. if exist {
  736. itemName = cfg.ItemKey
  737. }
  738. return &entity.ShowItemReward{
  739. ItemBaseType: reward.ItemBaseType,
  740. ItemID: reward.ItemID,
  741. ItemName: itemName,
  742. Amount: func() float64 {
  743. if itemName == "u" || itemName == "ton" {
  744. return cutils.QuoInt64ByRatioToFloat64(int64(reward.Amount), constant.MoneyRatio)
  745. }
  746. return float64(reward.Amount)
  747. }(),
  748. }
  749. }