136 lines
3.9 KiB
Go
136 lines
3.9 KiB
Go
|
package dao
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"database/sql"
|
||
|
"fmt"
|
||
|
"time"
|
||
|
|
||
|
"go-common/app/job/main/growup/model"
|
||
|
"go-common/library/log"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// list all blacklist
|
||
|
_listBlacklistSQL = "SELECT av_id,mid,reason,ctype,has_signed,nickname FROM av_black_list WHERE %s is_delete = 0 LIMIT ?,?"
|
||
|
// query last record ctime by reason and id
|
||
|
_queryOneByReasonSQL = "SELECT ctime FROM av_black_list WHERE reason = ? AND is_delete = 0 ORDER BY id DESC LIMIT 1"
|
||
|
// query record from bilibili_business_up_cooperate.business_order_sheet
|
||
|
_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"
|
||
|
|
||
|
// add to blacklist batch
|
||
|
_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)"
|
||
|
// query mid, nickname from up_info_video
|
||
|
_queryHasSignUpInfoSQL = "SELECT mid, nickname FROM up_info_video where account_state = 3 AND is_deleted = 0 limit ?, ?"
|
||
|
)
|
||
|
|
||
|
// ListBlacklist list all blacklist
|
||
|
func (d *Dao) ListBlacklist(c context.Context, query string, from, limit int) (backlists []*model.Blacklist, err error) {
|
||
|
if query != "" {
|
||
|
query += " AND"
|
||
|
}
|
||
|
rows, err := d.db.Query(c, fmt.Sprintf(_listBlacklistSQL, query), from, limit)
|
||
|
if err != nil {
|
||
|
log.Error("ListBlacklist d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
for rows.Next() {
|
||
|
list := &model.Blacklist{}
|
||
|
err = rows.Scan(&list.AvID, &list.MID, &list.Reason, &list.CType, &list.HasSigned, &list.Nickname)
|
||
|
if err != nil {
|
||
|
log.Error("ListBlacklist rows scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
backlists = append(backlists, list)
|
||
|
}
|
||
|
|
||
|
err = rows.Err()
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// GetExecuteOrder get execute order by date
|
||
|
func (d *Dao) GetExecuteOrder(c context.Context, startTime, endTime time.Time) (executeOrders []*model.ExecuteOrder, err error) {
|
||
|
rows, err := d.rddb.Query(c, _queryExecuteOrderSQL, startTime, endTime)
|
||
|
if err != nil {
|
||
|
log.Error("GetExecuteOrder d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
for rows.Next() {
|
||
|
order := &model.ExecuteOrder{}
|
||
|
err = rows.Scan(&order.AvID, &order.MID, &order.CTime)
|
||
|
if err != nil {
|
||
|
log.Error("GetExecuteOrder rows.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
if order.AvID > 0 {
|
||
|
executeOrders = append(executeOrders, order)
|
||
|
}
|
||
|
}
|
||
|
err = rows.Err()
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// GetLastCtime get last ctime by query
|
||
|
func (d *Dao) GetLastCtime(c context.Context, reason int) (ctime int64, err error) {
|
||
|
row := d.db.QueryRow(c, _queryOneByReasonSQL, reason)
|
||
|
var t time.Time
|
||
|
err = row.Scan(&t)
|
||
|
if err != nil {
|
||
|
if err == sql.ErrNoRows {
|
||
|
err = nil
|
||
|
ctime = 0
|
||
|
} else {
|
||
|
log.Error("GetLastCtime row Scan error(%v)", err)
|
||
|
}
|
||
|
} else {
|
||
|
ctime = t.Unix()
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// AddBlacklistBatch add batch to blacklist
|
||
|
func (d *Dao) AddBlacklistBatch(c context.Context, blacklist []*model.Blacklist) (count int64, err error) {
|
||
|
if len(blacklist) == 0 {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
var vals string
|
||
|
for _, row := range blacklist {
|
||
|
vals += fmt.Sprintf("(%d, %d, %d, %d, %d, '%s'),", row.AvID, row.MID, row.Reason, row.CType, row.HasSigned, row.Nickname)
|
||
|
}
|
||
|
|
||
|
if len(vals) > 0 {
|
||
|
vals = vals[0 : len(vals)-1]
|
||
|
}
|
||
|
res, err := d.db.Exec(c, fmt.Sprintf(_addBlacklistBatchSQL, vals))
|
||
|
if err != nil {
|
||
|
log.Error("AddBlacklistBatch d.db.Exec error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
return res.RowsAffected()
|
||
|
}
|
||
|
|
||
|
// GetHasSignUpInfo get all has signed up info
|
||
|
func (d *Dao) GetHasSignUpInfo(c context.Context, offset, limit int, m map[int64]string) (err error) {
|
||
|
rows, err := d.db.Query(c, _queryHasSignUpInfoSQL, offset, limit)
|
||
|
if err != nil {
|
||
|
log.Error("GetHasSignUpInfo d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
for rows.Next() {
|
||
|
var mid int64
|
||
|
var nickname string
|
||
|
err = rows.Scan(&mid, &nickname)
|
||
|
if err != nil {
|
||
|
log.Error("GetHasSignUpInfo rows.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
m[mid] = nickname
|
||
|
}
|
||
|
err = rows.Err()
|
||
|
return
|
||
|
}
|