You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
3.9 KiB
135 lines
3.9 KiB
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 |
|
}
|
|
|