mysql.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package dao
  2. import (
  3. "context"
  4. "database/sql"
  5. "encoding/json"
  6. "fmt"
  7. "go-common/library/xstr"
  8. "go-common/app/interface/main/push-archive/model"
  9. "go-common/library/log"
  10. "strconv"
  11. )
  12. const (
  13. _settingSQL = `SELECT value FROM push_settings WHERE mid=? and dtime=0 limit 1`
  14. _setSettingSQL = `INSERT INTO push_settings (mid,value) VALUES (?,?) ON DUPLICATE KEY UPDATE value=?`
  15. _settingsSQL = `SELECT mid,value FROM push_settings WHERE mid IN(%s) and dtime=0`
  16. _settingsAllSQL = `SELECT mid,value FROM push_settings WHERE id > %s AND id <= %s`
  17. _settingsMaxIDSQL = `SELECT MAX(id) AS mx FROM push_settings`
  18. )
  19. // Setting gets the setting.
  20. func (d *Dao) Setting(c context.Context, mid int64) (st *model.Setting, err error) {
  21. var v string
  22. if err = d.settingStmt.QueryRow(c, mid).Scan(&v); err != nil {
  23. if err == sql.ErrNoRows {
  24. err = nil
  25. return
  26. }
  27. log.Error("d.Setting(%d) error(%v)", mid, err)
  28. PromError("db:获取用户配置")
  29. return
  30. }
  31. st = new(model.Setting)
  32. if err = json.Unmarshal([]byte(v), &st); err != nil {
  33. log.Error("json.Unmarshal(%s) error(%v)", v, err)
  34. }
  35. return
  36. }
  37. // SetSetting saves the setting.
  38. func (d *Dao) SetSetting(c context.Context, mid int64, st *model.Setting) (err error) {
  39. v, err := json.Marshal(st)
  40. if err != nil {
  41. log.Error("json.Marshal error(%v)", err)
  42. return
  43. }
  44. if _, err = d.setSettingStmt.Exec(c, mid, v, v); err != nil {
  45. log.Error("setSetting Exec mid(%d) error(%v)", mid, err)
  46. PromError("db:保存用户设置")
  47. }
  48. return
  49. }
  50. // Settings gets the settings.
  51. func (d *Dao) Settings(c context.Context, mids []int64) (res map[int64]*model.Setting, err error) {
  52. res = make(map[int64]*model.Setting, len(mids))
  53. rows, err := d.db.Query(c, fmt.Sprintf(_settingsSQL, xstr.JoinInts(mids)))
  54. if err != nil {
  55. log.Error("d.db.Query() error(%v)", err)
  56. PromError("db:批量查询用户设置")
  57. return
  58. }
  59. for rows.Next() {
  60. var mid int64
  61. var v string
  62. if err = rows.Scan(&mid, &v); err != nil {
  63. log.Error("rows.Scan() error(%v)", err)
  64. PromError("db:批量查询用户设置")
  65. return
  66. }
  67. st := new(model.Setting)
  68. if err = json.Unmarshal([]byte(v), &st); err != nil {
  69. log.Error("json.Unmarshal(%s) error(%v)", v, err)
  70. return
  71. }
  72. res[mid] = st
  73. }
  74. return
  75. }
  76. // SettingsAll gets all settings.
  77. func (d *Dao) SettingsAll(c context.Context, startID int64, endID int64, res *map[int64]*model.Setting) (err error) {
  78. start := strconv.FormatInt(startID, 10)
  79. end := strconv.FormatInt(endID, 10)
  80. rows, err := d.db.Query(c, fmt.Sprintf(_settingsAllSQL, start, end))
  81. if err != nil {
  82. log.Error("d.db.Query() error(%v)", err)
  83. PromError("db:查询全部用户设置")
  84. return
  85. }
  86. for rows.Next() {
  87. var mid int64
  88. var v string
  89. if err = rows.Scan(&mid, &v); err != nil {
  90. log.Error("rows.Scan() error(%v)", err)
  91. PromError("db:查询用户设置")
  92. return
  93. }
  94. st := new(model.Setting)
  95. if err = json.Unmarshal([]byte(v), &st); err != nil {
  96. log.Error("json.Unmarshal(%s) error(%v)", v, err)
  97. return
  98. }
  99. (*res)[mid] = st
  100. }
  101. return
  102. }
  103. //SettingsMaxID get settings' total number by max(id)
  104. func (d *Dao) SettingsMaxID(c context.Context) (mx int64, err error) {
  105. if err = d.settingsMaxIDStmt.QueryRow(c).Scan(&mx); err != nil {
  106. if err == sql.ErrNoRows {
  107. err = nil
  108. return
  109. }
  110. log.Error("d.settingsMaxIDStmt.QueryRow.Scan error(%v)", err)
  111. PromError("db:查询用户最大ID")
  112. return
  113. }
  114. return
  115. }