202 lines
5.7 KiB
Go
202 lines
5.7 KiB
Go
|
package academy
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
|
||
|
"go-common/app/interface/main/creative/model/academy"
|
||
|
"go-common/library/database/sql"
|
||
|
"go-common/library/log"
|
||
|
"go-common/library/xstr"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// select
|
||
|
_getOccSQL = "SELECT id, rank, name, `desc`, main_step, main_software, logo FROM academy_occupation ORDER BY rank ASC"
|
||
|
_getSkillSQL = "SELECT id, oid, name, `desc` FROM academy_skill ORDER BY id ASC"
|
||
|
_getSkillArcSQL = "SELECT id, aid, type, pid, skid, sid FROM academy_arc_skill WHERE state=0"
|
||
|
_getSkillArcCntSQL = "SELECT count(*) FROM academy_arc_skill WHERE state=0"
|
||
|
)
|
||
|
|
||
|
//Occupations get all occupation.
|
||
|
func (d *Dao) Occupations(c context.Context) (res []*academy.Occupation, err error) {
|
||
|
rows, err := d.db.Query(c, _getOccSQL)
|
||
|
if err != nil {
|
||
|
log.Error("Occupations d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
res = make([]*academy.Occupation, 0)
|
||
|
for rows.Next() {
|
||
|
o := &academy.Occupation{}
|
||
|
if err = rows.Scan(&o.ID, &o.Rank, &o.Name, &o.Desc, &o.MainStep, &o.MainSoftWare, &o.Logo); err != nil {
|
||
|
log.Error("Occupations rows.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
res = append(res, o)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
//Skills get all Skill.
|
||
|
func (d *Dao) Skills(c context.Context) (res []*academy.Skill, err error) {
|
||
|
rows, err := d.db.Query(c, _getSkillSQL)
|
||
|
if err != nil {
|
||
|
log.Error("Skills d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
res = make([]*academy.Skill, 0)
|
||
|
for rows.Next() {
|
||
|
o := &academy.Skill{}
|
||
|
if err = rows.Scan(&o.ID, &o.OID, &o.Name, &o.Desc); err != nil {
|
||
|
log.Error("Skills rows.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
res = append(res, o)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
//SkillArcs get all SkillArc.
|
||
|
func (d *Dao) SkillArcs(c context.Context, pids, skids, sids []int64, offset, limit int) (res []*academy.SkillArc, err error) {
|
||
|
var (
|
||
|
whereStr = _getSkillArcSQL
|
||
|
limiStr = " ORDER BY id ASC LIMIT ?,?"
|
||
|
rows *sql.Rows
|
||
|
)
|
||
|
|
||
|
if len(pids) > 0 {
|
||
|
whereStr += fmt.Sprintf(" AND pid IN (%s)"+limiStr, xstr.JoinInts(pids))
|
||
|
} else if len(skids) > 0 {
|
||
|
whereStr += fmt.Sprintf(" AND skid IN (%s)"+limiStr, xstr.JoinInts(skids))
|
||
|
} else if len(sids) > 0 {
|
||
|
whereStr += fmt.Sprintf(" AND sid IN (%s)"+limiStr, xstr.JoinInts(sids))
|
||
|
} else {
|
||
|
whereStr += limiStr
|
||
|
}
|
||
|
|
||
|
rows, err = d.db.Query(c, whereStr, offset, limit)
|
||
|
if err != nil {
|
||
|
log.Error("SkillArcs d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
|
||
|
res = make([]*academy.SkillArc, 0)
|
||
|
for rows.Next() {
|
||
|
o := &academy.SkillArc{}
|
||
|
if err = rows.Scan(&o.ID, &o.AID, &o.Type, &o.PID, &o.SkID, &o.SID); err != nil {
|
||
|
log.Error("SkillArcs rows.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
res = append(res, o)
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
//SkillArcCount get all skill achive count.
|
||
|
func (d *Dao) SkillArcCount(c context.Context, pids, skids, sids []int64) (count int, err error) {
|
||
|
|
||
|
var (
|
||
|
whereStr = _getSkillArcCntSQL
|
||
|
)
|
||
|
|
||
|
if len(pids) > 0 {
|
||
|
whereStr += fmt.Sprintf(" AND pid IN (%s)", xstr.JoinInts(pids))
|
||
|
} else if len(skids) > 0 {
|
||
|
whereStr += fmt.Sprintf(" AND skid IN (%s)", xstr.JoinInts(skids))
|
||
|
} else if len(sids) > 0 {
|
||
|
whereStr += fmt.Sprintf(" AND sid IN (%s)", xstr.JoinInts(sids))
|
||
|
}
|
||
|
|
||
|
if err = d.db.QueryRow(c, whereStr).Scan(&count); err != nil {
|
||
|
if err == sql.ErrNoRows {
|
||
|
err = nil
|
||
|
return
|
||
|
}
|
||
|
log.Error("d.db.QueryRow error(%v)", err)
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// PlayAdd add play archive.
|
||
|
func (d *Dao) PlayAdd(c context.Context, p *academy.Play) (id int64, err error) {
|
||
|
_inPlaySQL := "INSERT INTO academy_playlist (mid, aid, business, watch, ctime, mtime) VALUES (?, ?, ?, ?, ?,?) ON DUPLICATE KEY UPDATE state=0,watch=?,business=?,mtime=?"
|
||
|
|
||
|
res, err := d.db.Exec(c, _inPlaySQL, p.MID, p.AID, p.Business, p.Watch, p.CTime, p.MTime, p.Watch, p.Business, p.MTime)
|
||
|
if err != nil {
|
||
|
log.Error("PlayAdd d.db.Exec error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
id, err = res.RowsAffected()
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// PlayDel add play archive.
|
||
|
func (d *Dao) PlayDel(c context.Context, p *academy.Play) (id int64, err error) {
|
||
|
_upPlaySQL := "UPDATE academy_playlist SET state=? WHERE mid=? AND aid=? AND business=?"
|
||
|
|
||
|
res, err := d.db.Exec(c, _upPlaySQL, -1, p.MID, p.AID, p.Business) //-1 删除
|
||
|
if err != nil {
|
||
|
log.Error("PlayDel d.db.Exec error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
id, err = res.RowsAffected()
|
||
|
return
|
||
|
}
|
||
|
|
||
|
//Plays get all play by mid.
|
||
|
func (d *Dao) Plays(c context.Context, mid int64, offset, limit int) (res []*academy.Play, err error) {
|
||
|
_getPlaySSQL := "SELECT mid, aid, business, watch, ctime, mtime FROM academy_playlist WHERE state=0 AND mid=? ORDER BY mtime DESC LIMIT ?,?"
|
||
|
|
||
|
rows, err := d.db.Query(c, _getPlaySSQL, mid, offset, limit)
|
||
|
if err != nil {
|
||
|
log.Error("Plays d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
res = make([]*academy.Play, 0)
|
||
|
|
||
|
for rows.Next() {
|
||
|
o := &academy.Play{}
|
||
|
if err = rows.Scan(&o.MID, &o.AID, &o.Business, &o.Watch, &o.CTime, &o.MTime); err != nil {
|
||
|
log.Error("Plays rows.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
res = append(res, o)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
//PlayCount get all play achive count.
|
||
|
func (d *Dao) PlayCount(c context.Context, mid int64) (count int, err error) {
|
||
|
_getPlayCntSQL := "SELECT count(*) FROM academy_playlist WHERE state=0 AND mid=?"
|
||
|
|
||
|
if err = d.db.QueryRow(c, _getPlayCntSQL, mid).Scan(&count); err != nil {
|
||
|
if err == sql.ErrNoRows {
|
||
|
err = nil
|
||
|
return
|
||
|
}
|
||
|
log.Error("d.db.QueryRow error(%v)", err)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
//Play get play achive info.
|
||
|
func (d *Dao) Play(c context.Context, p *academy.Play) (res *academy.Play, err error) {
|
||
|
_getPlaySQL := "SELECT mid, aid, business, watch, ctime, mtime FROM academy_playlist WHERE mid=? AND aid=? AND business=? "
|
||
|
|
||
|
res = &academy.Play{}
|
||
|
if err = d.db.QueryRow(c, _getPlaySQL, p.MID, p.AID, p.Business).Scan(&res.MID, &res.AID, &res.Business, &res.Watch, &res.CTime, &res.MTime); err != nil {
|
||
|
if err == sql.ErrNoRows {
|
||
|
err = nil
|
||
|
return
|
||
|
}
|
||
|
log.Error("d.db.QueryRow error(%v)", err)
|
||
|
}
|
||
|
return
|
||
|
}
|