123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- package dao
- import (
- "context"
- "fmt"
- "time"
- "go-common/app/interface/main/feedback/model"
- "go-common/library/database/sql"
- "go-common/library/log"
- "go-common/library/xstr"
- "strings"
- )
- const (
- _selSsn = "SELECT id,mid,content,img_url,log_url,state,ctime FROM session WHERE buvid=? AND system=? AND version=? AND mid=?"
- _selSsnByMid = "SELECT id,mid,content,img_url,log_url,state,ctime FROM session WHERE mid=? AND platform IN (%s)"
- _selSSnCntByMid = `SELECT COUNT(id) AS count FROM session WHERE mid=? AND state IN (0,1,2) AND platform IN ("ugc","article")`
- _inSsn = "INSERT INTO session (buvid,system,version,mid,aid,content,img_url,log_url,device,channel,ip,net_state,net_operator,agency_area,platform,browser,qq,email,state,laster_time,ctime,mtime) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
- _upSsn = "UPDATE session SET device=?,channel=?,ip=?,net_state=?,net_operator=?,agency_area=?,platform=?,browser=?,qq=?,email=?,state=?,laster_time=?,mtime=? WHERE id=?"
- _upSsnMtime = "UPDATE session SET mtime=? WHERE id=?"
- _upSsnState = "UPDATE session SET state=? where id=?"
- _selTagByPlat = "SELECT id,name,platform,type FROM tag where type=? AND platform IN (%s)"
- _selSsnIDbByTagID = "SELECT session_id FROM session_tag WHERE tag_id IN (%s)"
- _selSSnBySsnID = "SELECT id,content,ctime,state FROM session WHERE id IN (%s) AND state IN (%s) AND session.ctime>? AND session.ctime<? ORDER BY id DESC"
- _selSSnBySsnIDAllSate = "SELECT id,content,ctime,state FROM session WHERE id IN (%s) AND session.ctime>? AND session.ctime<? ORDER BY id DESC"
- _selSSnID = "select id from session where id=? limit 1"
- )
- // JudgeSsnRecord judge session is exist or not .
- func (d *Dao) JudgeSsnRecord(c context.Context, sid int64) (cnt int, err error) {
- res, err := d.selSSnID.Exec(c, sid)
- if err != nil {
- log.Error("d.upSsnSta.Exec error(%v)", err)
- return
- }
- res.RowsAffected()
- return
- }
- // Session select feedback session
- func (d *Dao) Session(c context.Context, buvid, system, version string, mid int64) (ssn *model.Session, err error) {
- row := d.selSsn.QueryRow(c, buvid, system, version, mid)
- ssn = &model.Session{}
- if err = row.Scan(&ssn.ID, &ssn.Mid, &ssn.Content, &ssn.ImgURL, &ssn.LogURL, &ssn.State, &ssn.CTime); err != nil {
- if err == sql.ErrNoRows {
- err, ssn = nil, nil
- } else {
- log.Error("row.Scan() error(%v)", err)
- }
- }
- return
- }
- //SessionCount session count.
- func (d *Dao) SessionCount(c context.Context, mid int64) (cnt int, err error) {
- row := d.selSSnCntByMid.QueryRow(c, mid)
- if err = row.Scan(&cnt); err != nil {
- log.Error("row.Scan error(%v)", err)
- }
- return
- }
- // UpSsnMtime up ssn mtime.
- func (d *Dao) UpSsnMtime(c context.Context, now time.Time, id int64) (err error) {
- _, err = d.upSsnMtime.Exec(c, now, id)
- if err != nil {
- log.Error("d.upSsnMtime error(%v)", err)
- }
- return
- }
- // TxUpSsnMtime up ssn mtime.
- func (d *Dao) TxUpSsnMtime(tx *sql.Tx, now time.Time, id int64) (err error) {
- _, err = tx.Exec(_upSsnMtime, now, id)
- if err != nil {
- log.Error("d.upSsnMtime error(%v)", err)
- }
- return
- }
- // SessionIDByTagID session find by time state and mid .
- func (d *Dao) SessionIDByTagID(c context.Context, tagID []int64) (sid []int64, err error) {
- rows, err := d.dbMs.Query(c, fmt.Sprintf(_selSsnIDbByTagID, xstr.JoinInts(tagID)))
- if err != nil {
- log.Error("d.dbMs.Query error(%v)", err)
- return
- }
- defer rows.Close()
- for rows.Next() {
- var id int64
- if err = rows.Scan(&id); err != nil {
- log.Error("row.Scan() error(%v)", err)
- return
- }
- sid = append(sid, id)
- }
- return
- }
- // SessionBySsnID get session by ssnID
- func (d *Dao) SessionBySsnID(c context.Context, sid []int64, state string, start, end time.Time) (ssns []*model.Session, err error) {
- rows, err := d.dbMs.Query(c, fmt.Sprintf(_selSSnBySsnID, xstr.JoinInts(sid), state), start, end)
- if err != nil {
- log.Error("d.selSSnBySsnID.Query error(%v)", err)
- return
- }
- defer rows.Close()
- for rows.Next() {
- ssn := &model.Session{}
- if err = rows.Scan(&ssn.ID, &ssn.Content, &ssn.CTime, &ssn.State); err != nil {
- log.Error("rows.Scan error(%v)", err)
- return
- }
- ssns = append(ssns, ssn)
- }
- return
- }
- // SSnBySsnIDAllSate get all SSn by ssnID all sate.
- func (d *Dao) SSnBySsnIDAllSate(c context.Context, sid []int64, start, end time.Time) (ssns []*model.Session, err error) {
- rows, err := d.dbMs.Query(c, fmt.Sprintf(_selSSnBySsnIDAllSate, xstr.JoinInts(sid)), start, end)
- if err != nil {
- log.Error("d.selSSnBySsnID.Query error(%v)", err)
- return
- }
- defer rows.Close()
- for rows.Next() {
- ssn := &model.Session{}
- if err = rows.Scan(&ssn.ID, &ssn.Content, &ssn.CTime, &ssn.State); err != nil {
- log.Error("rows.Scan error(%v)", err)
- return
- }
- ssns = append(ssns, ssn)
- }
- return
- }
- // SessionByMid select feedback session by mid
- func (d *Dao) SessionByMid(c context.Context, mid int64, platform string) (ssns []*model.Session, err error) {
- rows, err := d.dbMs.Query(c, fmt.Sprintf(_selSsnByMid, platConvert(platform)), mid)
- if err != nil {
- log.Error("d.dbMs.Query error(%v)", err)
- return
- }
- defer rows.Close()
- ssns = []*model.Session{}
- for rows.Next() {
- ssn := &model.Session{}
- if err = rows.Scan(&ssn.ID, &ssn.Mid, &ssn.Content, &ssn.ImgURL, &ssn.LogURL, &ssn.State, &ssn.CTime); err != nil {
- log.Error("row.Scan() error(%v)", err)
- return
- }
- ssns = append(ssns, ssn)
- }
- return
- }
- // TxUpdateSessionState up date session state.
- func (d *Dao) TxUpdateSessionState(tx *sql.Tx, state int, sid int64) (err error) {
- res, err := tx.Exec(_upSsnState, state, sid)
- if err != nil {
- log.Error("d.upSsnSta.Exec error(%v)", err)
- return
- }
- _, err = res.RowsAffected()
- return
- }
- // UpdateSessionState update session state.
- func (d *Dao) UpdateSessionState(c context.Context, state int, sid int64) (err error) {
- res, err := d.upSsnSta.Exec(c, state, sid)
- if err != nil {
- log.Error("d.upSsnSta.Exec error(%v)", err)
- return
- }
- _, err = res.RowsAffected()
- return
- }
- // Tags get tags.
- func (d *Dao) Tags(c context.Context, mold int, platform string) (tMap map[string][]*model.Tag, err error) {
- rows, err := d.dbMs.Query(c, fmt.Sprintf(_selTagByPlat, platConvert(platform)), mold)
- if err != nil {
- log.Error("d.selTagByPlat.Query error(%v)", err)
- return
- }
- defer rows.Close()
- tMap = make(map[string][]*model.Tag)
- for rows.Next() {
- tag := &model.Tag{}
- if err = rows.Scan(&tag.ID, &tag.Name, &tag.Platform, &tag.Type); err != nil {
- log.Error("row.Scan() error(%v)", err)
- return
- }
- if tag.Type == 0 {
- tMap[tag.Platform] = append(tMap[tag.Platform], tag)
- }
- }
- return
- }
- // AddSession add feedback session
- func (d *Dao) AddSession(c context.Context, s *model.Session) (id int64, err error) {
- res, err := d.inSsn.Exec(c, s.Buvid, s.System, s.Version, s.Mid, s.Aid, s.Content, s.ImgURL, s.LogURL, s.Device, s.Channel, s.IP, s.NetState, s.NetOperator, s.AgencyArea, s.Platform, s.Browser, s.QQ, s.Email, s.State, s.LasterTime, s.CTime, s.MTime)
- if err != nil {
- log.Error("AddSession tx.Exec() error(%v)", err)
- return
- }
- return res.LastInsertId()
- }
- // TxAddSession add session
- func (d *Dao) TxAddSession(tx *sql.Tx, s *model.Session) (id int64, err error) {
- res, err := tx.Exec(_inSsn, s.Buvid, s.System, s.Version, s.Mid, s.Aid, s.Content, s.ImgURL, s.LogURL, s.Device, s.Channel, s.IP, s.NetState, s.NetOperator, s.AgencyArea, s.Platform, s.Browser, s.QQ, s.Email, s.State, s.LasterTime, s.CTime, s.MTime)
- if err != nil {
- log.Error("AddSession tx.Exec() error(%v)", err)
- return
- }
- return res.LastInsertId()
- }
- // AddSessionTag add feedback session and tag.
- func (d *Dao) AddSessionTag(c context.Context, sessionID, tagID int64, now time.Time) (id int64, err error) {
- res, err := d.inSsnTag.Exec(c, sessionID, tagID, now)
- if err != nil {
- log.Error("AddSession tx.Exec() error(%v)", err)
- return
- }
- return res.LastInsertId()
- }
- // TxAddSessionTag add session tag.
- func (d *Dao) TxAddSessionTag(tx *sql.Tx, sessionID, tagID int64, now time.Time) (id int64, err error) {
- res, err := tx.Exec(_inSsnTag, sessionID, tagID, now)
- if err != nil {
- log.Error("TxAddSessionTag tx.Exec() error(%v)", err)
- return
- }
- return res.LastInsertId()
- }
- // UpdateSession update feedback session
- func (d *Dao) UpdateSession(c context.Context, s *model.Session) (affected int64, err error) {
- res, err := d.upSsn.Exec(c, s.Device, s.Channel, s.IP, s.NetState, s.NetOperator, s.AgencyArea, s.Platform, s.Browser, s.QQ, s.Email, s.State, s.LasterTime, s.MTime, s.ID)
- if err != nil {
- log.Error("UpdateSession tx.Exec() error(%v)", err)
- return
- }
- return res.RowsAffected()
- }
- // TagIDBySid get tagid by sid.
- func (d *Dao) TagIDBySid(c context.Context, sids []int64) (tsMap map[int64]int64, err error) {
- rows, err := d.dbMs.Query(c, fmt.Sprintf(_selTagID, xstr.JoinInts(sids)))
- if err != nil {
- log.Error("d.dbMs.Query() error(%v)", err)
- return
- }
- defer rows.Close()
- tsMap = make(map[int64]int64)
- for rows.Next() {
- var (
- tid int64
- sid int64
- )
- if err = rows.Scan(&tid, &sid); err != nil {
- log.Error("row.Scan() error(%v)", err)
- return
- }
- tsMap[tid] = sid
- }
- return
- }
- // platConvert plat covert.
- func platConvert(platform string) (s string) {
- s = `"` + strings.Replace(platform, ",", `","`, -1) + `"`
- return
- }
|