go-common/app/job/main/growup/dao/cheat.go
2019-04-22 18:49:16 +08:00

142 lines
4.2 KiB
Go

package dao
import (
"context"
"fmt"
"time"
"go-common/library/log"
"go-common/library/xstr"
"go-common/app/job/main/growup/model"
)
const (
// select
_upsSQL = "SELECT mid,nickname,fans,signed_at,is_deleted FROM up_info_video WHERE account_state = 3 AND mid IN (%s)"
_avIncomeSQL = "SELECT mid,av_id,upload_time,total_income FROM av_income_statis WHERE av_id IN (%s) AND mtime > ?"
_playCountSQL = "SELECT mid,play FROM up_base_statistics WHERE mid IN (%s)"
_avBreachSQL = "SELECT id,av_id FROM av_breach_record WHERE id > ? ORDER BY id LIMIT ?"
_deleteArchiveSpySQL = "DELETE FROM archive_spy_statistics LIMIT ?"
_deleteUpSpySQL = "DELETE FROM up_spy_statistics LIMIT ?"
// insert
_inCheatUpsSQL = "INSERT INTO up_spy_statistics(mid,signed_at,nickname,fans,cheat_fans,play_count,cheat_play_count,account_state) VALUES %s ON DUPLICATE KEY UPDATE signed_at=VALUES(signed_at),nickname=VALUES(nickname),fans=VALUES(fans),cheat_fans=VALUES(cheat_fans),play_count=VALUES(play_count),cheat_play_count=VALUES(cheat_play_count),account_state=VALUES(account_state)"
_inCheatArchiveSQL = "INSERT INTO archive_spy_statistics(archive_id,mid,nickname,upload_time,total_income,cheat_play_count,cheat_favorite,cheat_coin,deducted) VALUES %s ON DUPLICATE KEY UPDATE nickname=VALUES(nickname),total_income=VALUES(total_income),cheat_play_count=VALUES(cheat_play_count),cheat_favorite=VALUES(cheat_favorite),cheat_coin=VALUES(cheat_coin),deducted=VALUES(deducted)"
)
// DelArchiveSpy del archive spy
func (d *Dao) DelArchiveSpy(c context.Context, limit int64) (rows int64, err error) {
res, err := d.db.Exec(c, _deleteArchiveSpySQL, limit)
if err != nil {
return
}
return res.RowsAffected()
}
// DelUpSpy del up spy
func (d *Dao) DelUpSpy(c context.Context, limit int64) (rows int64, err error) {
res, err := d.db.Exec(c, _deleteUpSpySQL, limit)
if err != nil {
return
}
return res.RowsAffected()
}
// AvBreachRecord get av_ids deducted
func (d *Dao) AvBreachRecord(c context.Context, id int64, limit int64) (last int64, ds map[int64]bool, err error) {
rows, err := d.db.Query(c, _avBreachSQL, id, limit)
if err != nil {
return
}
ds = make(map[int64]bool)
defer rows.Close()
for rows.Next() {
var avID int64
err = rows.Scan(&last, &avID)
if err != nil {
return
}
ds[avID] = true
}
return
}
// Ups get ups in up_info_video
func (d *Dao) Ups(c context.Context, mids []int64) (cs map[int64]*model.Cheating, err error) {
rows, err := d.db.Query(c, fmt.Sprintf(_upsSQL, xstr.JoinInts(mids)))
if err != nil {
return
}
defer rows.Close()
cs = make(map[int64]*model.Cheating)
for rows.Next() {
c := &model.Cheating{}
err = rows.Scan(&c.MID, &c.Nickname, &c.Fans, &c.SignedAt, &c.IsDeleted)
if err != nil {
return
}
cs[c.MID] = c
}
return
}
// Avs get avs in av_income_statis
func (d *Dao) Avs(c context.Context, date time.Time, aids []int64) (cs map[int64]*model.Cheating, err error) {
rows, err := d.db.Query(c, fmt.Sprintf(_avIncomeSQL, xstr.JoinInts(aids)), date)
if err != nil {
return
}
defer rows.Close()
cs = make(map[int64]*model.Cheating)
for rows.Next() {
c := &model.Cheating{}
err = rows.Scan(&c.MID, &c.AvID, &c.UploadTime, &c.TotalIncome)
if err != nil {
log.Error("rows.Scan error(%v)", err)
return
}
cs[c.AvID] = c
}
return
}
// PlayCount get play count in up_base_statistics
func (d *Dao) PlayCount(c context.Context, mids []int64) (cs map[int64]int64, err error) {
rows, err := d.db.Query(c, fmt.Sprintf(_playCountSQL, xstr.JoinInts(mids)))
if err != nil {
return
}
cs = make(map[int64]int64)
defer rows.Close()
for rows.Next() {
var mid, count int64
err = rows.Scan(&mid, &count)
if err != nil {
log.Error("rows.Scan error(%v)", err)
return
}
cs[mid] = count
}
return
}
// InsertCheatUps insert cheat ups
func (d *Dao) InsertCheatUps(c context.Context, values string) (rows int64, err error) {
res, err := d.db.Exec(c, fmt.Sprintf(_inCheatUpsSQL, values))
if err != nil {
return
}
return res.RowsAffected()
}
// InsertCheatArchives insert cheat archives
func (d *Dao) InsertCheatArchives(c context.Context, values string) (rows int64, err error) {
res, err := d.db.Exec(c, fmt.Sprintf(_inCheatArchiveSQL, values))
if err != nil {
return
}
return res.RowsAffected()
}