1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package services
- import (
- "context"
- "errors"
- "fmt"
- "hongze/hongze_task/models"
- "hongze/hongze_task/models/yb"
- "hongze/hongze_task/services/alarm_msg"
- "hongze/hongze_task/utils"
- )
- // NotifyNeedAnswerQuestionToResearch 定时通知研究员回复新提问
- func NotifyNeedAnswerQuestionToResearch(ctx context.Context) (err error) {
- errmsg := ""
- //分页处理沙盘表
- defer func() {
- if err != nil {
- go alarm_msg.SendAlarmMsg("NotifyNeedAnswerQuestionToResearch,errmsg:"+errmsg+err.Error(), 3)
- }
- if errmsg != "" {
- utils.FileLog.Info(fmt.Sprintf("NotifyNeedAnswerQuestionToResearch,errmsg:" + errmsg))
- }
- }()
- condition := " AND reply_status = 2 AND replier_admin_id > 0"
- var pars []interface{}
- //遍历查询待回复的问答列表
- total, err := yb.GetCommunityQuestionTotalByCondition(condition, pars)
- if err != nil {
- err = fmt.Errorf("获取问题列表总数失败 Err:%s", err)
- return
- }
- if total == 0 {
- return
- }
- pageSize := 100
- // 根据沙盘列表总数,分页查询
- // 计算总页数
- totalPage := (total + pageSize - 1) / pageSize // 使用整数除法,并添加一页以防有余数
- // 查询管理员信息列表
- adminInfoMap := make(map[int]*models.Admin)
- //查询沙盘列表
- for i := 0; i < totalPage; i += 1 {
- startSize := i * pageSize
- list, e := yb.GetCommunityQuestionListByCondition(condition, pars, "", startSize, pageSize)
- if e != nil {
- err = fmt.Errorf("查询沙盘列表失败 Err:%s\n", e)
- errmsg += err.Error()
- return
- }
- // 查询管理员信息列表,已查询过的不再重复查
- adminIds := make([]int, 0)
- for _, v := range list {
- if _, ok := adminInfoMap[v.ReplierAdminId]; !ok {
- adminIds = append(adminIds, v.ReplierAdminId)
- }
- }
- if len(adminIds) > 0 {
- //查询管理员信息列表
- adminList, e := models.GetAdminByAdminIds(adminIds)
- if e != nil {
- err = fmt.Errorf("查询管理员信息列表失败 Err:%s\n", e)
- errmsg += err.Error()
- return
- }
- for _, v := range adminList {
- adminInfoMap[v.AdminId] = v
- }
- }
- // 查询问答列表
- for _, item := range list {
- // 查询管理员信息列表
- adminInfo, ok := adminInfoMap[item.ReplierAdminId]
- if !ok {
- err = errors.New("发送失败, 研究员账号查询失败")
- errmsg += fmt.Sprintf("发送失败, 研究员账号查询失败, 研究员id:%d, 提问id:%d\n", item.ReplierAdminId, item.CommunityQuestionId)
- continue
- }
- if adminInfo.OpenId == "" {
- err = errors.New("该研究员未关注公众号,无法发送消息通知,回复人openid为空, 不可推送")
- errmsg += fmt.Sprintf("发送失败,该研究员未关注公众号,无法发送消息通知,回复人openid为空, 不可推送 研究员id:%d, 提问id:%d\n", item.ReplierAdminId, item.CommunityQuestionId)
- continue
- }
- // 发送模版消息给研究员
- if e := SendYbQuestionToResearcher(item.CommunityQuestionId, adminInfo.AdminId, adminInfo.OpenId, item.QuestionContent, ""); e != nil {
- errmsg += fmt.Sprintf("发送失败,推送模板消息失败 研究员id:%d, 提问id:%d\n", item.ReplierAdminId, item.CommunityQuestionId)
- return
- }
- }
- }
- return
- }
|