88 lines
2.5 KiB
Go
Raw Permalink Normal View History

2019-04-22 02:59:20 +00:00
package dao
import (
"context"
"fmt"
"go-common/app/interface/main/growup/model"
"go-common/library/log"
xtime "go-common/library/time"
"go-common/library/xstr"
)
const (
// select
_avBreachSQL = "SELECT av_id, mid, cdate, money, ctype, reason FROM av_breach_record WHERE mid = ? AND cdate >= ? AND cdate <= ?"
_avBreachByAvIDSQL = "SELECT av_id, mid, cdate, money, reason FROM av_breach_record WHERE av_id in (%s) AND ctype = ?"
_avBreachByTypeSQL = "SELECT cdate, money FROM av_breach_record WHERE mid=? AND cdate >= ? AND cdate <= ? AND ctype in (%s)"
)
// ListAvBreach list av_breach_record by mid
func (d *Dao) ListAvBreach(c context.Context, mid int64, startTime, endTime string) (records []*model.AvBreach, err error) {
records = make([]*model.AvBreach, 0)
rows, err := d.db.Query(c, _avBreachSQL, mid, startTime, endTime)
if err != nil {
log.Error("ListAvBreach d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := &model.AvBreach{}
err = rows.Scan(&r.AvID, &r.MID, &r.CDate, &r.Money, &r.CType, &r.Reason)
if err != nil {
log.Error("ListAvBreach rows.Scan error(%v)", err)
return
}
records = append(records, r)
}
err = rows.Err()
return
}
// GetAvBreachByType get av breach record
func (d *Dao) GetAvBreachByType(c context.Context, mid int64, begin string, end string, typ []int64) (rs map[xtime.Time]int64, err error) {
if len(typ) == 0 {
typ = []int64{0, 1, 2, 3}
}
rows, err := d.db.Query(c, fmt.Sprintf(_avBreachByTypeSQL, xstr.JoinInts(typ)), mid, begin, end)
if err != nil {
log.Error("GetAvBreachByType d.db.Query error(%v)", err)
return
}
rs = make(map[xtime.Time]int64)
defer rows.Close()
for rows.Next() {
var cdate xtime.Time
var money int64
err = rows.Scan(&cdate, &money)
if err != nil {
log.Error("GetAvBreachByType rows.Scan error(%v)", err)
return
}
rs[cdate] += money
}
return
}
// GetAvBreachs get av_breach map by avids
func (d *Dao) GetAvBreachs(c context.Context, avs []int64, ctype int) (breachs map[int64]*model.AvBreach, err error) {
breachs = make(map[int64]*model.AvBreach)
rows, err := d.db.Query(c, fmt.Sprintf(_avBreachByAvIDSQL, xstr.JoinInts(avs)), ctype)
if err != nil {
log.Error("ListAvBreach d.db.Query error(%v)", err)
return
}
defer rows.Close()
for rows.Next() {
r := &model.AvBreach{}
if err = rows.Scan(&r.AvID, &r.MID, &r.CDate, &r.Money, &r.Reason); err != nil {
log.Error("ListAvBreach rows.Scan error(%v)", err)
return
}
breachs[r.AvID] = r
}
err = rows.Err()
return
}