dao.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package manager
  2. import (
  3. "context"
  4. gosql "database/sql"
  5. "net/url"
  6. "strings"
  7. "time"
  8. "go-common/app/service/main/up/conf"
  9. "go-common/app/service/main/up/dao/global"
  10. "go-common/library/cache/memcache"
  11. "go-common/library/database/sql"
  12. "go-common/library/log"
  13. bm "go-common/library/net/http/blademaster"
  14. "go-common/library/sync/pipeline/fanout"
  15. "go-common/library/xstr"
  16. )
  17. const (
  18. //URLUNames url for names
  19. URLUNames = "/x/admin/manager/users/unames"
  20. //URLUids url for uids
  21. URLUids = "/x/admin/manager/users/uids"
  22. )
  23. // Dao is redis dao.
  24. type Dao struct {
  25. c *conf.Config
  26. managerDB *sql.DB
  27. HTTPClient *bm.Client
  28. // cache tool
  29. cache *fanout.Fanout
  30. // mc
  31. mc *memcache.Pool
  32. // upSpecial expiration
  33. upSpecialExpire int32
  34. }
  35. // New fn
  36. func New(c *conf.Config) (d *Dao) {
  37. d = &Dao{
  38. c: c,
  39. managerDB: sql.NewMySQL(c.DB.Manager),
  40. // http client
  41. HTTPClient: bm.NewClient(c.HTTPClient.Normal),
  42. mc: memcache.NewPool(c.Memcache.Up),
  43. upSpecialExpire: int32(time.Duration(c.Memcache.UpSpecialExpire) / time.Second),
  44. cache: global.GetWorker(),
  45. }
  46. return d
  47. }
  48. // Close fn
  49. func (d *Dao) Close() {
  50. if d.managerDB != nil {
  51. d.managerDB.Close()
  52. }
  53. }
  54. // Ping ping cpdb
  55. func (d *Dao) Ping(c context.Context) (err error) {
  56. return d.managerDB.Ping(c)
  57. }
  58. func prepareAndExec(c context.Context, db *sql.DB, sqlstr string, args ...interface{}) (res gosql.Result, err error) {
  59. var stmt *sql.Stmt
  60. stmt, err = db.Prepare(sqlstr)
  61. if err != nil {
  62. log.Error("stmt prepare fail, error(%v), sql=%s", err, sqlstr)
  63. return
  64. }
  65. defer stmt.Close()
  66. res, err = stmt.Exec(c, args...)
  67. if err != nil {
  68. log.Error("data base fail, err=%v", err)
  69. return
  70. }
  71. return
  72. }
  73. func prepareAndQuery(c context.Context, db *sql.DB, sqlstr string, args ...interface{}) (rows *sql.Rows, err error) {
  74. var stmt *sql.Stmt
  75. stmt, err = db.Prepare(sqlstr)
  76. if err != nil {
  77. log.Error("stmt prepare fail, error(%v), sql=%s", err, sqlstr)
  78. return
  79. }
  80. defer stmt.Close()
  81. rows, err = stmt.Query(c, args...)
  82. if err != nil {
  83. log.Error("data base fail, err=%v", err)
  84. return
  85. }
  86. return
  87. }
  88. //GetUNamesByUids get uname by uid
  89. func (d *Dao) GetUNamesByUids(c context.Context, uids []int64) (res map[int64]string, err error) {
  90. var param = url.Values{}
  91. var uidStr = xstr.JoinInts(uids)
  92. param.Set("uids", uidStr)
  93. var httpRes struct {
  94. Code int `json:"code"`
  95. Data map[int64]string `json:"data"`
  96. Message string `json:"message"`
  97. }
  98. err = d.HTTPClient.Get(c, d.c.Host.Manager+URLUNames, "", param, &httpRes)
  99. if err != nil {
  100. log.Error("d.client.Get(%s) error(%v)", d.c.Host.Manager+URLUNames+"?"+param.Encode(), err)
  101. return
  102. }
  103. if httpRes.Code != 0 {
  104. log.Error("url(%s) error(%v), code(%d), message(%s)", d.c.Host.Manager+URLUNames+"?"+param.Encode(), err, httpRes.Code, httpRes.Message)
  105. }
  106. res = httpRes.Data
  107. return
  108. }
  109. //GetUIDByNames get uid by uname
  110. func (d *Dao) GetUIDByNames(c context.Context, names []string) (res map[string]int64, err error) {
  111. var param = url.Values{}
  112. var namesStr = strings.Join(names, ",")
  113. param.Set("unames", namesStr)
  114. var httpRes struct {
  115. Code int `json:"code"`
  116. Data map[string]int64 `json:"data"`
  117. Message string `json:"message"`
  118. }
  119. err = d.HTTPClient.Get(c, d.c.Host.Manager+URLUids, "", param, &httpRes)
  120. if err != nil {
  121. log.Error("d.client.Get(%s) error(%v)", d.c.Host.Manager+URLUids+"?"+param.Encode(), err)
  122. return
  123. }
  124. if httpRes.Code != 0 {
  125. log.Error("url(%s) error(%v), code(%d), message(%s)", d.c.Host.Manager+URLUids+"?"+param.Encode(), err, httpRes.Code, httpRes.Message)
  126. }
  127. res = httpRes.Data
  128. return
  129. }