bws.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package bws
  2. import (
  3. "context"
  4. "time"
  5. "go-common/app/interface/main/activity/conf"
  6. bwsmdl "go-common/app/interface/main/activity/model/bws"
  7. "go-common/library/cache/memcache"
  8. "go-common/library/cache/redis"
  9. xsql "go-common/library/database/sql"
  10. "go-common/library/log"
  11. "go-common/library/stat/prom"
  12. )
  13. const (
  14. _bindingSQL = "UPDATE act_bws_users SET mid = ? WHERE `key`= ?"
  15. _usersMidSQL = "SELECT id,mid,`key`,ctime,mtime,bid FROM act_bws_users WHERE mid = ?"
  16. _usersKeySQL = "SELECT id,mid,`key`,ctime,mtime,bid FROM act_bws_users WHERE `key` = ?"
  17. _usersIDSQL = "SELECT id,mid,`key`,ctime,mtime,bid FROM act_bws_users WHERE id = ?"
  18. )
  19. // PromError stat and log.
  20. func PromError(name string, format string, args ...interface{}) {
  21. prom.BusinessErrCount.Incr(name)
  22. log.Error(format, args...)
  23. }
  24. // Dao dao.
  25. type Dao struct {
  26. // config
  27. c *conf.Config
  28. // db
  29. db *xsql.DB
  30. mc *memcache.Pool
  31. mcExpire int32
  32. redis *redis.Pool
  33. redisExpire int32
  34. userAchExpire int32
  35. userPointExpire int32
  36. achCntExpire int32
  37. cacheCh chan func()
  38. }
  39. // New dao new.
  40. func New(c *conf.Config) (d *Dao) {
  41. d = &Dao{
  42. // config
  43. c: c,
  44. db: xsql.NewMySQL(c.MySQL.Like),
  45. mc: memcache.NewPool(c.Memcache.Like),
  46. mcExpire: int32(time.Duration(c.Memcache.BwsExpire) / time.Second),
  47. redis: redis.NewPool(c.Redis.Config),
  48. cacheCh: make(chan func(), 1024),
  49. redisExpire: int32(time.Duration(c.Redis.Expire) / time.Second),
  50. userAchExpire: int32(time.Duration(c.Redis.UserAchExpire) / time.Second),
  51. userPointExpire: int32(time.Duration(c.Redis.UserPointExpire) / time.Second),
  52. achCntExpire: int32(time.Duration(c.Redis.AchCntExpire) / time.Second),
  53. }
  54. return
  55. }
  56. // RawUsersMid get users by mid
  57. func (d *Dao) RawUsersMid(c context.Context, mid int64) (res *bwsmdl.Users, err error) {
  58. res = &bwsmdl.Users{}
  59. row := d.db.QueryRow(c, _usersMidSQL, mid)
  60. if err = row.Scan(&res.ID, &res.Mid, &res.Key, &res.Ctime, &res.Mtime, &res.Bid); err != nil {
  61. if err == xsql.ErrNoRows {
  62. err = nil
  63. } else {
  64. log.Error("RawUsersMid:row.Scan error(%v)", err)
  65. }
  66. }
  67. return
  68. }
  69. // RawUsersKey get users by key
  70. func (d *Dao) RawUsersKey(c context.Context, key string) (res *bwsmdl.Users, err error) {
  71. res = &bwsmdl.Users{}
  72. row := d.db.QueryRow(c, _usersKeySQL, key)
  73. if err = row.Scan(&res.ID, &res.Mid, &res.Key, &res.Ctime, &res.Mtime, &res.Bid); err != nil {
  74. if err == xsql.ErrNoRows {
  75. err = nil
  76. } else {
  77. log.Error("RawUsersKey:row.Scan error(%v)", err)
  78. }
  79. }
  80. return
  81. }
  82. // Binding binding mid
  83. func (d *Dao) Binding(c context.Context, loginMid int64, p *bwsmdl.ParamBinding) (err error) {
  84. if _, err = d.db.Exec(c, _bindingSQL, loginMid, p.Key); err != nil {
  85. log.Error("Binding: db.Exec(%d,%s) error(%v)", loginMid, p.Key, err)
  86. }
  87. return
  88. }
  89. // UserByID .
  90. func (d *Dao) UserByID(c context.Context, keyID int64) (res *bwsmdl.Users, err error) {
  91. res = &bwsmdl.Users{}
  92. row := d.db.QueryRow(c, _usersIDSQL, keyID)
  93. if err = row.Scan(&res.ID, &res.Mid, &res.Key, &res.Ctime, &res.Mtime, &res.Bid); err != nil {
  94. if err == xsql.ErrNoRows {
  95. err = nil
  96. } else {
  97. log.Error("UserByID:row.Scan error(%v)", err)
  98. }
  99. }
  100. return
  101. }