package video import ( "github.com/beego/beego/v2/client/orm" "github.com/rdlucklib/rdluck_tools/paging" "strconv" "strings" "time" ) type Video struct { VideoId int `orm:"column(video_id);pk" description:"视频id"` Title string `description:"视频标题"` VideoUrl string `description:"视频地址"` VideoCoverUrl string `description:"视频封面地址"` Status int `description:"视频状态:0:未发布,1:已发布"` PublishTime time.Time `description:"视频发布时间"` PlaySeconds uint32 `description:"视频播放时长"` CreateTime time.Time `description:"视频创建时间"` ModifyTime time.Time `description:"视频修改时间"` } //视频保存请求参数 type VideoSaveReq struct { Title string `description:"视频标题"` VideoUrl string `description:"视频地址"` VideoCoverUrl string `description:"视频封面地址"` TagsIdStr string `description:"标签id,多个用英文逗号隔开"` PlaySeconds uint32 `description:"视频播放时长"` } //视频保存返回参数 type VideoSaveResp struct { VideoId int `description:"视频id"` } //新增视频 func AddVideo(item *Video) (newId int64, err error) { o := orm.NewOrmUsingDB("rddp") newId, err = o.Insert(item) return } //申请转正请求参数 type VideoDeleteReq struct { VideoId int `description:"视频id"` } func DeleteVideo(videoId int) (err error) { o := orm.NewOrmUsingDB("rddp") to, err := o.Begin() if err != nil { return } defer func() { if err != nil { _ = to.Rollback() } else { _ = to.Commit() } }() sql := `DELETE FROM video WHERE video_id=? ` _, err = to.Raw(sql, videoId).Exec() if err != nil { return } tagSql := ` DELETE FROM video_tags WHERE video_id=? ` _, err = to.Raw(tagSql, videoId).Exec() if err != nil { return } return } func GetVideoIdByKeyWord(keyWord string) (video_id string, err error) { o := orm.NewOrmUsingDB("rddp") sql := ` SELECT GROUP_CONCAT(DISTINCT a.video_id) AS video_id FROM video_tags AS a INNER JOIN tags AS b ON a.tags_id=b.tags_id WHERE b.tags_name LIKE '%` + keyWord + `%'` err = o.Raw(sql).QueryRow(&video_id) return } func GetVideoListCount(condition string, pars []interface{}) (count int, err error) { o := orm.NewOrmUsingDB("rddp") sql := `SELECT COUNT(1) AS count FROM video AS a WHERE 1=1 ` if condition != "" { sql += condition } err = o.Raw(sql, pars).QueryRow(&count) return } type VideoList struct { VideoId int `description:"视频id"` Title string `description:"视频标题"` VideoUrl string `description:"视频地址"` VideoCoverUrl string `description:"视频封面地址"` Status int `description:"视频状态:0:未发布,1:已发布"` PublishTime time.Time `description:"视频发布时间"` PlaySeconds uint32 `description:"视频播放时长"` CreateTime time.Time `description:"视频创建时间"` ModifyTime time.Time `description:"视频修改时间"` TagsName string `description:"标签名称"` TagsId string `description:"标签ID"` } func GetVideoList(condition string, pars []interface{}, startSize, pageSize int) (items []*VideoList, err error) { o := orm.NewOrmUsingDB("rddp") sql := `SELECT a.*,GROUP_CONCAT(c.tags_name SEPARATOR ',') AS tags_name ,GROUP_CONCAT(c.tags_id SEPARATOR ',') AS tags_id FROM video AS a INNER JOIN video_tags AS b ON a.video_id=b.video_id INNER JOIN tags AS c ON b.tags_id=c.tags_id ` if condition != "" { sql += condition } sql += ` GROUP BY a.video_id ORDER BY a.modify_time DESC LIMIT ?,? ` _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items) return } type VideoListResp struct { Paging *paging.PagingItem List []*VideoList } //申请转正请求参数 type VideoPublishReq struct { VideoIds string `description:"视频id,多个用英文逗号隔开"` } func PublishVideo(videoIds string) (err error) { o := orm.NewOrmUsingDB("rddp") sql := `UPDATE video SET status=1,publish_time=NOW(),modify_time=NOW() WHERE video_id IN(` + videoIds + `)` _, err = o.Raw(sql).Exec() return } //视频保存请求参数 type VideoEditReq struct { VideoId int `description:"视频id"` Title string `description:"视频标题"` VideoUrl string `description:"视频地址"` VideoCoverUrl string `description:"视频封面地址"` TagsIdStr string `description:"标签id,多个用英文逗号隔开"` PlaySeconds uint32 `description:"视频播放时长"` } //新增视频 func EditVideo(item *Video, tagsIds string) (err error) { o := orm.NewOrmUsingDB("rddp") to, err := o.Begin() if err != nil { return } defer func() { if err != nil { _ = to.Rollback() } else { _ = to.Commit() } }() sql := ` UPDATE video SET title = ?, video_url = ?,video_cover_url = ?, modify_time = NOW(), play_seconds = ? WHERE video_id = ? ` _, err = to.Raw(sql, item.Title, item.VideoUrl, item.VideoCoverUrl, item.PlaySeconds, item.VideoId).Exec() if err != nil { return } sql = ` DELETE FROM video_tags WHERE video_id = ? ` _, err = to.Raw(sql, item.VideoId).Exec() if err != nil { return } if tagsIds != "" { tagsArr := strings.Split(tagsIds, ",") for _, v := range tagsArr { tagId, _ := strconv.Atoi(v) tagItem := new(VideoTags) tagItem.VideoId = item.VideoId tagItem.TagsId = tagId err = AddVideoTags(tagItem) if err != nil { return } } } return } func PublishVideoCancel(videoIds string) (err error) { o := orm.NewOrmUsingDB("rddp") sql := `UPDATE video SET status=0,publish_time=null,modify_time=NOW() WHERE video_id IN(` + videoIds + `)` _, err = o.Raw(sql).Exec() return } func GetVideoByTitle(title string) (count int, err error) { o := orm.NewOrmUsingDB("rddp") sql := ` SELECT COUNT(1) AS count FROM video WHERE title =? ` err = o.Raw(sql, title).QueryRow(&count) return }