package advisory import ( "fmt" "github.com/beego/beego/v2/client/orm" "github.com/rdlucklib/rdluck_tools/paging" "time" ) type AdvisoryArticle struct { ArticleId int `orm:"column(advisory_article_id);pk"` Title string `description:"标题"` Body string `description:"内容"` Abstract string `description:"简介"` PublishStatus int `description:"发布状态1已发布、0未发布"` ChartPermissionId int `description:"所属分类ID"` ChartPermissionName string `description:"所属分类名称"` ActualPublishTime time.Time `description:"实际发布时间"` TimingPublishTime time.Time `description:"定时发布时间"` LinkName string `description:"链接名称"` LinkAddress string `description:"链接地址"` CreateTime time.Time `description:"创建时间"` LastUpdateTime time.Time `description:"修改时间"` AdminId int `description:"发布者的用户ID"` IsTiming int `description:"是否定时发布,1,定时发布,0不定时"` Code string `description:"分享字符串"` } type AdvisoryArticleLog struct { ArticleId int `orm:"column(advisory_article_id);pk"` Title string `description:"标题"` Body string `description:"内容"` Abstract string `description:"简介"` PublishStatus int `description:"发布状态1已发布、0未发布"` ChartPermissionId int `description:"所属分类ID"` ChartPermissionName string `description:"所属分类名称"` ActualPublishTime time.Time `description:"实际发布时间"` TimingPublishTime time.Time `description:"定时发布时间"` LinkName string `description:"链接名称"` LinkAddress string `description:"链接地址"` CreateTime time.Time `description:"创建时间"` LastUpdateTime time.Time `description:"修改时间"` AdminId int `description:"发布者的用户ID"` } //文章详情 type AdvisoryArticleDetail struct { ArticleId int `orm:"column(advisory_article_id);pk"` Title string `description:"标题"` Body string `description:"内容"` Abstract string `description:"简介"` PublishStatus int `description:"发布状态1已发布、0未发布"` ChartPermissionId int `description:"所属分类ID"` ChartPermissionName string `description:"所属分类名称"` ActualPublishTime string `description:"实际发布时间"` TimingPublishTime string `description:"定时发布时间"` LinkName string `description:"链接名称"` LinkAddress string `description:"链接地址"` CreateTime string `description:"创建时间"` LastUpdateTime string `description:"修改时间"` AdminId int `description:"发布者的用户ID"` Code string `description:"分享字符串"` ArtCode string `orm:"column(code);"` } //预览文章详情带文章所属分类 type PreviewArticleDetail struct { WhatWeek string `description:"周几"` ArticleId int `orm:"column(advisory_article_id);pk"` Title string `description:"标题"` Body string `description:"内容"` ChartPermissionId int `description:"所属分类ID"` ChartPermissionName string `description:"所属分类名称"` LinkName string `description:"链接名称"` LinkAddress string `description:"链接地址"` TimingPublishTime string `description:"定时发布时间"` PublishStatus int `description:"发布状态1已发布、0未发布"` //ClassifyChartPermissionName string `description:"所属一级分类名称"` ActualPublishTime string `description:"实际发布时间"` LastUpdateTime string `description:"上次编辑的时间"` Pv int `description:"PV"` Uv int `description:"UV"` } type PreviewArticleDetailList struct { List []*PreviewArticleDetail } type ArticleAddReq struct { ArticleId int `orm:"column(advisory_article_id);pk"` Title string `description:"标题"` Body string `description:"内容"` Abstract string `description:"文章个简介"` ChartPermissionId int `description:"所属分类ID"` ChartPermissionName string `description:"所属分类名称"` TimingPublishTime string `description:"定时发布时间"` LinkName string `description:"链接名称"` LinkAddress string `description:"链接地址"` } //保存文章 type PreservationArticle struct { ArticleId int `orm:"column(advisory_article_id);pk"` Title string `description:"标题"` Body string `description:"内容"` Abstract string `description:"文章个简介"` ChartPermissionId int `description:"所属分类ID"` ChartPermissionName string `description:"所属分类名称"` TimingPublishTime string `description:"定时发布时间"` LinkName string `description:"链接名称"` LinkAddress string `description:"链接地址"` } type ArticleDeleteReq struct { ArticleId int64 `description:"ArticleId"` } //添加文章 func AddArticle(item *AdvisoryArticle) (newId int64, err error) { fmt.Println(item) o := orm.NewOrm() newId, err = o.Insert(item) fmt.Println(newId) return } //添加文章日志 func AddArticleLog(item *AdvisoryArticleLog) (newId int64, err error) { o := orm.NewOrm() newId, err = o.Insert(item) return } //编辑文章 func EditArticle(item *AdvisoryArticle) (err error) { o := orm.NewOrm() sql := " UPDATE advisory_article SET title = ?, body = ?, chart_permission_id = ?,chart_permission_name=?,timing_publish_time=?,publish_status=?, link_name=?, link_address=?, actual_publish_time=? ,is_timing=? ,last_update_time = NOW() WHERE advisory_article_id = ? " o.Raw(sql, item.Title, item.Body, item.ChartPermissionId, item.ChartPermissionName, item.TimingPublishTime, item.PublishStatus, item.LinkName, item.LinkAddress, item.ActualPublishTime, item.IsTiming, item.ArticleId).Exec() return } //获取文章详情 func GetUserArticleInfo(Uid int, ArticleId int64) (items *AdvisoryArticleDetail, err error) { o := orm.NewOrm() sql := `SELECT * FROM advisory_article WHERE advisory_article_id = ? LIMIT 1` err = o.Raw(sql, ArticleId).QueryRow(&items) return } //获取文章详情 func GetUserArticleInfoByCode(Code string) (items *AdvisoryArticleDetail, err error) { o := orm.NewOrm() sql := `SELECT * FROM advisory_article WHERE publish_status = 1 AND code = ?` err = o.Raw(sql, Code).QueryRow(&items) return } //获取管理员今天是否在这个类目下发文章 func GetUserTodayRticleInfo(Uid int, ChartPermissionId int) (items *AdvisoryArticleDetail, err error) { o := orm.NewOrm() sql := `SELECT * FROM advisory_article WHERE admin_id = ? AND chart_permission_id = ? AND publish_status = 1 AND last_update_time>=date(now()) and last_update_time<DATE_ADD(date(now()),INTERVAL 1 DAY) LIMIT 1` err = o.Raw(sql, Uid, ChartPermissionId).QueryRow(&items) return } type PreviewRsp struct { List []*PreviewArticleDetail Item *PreviewArticleDetail } //获取用户最新编辑的文章 func GetUserNewArticleInfo(Uid int) (items *PreviewArticleDetail, err error) { o := orm.NewOrm() sql := `SELECT * FROM advisory_article WHERE admin_id = ? AND publish_status = 0 ORDER BY last_update_time DESC LIMIT 1` err = o.Raw(sql, Uid).QueryRow(&items) return } //文章删除 func DeleteArticle(ArticleId int64) (err error) { sql := `DELETE FROM advisory_article WHERE advisory_article_id=? ` o := orm.NewOrm() _, err = o.Raw(sql, ArticleId).Exec() return } //文章取消发布 func UnpublishArticle(ArticleId int) (err error) { sql := `UPDATE advisory_article SET publish_status = 0 WHERE advisory_article_id=? ` o := orm.NewOrm() _, err = o.Raw(sql, ArticleId).Exec() return } //校验用户是否关注了添加文章的分类 func CheckIsFllow(fllowList []string, ChartPermissionId string) bool { for _, v := range fllowList { if ChartPermissionId == v { return true } } return false } //获取预览列表 func GetPreviewArticleList(condition string, pars []interface{}, startSize, pageSize int) (items []*PreviewArticleDetail, err error) { sql := ` SELECT * FROM advisory_article WHERE 1=1 ` if condition != "" { sql += condition } sql += ` ORDER BY create_time DESC LIMIT ?,? ` o := orm.NewOrm() _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items) return } //获取预览数量 func GetPreviewArticleListCount(condition string, pars []interface{}) (count int, err error) { sqlCount := ` SELECT COUNT(1) AS count FROM advisory_article WHERE 1=1 ` if condition != "" { sqlCount += condition } o := orm.NewOrm() err = o.Raw(sqlCount, pars).QueryRow(&count) return } //获取文章列表 func GetArticlerList(condition string, pars []interface{}, startSize, pageSize int) (items []*PreviewArticleDetail, err error) { sql := ` SELECT * , (SELECT COUNT(1) FROM advisory_article_view_record AS avr WHERE avr.article_id=advisory_article.advisory_article_id) AS pv, (SELECT COUNT(DISTINCT user_id) FROM advisory_article_view_record AS avr WHERE avr.article_id=advisory_article.advisory_article_id) AS uv FROM advisory_article WHERE 1=1 ` if condition != "" { sql += condition } sql += ` LIMIT ?,? ` o := orm.NewOrm() //o.Using("rddp") _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items) return } //获取文章数量 func GetArticleListCount(condition string, pars []interface{}) (count int, err error) { sqlCount := ` SELECT COUNT(1) AS count FROM advisory_article WHERE 1=1 ` if condition != "" { sqlCount += condition } o := orm.NewOrm() //o.Using("rddp") err = o.Raw(sqlCount, pars).QueryRow(&count) return } type PreviewArticleListResp struct { CharList []*ArtChartPermission Preview *PreviewArticleDetail List []*PreviewArticleDetail Paging *paging.PagingItem `description:"分页数据"` } type ArticleListResp struct { List []*PreviewArticleDetail Paging *paging.PagingItem `description:"分页数据"` } //文章预览分类 type ArtChartPermission struct { ChartPermissionId int `description:"权限id"` ClassifyName string `description:"分类名称"` PermissionName string `description:"名称"` ImageUrl string `description:"图片地址"` IsBlongChart bool `description:"是否属于这个分类"` ChildPermission []*ArtChartPermission } //获取一级分类名称 func GetFirstChartPermissionAll() (items []*ArtChartPermission, err error) { o := orm.NewOrm() sql := `SELECT * FROM chart_permission as ch WHERE product_id = 1 AND product_name = 'ficc' GROUP BY ch.classify_name ORDER BY sort ASC; ` _, err = o.Raw(sql).QueryRows(&items) return } func GetChartToClassifyName(ClassifyName string) (items []*ArtChartPermission, err error) { o := orm.NewOrm() sql := `SELECT * FROM chart_permission WHERE product_id = 1 AND product_name = 'ficc' AND classify_name = ? ORDER BY sort ASC ` _, err = o.Raw(sql, ClassifyName).QueryRows(&items) return } //end //定时发布任务 func ArticleTask() (err error) { o := orm.NewOrm() sql := " UPDATE advisory_article SET publish_status = 1, actual_publish_time=NOW() ,last_update_time = NOW() WHERE publish_status = 0 AND is_timing = 1 " _, err = o.Raw(sql).Exec() //fmt.Println(err) return } //获取文章数量 func GetThisDayTimingPublishTimeCount(condition string, pars []interface{}) (count int, err error) { sqlCount := ` SELECT COUNT(1) AS count FROM advisory_article WHERE 1=1 ` if condition != "" { sqlCount += condition } fmt.Println(sqlCount) o := orm.NewOrm() err = o.Raw(sqlCount, pars).QueryRow(&count) return } type PvAndUvResp struct { Pv int `description:"PV"` Uv int `description:"UV"` } //获取PV和Uv数量 func GetPVAndUv() (items []*PvAndUvResp, err error) { o := orm.NewOrm() sql := `SELECT id, (SELECT COUNT( id ) FROM advisory_user_chart_article_record) AS pv, (SELECT COUNT(DISTINCT user_id) AS uv FROM advisory_user_chart_article_record) AS uv FROM advisory_user_chart_article_record LIMIT 0,1 ` _, err = o.Raw(sql).QueryRows(&items) return }