123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- package community
- import (
- "errors"
- "fmt"
- "hongze/hongze_yb/models/request"
- "hongze/hongze_yb/models/response"
- "hongze/hongze_yb/models/tables/user_record"
- "hongze/hongze_yb/models/tables/yb_community_question"
- "hongze/hongze_yb/models/tables/yb_community_question_audio"
- "hongze/hongze_yb/services/company"
- "hongze/hongze_yb/services/user"
- "hongze/hongze_yb/services/wechat"
- "hongze/hongze_yb/utils"
- "time"
- )
- // GetQuestionList 获取问答列表
- func GetQuestionList(pageIndex, pageSize, onlyMine, chartPermissionId, replyStatus, replierUserId int, userInfo user.UserInfo) (resp *response.CommunityQuestionList, err error) {
- condition := make(map[string]interface{})
- condition["is_deleted ="] = 0
- // 用户身份
- isAdmin, _, e := user.GetAdminByUserInfo(userInfo)
- if e != nil {
- err = errors.New("获取用户身份失败 Err:" + e.Error())
- return
- }
- if replierUserId > 0 {
- condition["replier_user_id ="] = replierUserId
- // 回复列表
- if replyStatus > 0 {
- condition["reply_status ="] = replyStatus
- }
- } else {
- // 问题列表
- if onlyMine == 1 {
- if isAdmin {
- condition["replier_user_id ="] = userInfo.UserID
- } else {
- condition["user_id ="] = userInfo.UserID
- }
- } else {
- // 默认只展示已回复的
- condition["reply_status ="] = 3
- }
- }
- if chartPermissionId > 0 {
- condition["chart_permission_id ="] = chartPermissionId
- }
- // 问题列表
- questionList, e := yb_community_question.GetPageListByCondition(condition, pageIndex, pageSize)
- if e != nil {
- err = errors.New("获取问题列表失败 Err:" + e.Error())
- return
- }
- listLen := len(questionList)
- if listLen == 0 {
- return
- }
- idArr := make([]int, 0)
- for i := 0; i < listLen; i++ {
- idArr = append(idArr, questionList[i].CommunityQuestionID)
- }
- // 音频列表
- audioList, e := yb_community_question_audio.GetListByQuestrionIds(idArr)
- if e != nil {
- err = errors.New("获取音频列表失败 Err:" + e.Error())
- return
- }
- // 用户权限
- authOk, permissionInfo, _, e := company.CheckBaseFiccPermission(userInfo.CompanyID, int(userInfo.UserID))
- if e != nil {
- err = errors.New("获取用户权限失败 Err:" + e.Error())
- return
- }
- userId := int(userInfo.UserID)
- resp = new(response.CommunityQuestionList)
- respList := make([]*response.CommunityQuestionItem, 0)
- for _, v := range questionList {
- audios := make([]*response.CommunityQuestionAudioItem, 0)
- for _, a := range audioList {
- if a.CommunityQuestionID == v.CommunityQuestionID {
- audios = append(audios, &response.CommunityQuestionAudioItem{
- CommunityQuestionID: a.CommunityQuestionID,
- AudioURL: a.AudioURL,
- AudioPlaySeconds: a.AudioPlaySeconds,
- AudioSize: a.AudioSize,
- Sort: a.Sort,
- })
- }
- }
- replierRank := fmt.Sprintf("弘则%s研究员", v.ResearchGroupFirstName)
- item := &response.CommunityQuestionItem{
- CommunityQuestionID: v.CommunityQuestionID,
- UserId: v.UserID,
- QuestionContent: v.QuestionContent,
- ReplierRealName: v.ReplierRealName,
- ReplierRank: replierRank,
- ReplierAvatar: v.ReplierAvatar,
- ChartPermissionID: v.CommunityQuestionID,
- ChartPermissionName: v.ChartPermissionName,
- IsRead: v.IsRead,
- CreateTime: v.CreateTime.Format(utils.FormatDateTime),
- ReplyTime: v.ReplyTime.Format(utils.FormatDateTime),
- AuthOk: authOk,
- PermissionInfo: permissionInfo,
- AudioList: audios,
- }
- if !isAdmin && item.IsRead == 0 && item.UserId == userId {
- item.IsTop = 1
- }
- respList = append(respList, item)
- }
- resp.QuestionList = respList
- //resp.PermissionInfo = permissionInfo
- return
- }
- // GetQuestionDetail 获取问答详情
- func GetQuestionDetail(questionId int, userInfo user.UserInfo) (item *response.CommunityQuestionItem, err error) {
- detail, e := yb_community_question.GetItemById(questionId)
- if e != nil {
- err = errors.New("获取问题详情失败 Err:" + e.Error())
- return
- }
- audioList, e := yb_community_question_audio.GetListByQuestionId(questionId)
- if e != nil {
- err = errors.New("获取问题音频失败 Err:" + e.Error())
- return
- }
- audios := make([]*response.CommunityQuestionAudioItem, 0)
- for _, a := range audioList {
- audios = append(audios, &response.CommunityQuestionAudioItem{
- CommunityQuestionID: a.CommunityQuestionID,
- AudioURL: a.AudioURL,
- AudioPlaySeconds: a.AudioPlaySeconds,
- AudioSize: a.AudioSize,
- Sort: a.Sort,
- })
- }
- replierRank := fmt.Sprintf("弘则%s研究员", detail.ResearchGroupFirstName)
- // 用户权限
- authOk, permissionInfo, _, e := company.CheckBaseFiccPermission(userInfo.CompanyID, int(userInfo.UserID))
- if e != nil {
- err = errors.New("获取用户权限失败 Err:" + e.Error())
- return
- }
- item = &response.CommunityQuestionItem{
- CommunityQuestionID: detail.CommunityQuestionID,
- UserId: detail.UserID,
- QuestionContent: detail.QuestionContent,
- ReplierRealName: detail.ReplierRealName,
- ReplierRank: replierRank,
- ReplierAvatar: detail.ReplierAvatar,
- ChartPermissionID: detail.ChartPermissionID,
- ChartPermissionName: detail.ChartPermissionName,
- IsRead: detail.IsRead,
- CreateTime: detail.CreateTime.Format(utils.FormatDateTime),
- ReplyTime: detail.ReplyTime.Format(utils.FormatDateTime),
- AuthOk: authOk,
- PermissionInfo: permissionInfo,
- AudioList: audios,
- }
- return
- }
- // CreateQuestion 新增问答
- func CreateQuestion(userId int, mobile, realName, content string) (err error) {
- // 获取用户公众号openid, 获取不到则置空
- userRecord, e := user_record.GetByUserId(userId, utils.USER_RECORD_PLATFORM_RDDP)
- if e != nil && e == utils.ErrNoRow {
- err = errors.New("获取用户公众号openid失败 Err:" + e.Error())
- return
- }
- openid := ""
- if userRecord != nil {
- openid = userRecord.OpenID
- }
- item := &yb_community_question.YbCommunityQuestion{
- UserID: userId,
- UserOpenid: openid,
- Mobile: mobile,
- RealName: realName,
- QuestionContent: content,
- ReplyStatus: 1,
- }
- if e := item.Create(); e != nil {
- err = errors.New("新增问题失败 Err:" + e.Error())
- }
- return
- }
- // ReplyUserQuestion 回复问题
- func ReplyUserQuestion(replierId, questionId int, audios []*request.ReplyReqAudioList) (err error) {
- item, e := yb_community_question.GetItemById(questionId)
- if e != nil {
- err = errors.New("获取提问信息失败 Err:" + e.Error())
- return
- }
- if item.ReplyStatus < 2 {
- err = errors.New("回复状态有误")
- return
- }
- if item.ReplierUserID != replierId {
- err = errors.New(fmt.Sprintf("回复人与分配人不匹配, 回复人ID: %d, 分配人ID: %d", item.ReplierUserID, replierId))
- return
- }
- // 问题
- updateCols := make([]string, 0)
- updateCols = append(updateCols, "reply_status", "reply_time", "modify_time")
- nowTime := time.Now().Local()
- item.ReplyStatus = 3
- item.ReplyTime = nowTime
- item.ModifyTime = nowTime
- // 音频
- audioList := make([]*yb_community_question_audio.YbCommunityQuestionAudio, 0)
- for _, v := range audios {
- audioList = append(audioList, &yb_community_question_audio.YbCommunityQuestionAudio{
- CommunityQuestionID: questionId,
- AudioURL: v.AudioUrl,
- AudioPlaySeconds: v.AudioPlaySeconds,
- AudioSize: v.AudioSize,
- Sort: v.Sort,
- CreateTime: nowTime,
- })
- }
- if e := yb_community_question.UpdateQuestionAndAudioList(item, updateCols, audioList); e != nil {
- err = errors.New("UpdateQuestionAndAudioList Err:" + e.Error())
- return
- }
- // 推送回复消息给用户
- go wechat.SendQuestionReplyWxMsg(item.CommunityQuestionID, item.UserID, item.UserOpenid, item.QuestionContent)
- return
- }
- // ReadQuestionReply 回复已读
- func ReadQuestionReply(userId int, questionId int) (err error) {
- item, e := yb_community_question.GetItemById(questionId)
- if e != nil {
- err = errors.New("获取提问信息失败 Err:" + e.Error())
- return
- }
- if item.IsRead == 1 {
- return
- }
- if item.UserID == userId {
- updateCols := make([]string, 0)
- updateCols = append(updateCols, "is_read", "modify_time")
- item.IsRead = 1
- item.ModifyTime = time.Now().Local()
- if e = item.Update(updateCols); e != nil {
- err = errors.New("更新问题已读失败 Err:" + e.Error())
- }
- }
- return
- }
- // GetReplyListTotal 获取问答列表数量统计
- func GetReplyListTotal(replierUserId int) (resp *response.CommunityReplyTotal, err error) {
- countList, e := yb_community_question.GetReplierQuestionCount(replierUserId)
- if e != nil {
- err = errors.New("获取回复人问题统计失败 Err:" + e.Error())
- return
- }
- resp = new(response.CommunityReplyTotal)
- for _, v := range countList {
- if v.ReplyStatus == 2 {
- resp.Wait = v.Total
- continue
- }
- if v.ReplyStatus == 3 {
- resp.Replied = v.Total
- }
- }
- resp.Total = resp.Wait + resp.Replied
- return
- }
|