123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
- package yb
- import (
- "github.com/beego/beego/v2/client/orm"
- "hongze/hz_crm_api/utils"
- "time"
- )
- // 研报 用户留言表
- type Comment struct {
- CommentId uint64 `orm:"column(comment_id);pk;" description:"留言ID"`
- UserId uint64 `orm:"column(user_id)" description:"用户id"`
- AdminId uint64 `orm:"column(admin_id)" description:"发布留言回复的管理员ID"`
- ReportId int `orm:"column(report_id)" description:"报告ID"`
- ReportChapterId int `orm:"column(report_chapter_id)" description:"报告章节ID"`
- Content string `orm:"column(content)" description:"留言内容"`
- SysIsRead int8 `orm:"column(sys_is_read)" description:"管理员是否已读 0-未读,1-已读"`
- SysReadTime time.Time `orm:"column(sys_read_time)" description:"管理员已读时间"`
- SysReadAdminId int64 `orm:"column(sys_read_admin_id)" description:"已读的管理员id"`
- ReplyCommentId uint64 `orm:"column(reply_comment_id)" description:"回复的留言ID"`
- IsTop int8 `orm:"column(is_top)" description:"是否置顶(0-未置顶,1-置顶)"`
- IsHot int8 `orm:"column(is_hot)" description:"是否设置精选(0-未设置,1-已设置)"`
- HotTopTime time.Time `orm:"column(hot_top_time)" description:"设置精选或者设置置顶的时间"`
- TopTime time.Time `orm:"column(top_time)" description:"设置置顶的时间"`
- HotTime time.Time `orm:"column(hot_time)" description:"设置精选的时间"`
- Type int8 `orm:"column(type)" description:"留言类型 1-评论 2-回复"`
- Enabled int8 `orm:"column(enabled)" description:"是否有效, 0-无效留言 1-有效留言"`
- IsShowName int8 `orm:"column(is_show_name)" description:"是否匿名 0-匿名,1-不匿名"`
- SourceAgent int `orm:"column(source_agent)" description:"留言入口来源,1:小程序,2:小程序pc, 4:web pc"`
- CreateTime time.Time `orm:"column(create_time)" description:"创建时间"`
- ModifyTime time.Time `orm:"column(modify_time)" description:"修改时间"`
- OldReportId int `orm:"column(old_report_id)" description:"老报告ID"`
- OldReportChapterId int `orm:"column(old_report_chapter_id)" description:"老报告章节ID"`
- }
- type CommentUser struct {
- Comment
- NickName string `description:"昵称"`
- Headimgurl string `description:"用户头像"`
- }
- func (yc *Comment) TableName() string {
- return "yb_comment"
- }
- // CommentIdList 评论id列表
- type CommentIdList struct {
- CommentId int
- }
- // GetCommentReportIdsByCondition 根据条件查询相关的 report
- func GetCommentReportIdsByCondition(condition string, pars []interface{}) (list []*Comment, err error) {
- o := orm.NewOrm()
- var commentIdList []*CommentIdList
- //groupSql := `SELECT * FROM (`
- //查找最大评论的id
- sql := `SELECT MAX(c.comment_id) comment_id FROM yb_comment c
- LEFT JOIN wx_user u ON c.user_id = u.user_id
- WHERE 1=1 and report_id > 0 and c.type = 1 `
- if condition != "" {
- sql += condition
- }
- sql += ` GROUP BY c.report_id, c.report_chapter_id `
- _, err = o.Raw(sql, pars).QueryRows(&commentIdList)
- if err != nil {
- return
- }
- commentIdArr := make([]int, 0)
- for _, v := range commentIdList {
- commentIdArr = append(commentIdArr, v.CommentId)
- }
- lenCommentIdArr := len(commentIdArr)
- if lenCommentIdArr <= 0 {
- return
- }
- groupSql := `SELECT c.report_id, c.report_chapter_id FROM yb_comment AS c
- WHERE comment_id in (` + utils.GetOrmInReplace(lenCommentIdArr) + `) ORDER BY c.sys_is_read asc,c.comment_id desc `
- _, err = o.Raw(groupSql, commentIdArr).QueryRows(&list)
- return
- }
- // GetCommentReportIdsByConditionBak 根据条件查询相关的 report
- func GetCommentReportIdsByConditionBak(condition string, pars []interface{}) (list []*Comment, err error) {
- o := orm.NewOrm()
- sql := `SELECT DISTINCT c.report_id, c.report_chapter_id
- FROM
- yb_comment c
- LEFT JOIN wx_user u ON c.user_id = u.user_id
- WHERE 1=1 and report_id > 0`
- if condition != "" {
- sql += condition
- }
- sql += ` ORDER BY c.sys_is_read asc,c.create_time desc`
- _, err = o.Raw(sql, pars).QueryRows(&list)
- return
- }
- // GetCommentIdsByCondition 根据条件查询相关的 留言ID
- func GetCommentIdsByCondition(condition string, pars []interface{}) (list []*Comment, err error) {
- o := orm.NewOrm()
- sql := `SELECT comment_id
- FROM
- yb_comment c
- LEFT JOIN wx_user u ON c.user_id = u.user_id
- WHERE 1=1 `
- if condition != "" {
- sql += condition
- }
- _, err = o.Raw(sql, pars).QueryRows(&list)
- return
- }
- type ReportCommentNum struct {
- ReportId int `description:"报告Id"`
- ReportChapterId int `description:"报告章节ID"`
- SysIsRead int8 `description:"管理员是否已读 0-未读,1-已读"`
- Num int `description:"汇总数"`
- }
- // StatReportCommentNum 统计报告的留言数
- func StatReportCommentNum(reportIds, reportChapterIds string, condition string, pars []interface{}) (list []*ReportCommentNum, err error) {
- o := orm.NewOrm()
- sql := `SELECT c.report_id, c.report_chapter_id, c.sys_is_read, COUNT(c.comment_id) as num
- FROM
- yb_comment c
- LEFT JOIN wx_user u ON c.user_id = u.user_id
- WHERE type=1 `
- if reportIds != "" && reportChapterIds != "" {
- sql += ` and (c.report_id in (` + reportIds + `) or c.report_chapter_id in (` + reportChapterIds + `) )`
- } else if reportIds != "" {
- sql += ` and c.report_id in (` + reportIds + `)`
- } else if reportChapterIds != "" {
- sql += ` and c.report_chapter_id in (` + reportChapterIds + `)`
- } else {
- return
- }
- if condition != "" {
- sql += condition
- }
- sql += ` GROUP BY report_id,report_chapter_id,sys_is_read`
- _, err = o.Raw(sql, pars).QueryRows(&list)
- return
- }
- // GetCommentListByByCondition 根据报告ID,查询留言列表
- func GetCommentListByByCondition(condition string, pars []interface{}, orderStr string, startSize, pageSize int) (list []*Comment, err error) {
- o := orm.NewOrm()
- sql := `SELECT c.*
- FROM
- yb_comment c
- LEFT JOIN wx_user u ON c.user_id = u.user_id
- WHERE 1=1 and c.type=1`
- if condition != "" {
- sql += condition
- }
- if orderStr != "" {
- sql += orderStr
- } else {
- sql += " ORDER BY create_time DESC , comment_id DESC"
- }
- sql += ` LIMIT ?,?`
- _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
- return
- }
- // GetCommentListTotalByByCondition 根据报告ID,查询留言列表总数
- func GetCommentListTotalByByCondition(condition string, pars []interface{}) (total int64, err error) {
- o := orm.NewOrm()
- sql := `select count(*) from (SELECT c.comment_id
- FROM
- yb_comment c
- LEFT JOIN wx_user u ON c.user_id = u.user_id
- WHERE 1=1 and c.type=1`
- if condition != "" {
- sql += condition
- }
- sql += ") f"
- err = o.Raw(sql, pars).QueryRow(&total)
- return
- }
- // GetReplyListByReplyCommentIds 获取报告的精选留言的回复列表
- func GetReplyListByReplyCommentIds(reportId, reportChapterId int, replyCommentIds string) (list []*Comment, err error) {
- o := orm.NewOrm()
- sql := `SELECT *
- FROM
- yb_comment
- WHERE report_id =? and report_chapter_id=? and type=2 and reply_comment_id in` + replyCommentIds
- sql += ` ORDER BY comment_id ASC`
- _, err = o.Raw(sql, reportId, reportChapterId).QueryRows(&list)
- return
- }
- // GetReplyByReplyCommentIds 获取报告的精选留言的回复列表
- func GetReplyByReplyCommentIds(replyCommentIds string) (list []*Comment, err error) {
- o := orm.NewOrm()
- sql := `SELECT *
- FROM
- yb_comment
- WHERE type=2 and reply_comment_id in` + replyCommentIds
- sql += ` ORDER BY comment_id ASC`
- _, err = o.Raw(sql).QueryRows(&list)
- return
- }
- // UpdateCommentSysIsReadByCommentIds 设置报告相关的留言为已读状态
- func UpdateCommentSysIsReadByCommentIds(adminId int, commentIds string) (err error) {
- o := orm.NewOrm()
- sql := `UPDATE yb_comment SET sys_is_read=1, sys_read_admin_id=?, sys_read_time = NOW(), modify_time=NOW() WHERE sys_is_read=0 and comment_id in (` + commentIds + `)`
- _, err = o.Raw(sql, adminId).Exec()
- return
- }
- // UpdateCommentSysIsRead 设置所有留言为已读状态
- func UpdateCommentSysIsRead(adminId int) (err error) {
- o := orm.NewOrm()
- sql := `UPDATE yb_comment SET sys_is_read=1, sys_read_admin_id=?, sys_read_time = NOW(), modify_time=NOW() WHERE sys_is_read=0`
- _, err = o.Raw(sql, adminId).Exec()
- return
- }
- // AddComment 新增回复
- func AddComment(item *Comment) (id int64, err error) {
- o := orm.NewOrm()
- id, err = o.Insert(item)
- return
- }
- // DeleteComment 标记处理用户所有待处理申请记录
- func DeleteComment(commentId int) (err error) {
- o := orm.NewOrm()
- to, err := o.Begin()
- if err != nil {
- return
- }
- defer func() {
- if err != nil {
- _ = to.Rollback()
- } else {
- _ = to.Commit()
- }
- }()
- //删除评论
- sql := "delete from yb_comment where comment_id=? and type=1"
- _, err = to.Raw(sql, commentId).Exec()
- if err != nil {
- return
- }
- //删除回复
- sql = "delete from yb_comment where reply_comment_id=? and type=2"
- _, err = to.Raw(sql, commentId).Exec()
- return
- }
- // Update 更新留言状态
- func (c *Comment) Update(cols []string) (err error) {
- o := orm.NewOrm()
- _, err = o.Update(c, cols...)
- return
- }
- // DeleteCommentReply 删除管理员回复
- func DeleteCommentReply(commentId int) (err error) {
- sql := `DELETE FROM yb_comment WHERE comment_id=? and type=2 `
- o := orm.NewOrm()
- _, err = o.Raw(sql, commentId).Exec()
- return
- }
- // GetCommentByCommentId 根据留言ID,查询留言详情
- func GetCommentByCommentId(commentId int) (item *Comment, err error) {
- sql := `SELECT
- *
- FROM
- yb_comment
- where comment_id=?`
- err = orm.NewOrm().Raw(sql, commentId).QueryRow(&item)
- return
- }
- // GetCommentUserByCommentId 根据留言ID,查询留言详情
- func GetCommentUserByCommentId(commentId int) (item *CommentUser, err error) {
- sql := `SELECT
- y.*,u.nick_name,u.headimgurl
- FROM
- yb_comment y left join wx_user u on y.user_id=u.user_id
- where y.comment_id=?`
- err = orm.NewOrm().Raw(sql, commentId).QueryRow(&item)
- return
- }
- // GetReplyTotalByCommentId 查询该留言的回复次数
- func GetReplyTotalByCommentId(commentId int) (total int64, err error) {
- o := orm.NewOrm()
- sql := `SELECT count(*)
- FROM
- yb_comment
- WHERE reply_comment_id=? and type=2`
- err = o.Raw(sql, commentId).QueryRow(&total)
- return
- }
- // GetReplyByReplyCommentId 查询该留言的回复次数
- func GetReplyByReplyCommentId(commentId uint64) (list []*Comment, err error) {
- o := orm.NewOrm()
- sql := `SELECT *
- FROM
- yb_comment
- WHERE reply_comment_id=? and type=2 ORDER BY comment_id ASC`
- _, err = o.Raw(sql, commentId).QueryRows(&list)
- return
- }
- type ProductCommentItem struct {
- CommentId int `description:"研报留言ID或者问答社区评论ID"`
- UserId int `description:"用户ID"`
- ReportId int `description:"报告Id"`
- ReportChapterId int `description:"报告章节Id"`
- OldReportId int `description:"老报告Id"`
- CommunityQuestionId int `description:"问答ID"`
- Content string `description:"留言内容"`
- CreateTime time.Time `description:"创建时间"`
- ProductType int `description:"留言板块ID: 1-研报留言,2-问答社区评论"`
- IsTop int8 `description:"是否置顶(0-未置顶,1-置顶)"`
- RealName string `description:"用户姓名"`
- }
- // GetProductCommentList 获取研报留言和问答社区评论列表
- func GetProductCommentList(condition string, pars []interface{}, startSize, pageSize int) (list []*ProductCommentItem, total int64, err error) {
- o := orm.NewOrm()
- sql := `SELECT * from (( SELECT
- comment_id,
- user_id,
- report_id,
- report_chapter_id,
- 0 AS community_question_id,
- content,
- create_time,
- 1 AS product_type,
- is_top,
- real_name,
- old_report_id
- FROM
- yb_comment
- WHERE
- type = 1)
- UNION
- (
- SELECT
- community_question_comment_id AS comment_id,
- user_id,
- 0 AS report_id,
- 0 AS report_chapter_id,
- community_question_id,
- content,
- create_time,
- source+1 AS product_type,
- 0 as is_top,
- real_name,
- 0 as old_report_id
- FROM
- yb_community_question_comment
- WHERE
- type = 1 and enabled=1
- )
- ) as t
- where 1=1`
- if condition != "" {
- sql += condition
- }
- //汇总数据
- totalSQl := `SELECT COUNT(1) total FROM (` + sql + `) as a`
- if err = o.Raw(totalSQl, pars).QueryRow(&total); err != nil {
- return
- }
- sql += ` ORDER BY t.create_time DESC,t.comment_id DESC`
- sql += ` LIMIT ?,?`
- _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
- return
- }
|