package yb import ( "github.com/beego/beego/v2/client/orm" "hongze/hz_crm_api/utils" "time" ) const ( // 回复状态 ReplyStatusDitribute = 1 ReplyStatusWait = 2 ReplyStatusDone = 3 ReplyStatusStop = 4 ) // CommunityQuestion 问答社区 type CommunityQuestion struct { CommunityQuestionId int `orm:"column(community_question_id);pk" description:"问题ID"` UserId int `description:"提问用户ID"` UserOpenid string `description:"提问用户openid"` Mobile string `description:"用户手机号"` RealName string `description:"用户名"` QuestionContent string `description:"问题描述"` ReplierUserId int `description:"回复人的user_id"` ReplierOpenid string `description:"回复人openid"` ReplierAdminId int `description:"回复人关联的admin_id"` ReplierRealName string `description:"回复人姓名"` ReplierAvatar string `description:"回复人头像"` ResearchGroupFirstId int `description:"回复人研究方向一级分组ID"` ResearchGroupSecondId int `description:"回复人研究方向二级分组ID"` ResearchGroupFirstName string `description:"研究方向一级分组名称"` ResearchGroupSecondName string `description:"研究方向二级分组名称"` DistributeAdminId int `description:"分配人admin_id"` DistributeTime time.Time `description:"分配时间"` VarietyTagId int `description:"标签ID"` VarietyTagName string `description:"标签名称"` IsRead int `description:"用户是否已读 0-未读 1-已读"` ReplierIsRead int `description:"回复人是否已读 0-未读 1-已读"` ReplyStatus int `description:"状态 1-待分配 2-待回答 3-已回答 4-已终止"` MsgSendStatus int `description:"消息推送进度 0-待推送 1-已推送回答人 2-已推送提问人"` ReplyTime time.Time `description:"回复时间"` CreateTime time.Time `description:"提问时间"` ModifyTime time.Time `description:"修改时间"` IsDeleted int `description:"是否已删除 0-否 1-是"` DeleteTime time.Time `description:"删除时间"` StopReason string `description:"终止原因"` } type CommunityQuestionMore struct { CommunityQuestion ClickNum int `description:"点击量"` UserQaCount int `description:"用户提问数"` } func (item *CommunityQuestion) TableName() string { return "yb_community_question" } func (item *CommunityQuestion) Update(cols []string) (err error) { o := orm.NewOrm() _, err = o.Update(item, cols...) return } // GetQuestionById 主键获取提问 func GetQuestionById(questionId int) (item *CommunityQuestion, err error) { o := orm.NewOrm() sql := `SELECT * FROM yb_community_question WHERE community_question_id = ? AND is_deleted = 0 LIMIT 1` err = o.Raw(sql, questionId).QueryRow(&item) return } // GetCommunityQuestionList 获取问答列表 func GetCommunityQuestionList(condition string, pars []interface{}, order string, startSize, pageSize int) (total int, list []*CommunityQuestionMore, err error) { o := orm.NewOrm() sql := `SELECT q.*, l.click_num, c.user_qa_count FROM yb_community_question q LEFT JOIN ( SELECT count(*) AS click_num, community_question_id FROM yb_community_audio_listen_log GROUP BY community_question_id ) AS l ON q.community_question_id = l.community_question_id LEFT JOIN ( SELECT count(*) AS user_qa_count, user_id FROM yb_community_question GROUP BY user_id ) AS c ON q.user_id = c.user_id WHERE q.is_deleted = 0 ` sql += condition if order != "" { sql += order } else { sql += ` ORDER BY q.create_time DESC` } totalSQl := `SELECT COUNT(1) total FROM (` + sql + `) z` if err = o.Raw(totalSQl, pars).QueryRow(&total); err != nil { return } sql += ` LIMIT ?,?` _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list) return } type CommunityQuestionCount struct { ReplyStatus int `json:"reply_status"` Total int `json:"total"` } // GetCommunityQuestionCount 根据状态获取问答数 func GetCommunityQuestionCount() (list []*CommunityQuestionCount, err error) { o := orm.NewOrm() sql := `SELECT reply_status, COUNT(1) total FROM yb_community_question WHERE is_deleted = 0 GROUP BY reply_status` _, err = o.Raw(sql).QueryRows(&list) return } // DeleteQuestion (软)删除问题 func DeleteQuestion(questionId int) (err error) { o := orm.NewOrm() sql := `UPDATE yb_community_question SET is_deleted = 1, delete_time = NOW() WHERE community_question_id = ? LIMIT 1` _, err = o.Raw(sql, questionId).Exec() return } // GetQuestionListByIds 根据IDs获取问答列表 func GetQuestionListByIds(questionIds []int) (list []*CommunityQuestion, err error) { arrLen := len(questionIds) if arrLen == 0 { return } o := orm.NewOrm() sql := `SELECT * FROM yb_community_question WHERE community_question_id IN (` + utils.GetOrmInReplace(arrLen) + `) AND is_deleted = 0` _, err = o.Raw(sql, questionIds).QueryRows(&list) return } // GetQuestionByIds 根据IDs获取问答列表 func GetQuestionByIds(questionIds []int) (list []*CommunityQuestion, err error) { arrLen := len(questionIds) if arrLen == 0 { return } o := orm.NewOrm() sql := `SELECT * FROM yb_community_question WHERE community_question_id IN (` + utils.GetOrmInReplace(arrLen) + `)` _, err = o.Raw(sql, questionIds).QueryRows(&list) return } // CommunityQuestionDetail 问答社区详情 type CommunityQuestionDetail struct { CommunityQuestionId int `description:"问题ID"` Mobile string `description:"用户手机号"` RealName string `description:"用户名"` QuestionContent string `description:"问题描述"` ResearchGroupFirstName string `description:"研究方向一级分组名称"` ResearchGroupSecondName string `description:"研究方向二级分组名称"` VarietyTagName string `description:"标签名称"` ReplyStatus int `description:"状态 1-待分配 2-待回答 3-已回答 4-已终止"` MsgSendStatus int `description:"消息推送进度 0-待推送 1-已推送回答人 2-已推送提问人"` ReplyTime string `description:"回复时间"` CreateTime string `description:"提问时间"` StopReason string `description:"终止原因"` ProcessList []*CommunityQuestionProcessItem }