blacklist.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package dao
  2. import (
  3. "context"
  4. "database/sql"
  5. "fmt"
  6. "time"
  7. "go-common/app/job/main/growup/model"
  8. "go-common/library/log"
  9. )
  10. const (
  11. // list all blacklist
  12. _listBlacklistSQL = "SELECT av_id,mid,reason,ctype,has_signed,nickname FROM av_black_list WHERE %s is_delete = 0 LIMIT ?,?"
  13. // query last record ctime by reason and id
  14. _queryOneByReasonSQL = "SELECT ctime FROM av_black_list WHERE reason = ? AND is_delete = 0 ORDER BY id DESC LIMIT 1"
  15. // query record from bilibili_business_up_cooperate.business_order_sheet
  16. _queryExecuteOrderSQL = "SELECT av_id, making_order_up_mid, ctime FROM business_order_sheet WHERE ctime >= ? AND ctime <= ? AND is_deleted = 0 ORDER BY ctime DESC"
  17. // add to blacklist batch
  18. _addBlacklistBatchSQL = "INSERT INTO av_black_list(av_id, mid, reason, ctype, has_signed, nickname) VALUES %s ON DUPLICATE KEY UPDATE mid=VALUES(mid),reason=VALUES(reason),has_signed=VALUES(has_signed),nickname=VALUES(nickname)"
  19. // query mid, nickname from up_info_video
  20. _queryHasSignUpInfoSQL = "SELECT mid, nickname FROM up_info_video where account_state = 3 AND is_deleted = 0 limit ?, ?"
  21. )
  22. // ListBlacklist list all blacklist
  23. func (d *Dao) ListBlacklist(c context.Context, query string, from, limit int) (backlists []*model.Blacklist, err error) {
  24. if query != "" {
  25. query += " AND"
  26. }
  27. rows, err := d.db.Query(c, fmt.Sprintf(_listBlacklistSQL, query), from, limit)
  28. if err != nil {
  29. log.Error("ListBlacklist d.db.Query error(%v)", err)
  30. return
  31. }
  32. defer rows.Close()
  33. for rows.Next() {
  34. list := &model.Blacklist{}
  35. err = rows.Scan(&list.AvID, &list.MID, &list.Reason, &list.CType, &list.HasSigned, &list.Nickname)
  36. if err != nil {
  37. log.Error("ListBlacklist rows scan error(%v)", err)
  38. return
  39. }
  40. backlists = append(backlists, list)
  41. }
  42. err = rows.Err()
  43. return
  44. }
  45. // GetExecuteOrder get execute order by date
  46. func (d *Dao) GetExecuteOrder(c context.Context, startTime, endTime time.Time) (executeOrders []*model.ExecuteOrder, err error) {
  47. rows, err := d.rddb.Query(c, _queryExecuteOrderSQL, startTime, endTime)
  48. if err != nil {
  49. log.Error("GetExecuteOrder d.db.Query error(%v)", err)
  50. return
  51. }
  52. defer rows.Close()
  53. for rows.Next() {
  54. order := &model.ExecuteOrder{}
  55. err = rows.Scan(&order.AvID, &order.MID, &order.CTime)
  56. if err != nil {
  57. log.Error("GetExecuteOrder rows.Scan error(%v)", err)
  58. return
  59. }
  60. if order.AvID > 0 {
  61. executeOrders = append(executeOrders, order)
  62. }
  63. }
  64. err = rows.Err()
  65. return
  66. }
  67. // GetLastCtime get last ctime by query
  68. func (d *Dao) GetLastCtime(c context.Context, reason int) (ctime int64, err error) {
  69. row := d.db.QueryRow(c, _queryOneByReasonSQL, reason)
  70. var t time.Time
  71. err = row.Scan(&t)
  72. if err != nil {
  73. if err == sql.ErrNoRows {
  74. err = nil
  75. ctime = 0
  76. } else {
  77. log.Error("GetLastCtime row Scan error(%v)", err)
  78. }
  79. } else {
  80. ctime = t.Unix()
  81. }
  82. return
  83. }
  84. // AddBlacklistBatch add batch to blacklist
  85. func (d *Dao) AddBlacklistBatch(c context.Context, blacklist []*model.Blacklist) (count int64, err error) {
  86. if len(blacklist) == 0 {
  87. return
  88. }
  89. var vals string
  90. for _, row := range blacklist {
  91. vals += fmt.Sprintf("(%d, %d, %d, %d, %d, '%s'),", row.AvID, row.MID, row.Reason, row.CType, row.HasSigned, row.Nickname)
  92. }
  93. if len(vals) > 0 {
  94. vals = vals[0 : len(vals)-1]
  95. }
  96. res, err := d.db.Exec(c, fmt.Sprintf(_addBlacklistBatchSQL, vals))
  97. if err != nil {
  98. log.Error("AddBlacklistBatch d.db.Exec error(%v)", err)
  99. return
  100. }
  101. return res.RowsAffected()
  102. }
  103. // GetHasSignUpInfo get all has signed up info
  104. func (d *Dao) GetHasSignUpInfo(c context.Context, offset, limit int, m map[int64]string) (err error) {
  105. rows, err := d.db.Query(c, _queryHasSignUpInfoSQL, offset, limit)
  106. if err != nil {
  107. log.Error("GetHasSignUpInfo d.db.Query error(%v)", err)
  108. return
  109. }
  110. defer rows.Close()
  111. for rows.Next() {
  112. var mid int64
  113. var nickname string
  114. err = rows.Scan(&mid, &nickname)
  115. if err != nil {
  116. log.Error("GetHasSignUpInfo rows.Scan error(%v)", err)
  117. return
  118. }
  119. m[mid] = nickname
  120. }
  121. err = rows.Err()
  122. return
  123. }