question.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. package community
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_yb/global"
  6. "hongze/hongze_yb/models/request"
  7. "hongze/hongze_yb/models/response"
  8. "hongze/hongze_yb/models/tables/admin"
  9. "hongze/hongze_yb/models/tables/company"
  10. "hongze/hongze_yb/models/tables/company_product"
  11. "hongze/hongze_yb/models/tables/research_group"
  12. "hongze/hongze_yb/models/tables/user_record"
  13. "hongze/hongze_yb/models/tables/wx_user"
  14. "hongze/hongze_yb/models/tables/yb_community_audio_listen_log"
  15. "hongze/hongze_yb/models/tables/yb_community_question"
  16. "hongze/hongze_yb/models/tables/yb_community_question_audio"
  17. "hongze/hongze_yb/services/alarm_msg"
  18. "hongze/hongze_yb/services/company_approval_message"
  19. "hongze/hongze_yb/services/user"
  20. "hongze/hongze_yb/services/wechat"
  21. "hongze/hongze_yb/utils"
  22. "strconv"
  23. "strings"
  24. "time"
  25. )
  26. // GetQuestionList 获取问答列表
  27. func GetQuestionList(pageIndex, pageSize, onlyMine, varietyTagId, replyStatus, groupId int, userInfo user.UserInfo) (resp []*response.CommunityQuestionItem, err error) {
  28. condition := " is_deleted = 0"
  29. var pars []interface{}
  30. // 用户身份
  31. isResearcher, _, e := user.GetResearcherByUserInfo(userInfo)
  32. if e != nil {
  33. err = errors.New("获取用户身份失败 Err:" + e.Error())
  34. return
  35. }
  36. if onlyMine == 1 {
  37. if isResearcher { //如果是研究员
  38. if replyStatus == 4 { //分配给研究员未回答的问题
  39. condition += " and replier_user_id=? and reply_status = 2"
  40. pars = append(pars, userInfo.UserID)
  41. } else if replyStatus == 2 { //研究员提问的问题未分配或者未回答的问题
  42. condition += " and user_id=? and reply_status >0 and reply_status <3"
  43. pars = append(pars, userInfo.UserID)
  44. } else if replyStatus == 3 { //分配给研究员的已回答和研究员提问的被回答的问题
  45. condition += " and (replier_user_id=? or user_id=?) and reply_status =3"
  46. pars = append(pars, userInfo.UserID, userInfo.UserID)
  47. } else if replyStatus == 0 { //分配给研究员或者研究员提问的所以问题
  48. condition += " and (replier_user_id=? or user_id=?)"
  49. pars = append(pars, userInfo.UserID, userInfo.UserID)
  50. }
  51. } else {
  52. condition += " and user_id=?"
  53. pars = append(pars, userInfo.UserID)
  54. if replyStatus == 2 { // 普通用户未回答为待分配和未回答
  55. condition += " and reply_status >0 and reply_status <3"
  56. } else if replyStatus == 3 {
  57. condition += " and reply_status = 3"
  58. }
  59. }
  60. } else {
  61. if replyStatus == 3 {
  62. condition += " and reply_status = 3"
  63. }
  64. }
  65. if varietyTagId > 0 {
  66. condition += " and variety_tag_id =?"
  67. pars = append(pars, varietyTagId)
  68. }
  69. if groupId > 0 {
  70. condition += " and research_group_second_id =?"
  71. pars = append(pars, groupId)
  72. }
  73. // 问题列表
  74. questionList, e := yb_community_question.GetPageListByCondition(condition, pars, pageIndex, pageSize)
  75. if e != nil {
  76. err = errors.New("获取问题列表失败 Err:" + e.Error())
  77. return
  78. }
  79. listLen := len(questionList)
  80. if listLen == 0 {
  81. return
  82. }
  83. idArr := make([]int, 0)
  84. for i := 0; i < listLen; i++ {
  85. idArr = append(idArr, questionList[i].CommunityQuestionID)
  86. }
  87. // 音频列表
  88. audioList, e := yb_community_question_audio.GetListByQuestrionIds(idArr)
  89. if e != nil {
  90. err = errors.New("获取音频列表失败 Err:" + e.Error())
  91. return
  92. }
  93. // 用户权限
  94. //authOk, permissionInfo, _, e := company.CheckBaseFiccPermission(userInfo.CompanyID, int(userInfo.UserID))
  95. //if e != nil {
  96. // err = errors.New("获取用户权限失败 Err:" + e.Error())
  97. // return
  98. //}
  99. userId := int(userInfo.UserID)
  100. resp = make([]*response.CommunityQuestionItem, 0)
  101. for _, v := range questionList {
  102. audios := make([]*response.CommunityQuestionAudioItem, 0)
  103. for _, a := range audioList {
  104. if a.CommunityQuestionID == v.CommunityQuestionID {
  105. audios = append(audios, &response.CommunityQuestionAudioItem{
  106. CommunityQuestionAudioID: a.CommunityQuestionAudioID,
  107. CommunityQuestionID: a.CommunityQuestionID,
  108. AudioURL: a.AudioURL,
  109. AudioPlaySeconds: a.AudioPlaySeconds,
  110. AudioSize: a.AudioSize,
  111. Sort: a.Sort,
  112. })
  113. }
  114. }
  115. replierRank := fmt.Sprintf("弘则%s研究员", v.ResearchGroupFirstName)
  116. avatar := v.ReplierAvatar
  117. if avatar == "" {
  118. avatar = utils.HZ_DEFAULT_AVATAR
  119. }
  120. item := &response.CommunityQuestionItem{
  121. CommunityQuestionID: v.CommunityQuestionID,
  122. UserId: v.UserID,
  123. QuestionContent: v.QuestionContent,
  124. ReplierRealName: v.ReplierRealName,
  125. ReplierRank: replierRank,
  126. ReplierAvatar: avatar,
  127. VarietyTagId: v.VarietyTagID,
  128. VarietyTagName: v.VarietyTagName,
  129. ResearchGroupSecondId: v.ResearchGroupSecondID,
  130. ResearchGroupSecondName: v.ResearchGroupSecondName,
  131. IsRead: v.IsRead,
  132. ReplierUserID: v.ReplierUserID,
  133. ReplierIsRead: v.ReplierIsRead,
  134. ReplyStatus: v.ReplyStatus,
  135. CreateTime: v.CreateTime.Format(utils.FormatDateTime),
  136. ReplyTime: v.ReplyTime.Format(utils.FormatDateTime),
  137. //AuthOk: authOk,
  138. //PermissionInfo: permissionInfo,
  139. AudioList: audios,
  140. }
  141. if item.IsRead == 0 && item.UserId == userId {
  142. item.IsTop = 1
  143. }
  144. resp = append(resp, item)
  145. }
  146. return
  147. }
  148. // GetQuestionDetail 获取问答详情
  149. func GetQuestionDetail(questionId int, userInfo user.UserInfo) (item *response.CommunityQuestionItem, errMsg string, err error) {
  150. detail, e := yb_community_question.GetItemById(questionId)
  151. errMsg = "获取失败"
  152. if e != nil {
  153. if e == utils.ErrNoRow {
  154. errMsg = "问题已被删除"
  155. }
  156. err = errors.New("获取问题详情失败 Err:" + e.Error())
  157. return
  158. }
  159. audioList, e := yb_community_question_audio.GetListByQuestionId(questionId)
  160. if e != nil {
  161. err = errors.New("获取问题音频失败 Err:" + e.Error())
  162. return
  163. }
  164. audios := make([]*response.CommunityQuestionAudioItem, 0)
  165. for _, a := range audioList {
  166. audios = append(audios, &response.CommunityQuestionAudioItem{
  167. CommunityQuestionAudioID: a.CommunityQuestionAudioID,
  168. CommunityQuestionID: a.CommunityQuestionID,
  169. AudioURL: a.AudioURL,
  170. AudioPlaySeconds: a.AudioPlaySeconds,
  171. AudioSize: a.AudioSize,
  172. Sort: a.Sort,
  173. })
  174. }
  175. replierRank := fmt.Sprintf("弘则%s研究员", detail.ResearchGroupFirstName)
  176. // 用户权限
  177. //authOk, permissionInfo, _, e := company.CheckBaseFiccPermission(userInfo.CompanyID, int(userInfo.UserID))
  178. //if e != nil {
  179. // err = errors.New("获取用户权限失败 Err:" + e.Error())
  180. // return
  181. //}
  182. avatar := detail.ReplierAvatar
  183. if avatar == "" {
  184. avatar = utils.HZ_DEFAULT_AVATAR
  185. }
  186. item = &response.CommunityQuestionItem{
  187. CommunityQuestionID: detail.CommunityQuestionID,
  188. UserId: detail.UserID,
  189. QuestionContent: detail.QuestionContent,
  190. ReplierRealName: detail.ReplierRealName,
  191. ReplierRank: replierRank,
  192. ReplierAvatar: detail.ReplierAvatar,
  193. VarietyTagId: detail.VarietyTagID,
  194. VarietyTagName: detail.VarietyTagName,
  195. ResearchGroupSecondId: detail.ResearchGroupSecondID,
  196. ResearchGroupSecondName: detail.ResearchGroupSecondName,
  197. IsRead: detail.IsRead,
  198. ReplierIsRead: detail.ReplierIsRead,
  199. ReplyStatus: detail.ReplyStatus,
  200. CreateTime: detail.CreateTime.Format(utils.FormatDateTime),
  201. ReplyTime: detail.ReplyTime.Format(utils.FormatDateTime),
  202. //AuthOk: authOk,
  203. //PermissionInfo: permissionInfo,
  204. AudioList: audios,
  205. }
  206. errMsg = "获取成功"
  207. return
  208. }
  209. // CreateQuestion 新增问答
  210. func CreateQuestion(userId int, mobile, realName, content string) (err error) {
  211. // 获取用户公众号openid, 获取不到则置空
  212. userRecord, e := user_record.GetByUserId(userId, utils.USER_RECORD_PLATFORM_RDDP)
  213. if e != nil && e != utils.ErrNoRow {
  214. err = errors.New("获取用户公众号openid失败 Err:" + e.Error())
  215. return
  216. }
  217. openid := ""
  218. if userRecord != nil {
  219. openid = userRecord.OpenID
  220. }
  221. item := &yb_community_question.YbCommunityQuestion{
  222. UserID: userId,
  223. UserOpenid: openid,
  224. Mobile: mobile,
  225. RealName: realName,
  226. QuestionContent: content,
  227. ReplyStatus: 1,
  228. IsRead: 1,
  229. ReplierIsRead: 1,
  230. }
  231. if e := item.Create(); e != nil {
  232. err = errors.New("新增问题失败 Err:" + e.Error())
  233. }
  234. // 新增问答后,消息通知管理员
  235. go messageToAdmin(userId, item)
  236. return
  237. }
  238. // ReplyUserQuestion 回复问题
  239. func ReplyUserQuestion(replierId, questionId int, audios []*request.ReplyReqAudioList) (errMsg string, err error) {
  240. item, e := yb_community_question.GetItemById(questionId)
  241. if e != nil {
  242. errMsg = "问答信息有误"
  243. err = errors.New("获取提问信息失败 Err:" + e.Error())
  244. return
  245. }
  246. if item.ReplyStatus < 2 {
  247. errMsg = "回复状态有误"
  248. err = errors.New("回复状态有误")
  249. return
  250. }
  251. if item.ReplyStatus == 3 {
  252. errMsg = "请勿重复提交"
  253. err = errors.New("问题已回复,请勿重复提交")
  254. return
  255. }
  256. if item.ReplierUserID != replierId {
  257. errMsg = "回复人不匹配"
  258. err = errors.New(fmt.Sprintf("回复人与分配人不匹配, 当前回复人ID: %d, 分配的回复人ID: %d", replierId, item.ReplierUserID))
  259. return
  260. }
  261. // 问题
  262. updateCols := make([]string, 0)
  263. updateCols = append(updateCols, "reply_status", "reply_time", "modify_time", "msg_send_status", "is_read")
  264. nowTime := time.Now().Local()
  265. item.ReplyStatus = 3
  266. item.ReplyTime = nowTime
  267. item.ModifyTime = nowTime
  268. item.MsgSendStatus = 2
  269. item.IsRead = 0
  270. // 音频
  271. audioList := make([]*yb_community_question_audio.YbCommunityQuestionAudio, 0)
  272. for _, v := range audios {
  273. audioList = append(audioList, &yb_community_question_audio.YbCommunityQuestionAudio{
  274. CommunityQuestionID: questionId,
  275. AudioURL: v.AudioUrl,
  276. AudioPlaySeconds: v.AudioPlaySeconds,
  277. AudioSize: v.AudioSize,
  278. Sort: v.Sort,
  279. CreateTime: nowTime,
  280. })
  281. }
  282. if e := yb_community_question.UpdateQuestionAndAudioList(item, updateCols, audioList); e != nil {
  283. err = errors.New("UpdateQuestionAndAudioList Err:" + e.Error())
  284. return
  285. }
  286. // 推送回复消息给用户
  287. go wechat.SendQuestionReplyWxMsg(item.CommunityQuestionID, item.UserID, item.QuestionContent)
  288. return
  289. }
  290. // ReadQuestionReply 回复已读
  291. func ReadQuestionReply(questionIds string, userInfo user.UserInfo) (err error) {
  292. if questionIds == "" {
  293. return
  294. }
  295. questionIdArr := make([]int, 0)
  296. questionIdStrArr := strings.Split(questionIds, ",")
  297. for _, v := range questionIdStrArr {
  298. i, _ := strconv.Atoi(v)
  299. questionIdArr = append(questionIdArr, i)
  300. }
  301. if len(questionIdArr) == 0 {
  302. return
  303. }
  304. isResearcher, _, e := user.GetResearcherByUserInfo(userInfo)
  305. if e != nil {
  306. err = errors.New("获取用户身份失败 Err:" + e.Error())
  307. return
  308. }
  309. if isResearcher {
  310. // 设置分配给研究员的问答已读
  311. e = yb_community_question.UpdateReplierRead(int(userInfo.UserID), questionIdArr)
  312. if e != nil {
  313. err = errors.New("更新问答已读失败 Err:" + e.Error())
  314. return
  315. }
  316. // 设置研究员提问的问答已读
  317. e = yb_community_question.UpdateUserRead(int(userInfo.UserID), questionIdArr)
  318. } else {
  319. // 设置普通用户的问答已读
  320. e = yb_community_question.UpdateUserRead(int(userInfo.UserID), questionIdArr)
  321. }
  322. if e != nil {
  323. err = errors.New("更新问答已读失败 Err:" + e.Error())
  324. }
  325. return
  326. }
  327. // GetQuestionListTotal 获取问答列表数量统计
  328. func GetQuestionListTotal(userInfo user.UserInfo) (resp *response.CommunityQuestionListTotal, err error) {
  329. isResearcher, _, e := user.GetResearcherByUserInfo(userInfo)
  330. if e != nil {
  331. err = errors.New("获取用户身份失败 Err:" + e.Error())
  332. return
  333. }
  334. condition := " is_deleted = 0"
  335. var pars []interface{}
  336. if isResearcher {
  337. condition += " and (replier_user_id=? or user_id=?)"
  338. pars = append(pars, userInfo.UserID, userInfo.UserID)
  339. } else {
  340. condition += " and user_id=?"
  341. pars = append(pars, userInfo.UserID)
  342. }
  343. countList, e := yb_community_question.GetQuestionListCount(condition, pars)
  344. if e != nil {
  345. err = errors.New("获取回复人问题统计失败 Err:" + e.Error())
  346. return
  347. }
  348. resp = new(response.CommunityQuestionListTotal)
  349. var distribute, wait, replied, total int
  350. for _, v := range countList {
  351. total += v.Total
  352. if isResearcher {
  353. if v.UserId == userInfo.UserID {
  354. if v.ReplyStatus == 1 || v.ReplyStatus == 2 { //研究员提问的待分配的问题
  355. wait += v.Total
  356. }
  357. }
  358. if v.ReplierUserId == userInfo.UserID && v.ReplyStatus == 2 { //分配给研究员的未回答的问题
  359. distribute += v.Total
  360. }
  361. if v.ReplyStatus == 3 {
  362. replied += v.Total
  363. }
  364. } else {
  365. if v.ReplyStatus == 1 || v.ReplyStatus == 2 { //未分配和未回答的数量
  366. wait += v.Total
  367. } else if v.ReplyStatus == 3 { //已回答的数量
  368. replied += v.Total
  369. }
  370. }
  371. }
  372. if isResearcher {
  373. resp.Distribute = distribute
  374. }
  375. resp.Wait = wait
  376. resp.Replied = replied
  377. resp.Total = total
  378. return
  379. }
  380. // GetMyQuestionUnread 获取我的未读数
  381. func GetMyQuestionUnread(userInfo user.UserInfo) (total int, err error) {
  382. isResearcher, _, e := user.GetResearcherByUserInfo(userInfo)
  383. if e != nil {
  384. err = errors.New("获取用户身份失败 Err:" + e.Error())
  385. return
  386. }
  387. condition := " is_deleted = 0"
  388. var pars []interface{}
  389. if isResearcher {
  390. condition += " and ((replier_user_id=? and replier_is_read=0) or (user_id=? and is_read=0))"
  391. pars = append(pars, userInfo.UserID, userInfo.UserID)
  392. } else {
  393. condition += " and user_id=? and is_read=0"
  394. pars = append(pars, userInfo.UserID)
  395. }
  396. num, e := yb_community_question.GetUnreadNum(condition, pars)
  397. if e != nil {
  398. err = errors.New("获取我的未读数失败 Err:" + e.Error())
  399. return
  400. }
  401. total = int(num)
  402. return
  403. }
  404. // GetResearchGroupTree 获取研究方向分组
  405. func GetResearchGroupTree() (respList []*response.ResearchGroupItem, err error) {
  406. respList = make([]*response.ResearchGroupItem, 0)
  407. list, e := research_group.GetResearchGroupList()
  408. if e != nil {
  409. err = errors.New("获取研究方向分组失败, Err:" + e.Error())
  410. return
  411. }
  412. listLen := len(list)
  413. if listLen == 0 {
  414. return
  415. }
  416. // 分类
  417. firstList := make([]*response.ResearchGroupItem, 0)
  418. secondList := make([]*response.ResearchGroupItem, 0)
  419. for i := 0; i < listLen; i++ {
  420. item := new(response.ResearchGroupItem)
  421. item.ResearchGroupId = list[i].ResearchGroupID
  422. item.ResearchGroupName = list[i].ResearchGroupName
  423. item.ParentId = list[i].ParentID
  424. item.ChartPermissionId = list[i].ChartPermissionID
  425. item.Sort = list[i].Sort
  426. if list[i].ParentID == 0 {
  427. firstList = append(firstList, item)
  428. } else {
  429. secondList = append(secondList, item)
  430. }
  431. }
  432. if len(firstList) == 0 {
  433. return
  434. }
  435. // 匹配子分类
  436. for _, p := range firstList {
  437. children := make([]*response.ResearchGroupItem, 0)
  438. for _, child := range secondList {
  439. if p.ResearchGroupId == child.ParentId {
  440. children = append(children, child)
  441. }
  442. }
  443. p.Children = children
  444. }
  445. respList = firstList
  446. return
  447. }
  448. // AddAudioListenLog 添加用户点击音频日志
  449. func AddAudioListenLog(userInfo user.UserInfo, audioId int, sourceAgent int) (err error) {
  450. //1. 查询音频是否存在
  451. audio, err := yb_community_question_audio.GetByAudioId(audioId)
  452. if err != nil && err != utils.ErrNoRow {
  453. err = errors.New("查询音频信息失败 Err:" + err.Error())
  454. return
  455. }
  456. if err == utils.ErrNoRow {
  457. err = errors.New("音频不存在")
  458. return
  459. }
  460. if audio == nil {
  461. err = errors.New("音频不存在")
  462. return
  463. }
  464. //3. 添加点击日志
  465. item := &yb_community_audio_listen_log.YbCommunityAudioListenLog{
  466. CommunityQuestionAudioID: audio.CommunityQuestionAudioID,
  467. CommunityQuestionID: audio.CommunityQuestionID,
  468. UserID: int(userInfo.UserID),
  469. SourceAgent: sourceAgent,
  470. }
  471. if err = item.Create(); err != nil {
  472. err = errors.New("新增点击日志失败 Err:" + err.Error())
  473. return
  474. }
  475. return
  476. }
  477. // messageToAdmin 添加站内消息
  478. func messageToAdmin(userId int, ybCommunityQuestion *yb_community_question.YbCommunityQuestion) {
  479. var err error
  480. defer func() {
  481. if err != nil {
  482. go alarm_msg.SendAlarmMsg("新增社区问答完成后,发送消息给管理员失败"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+err.Error(), 3)
  483. }
  484. }()
  485. //因为产品说只要给沛总发送信息,那么没办法咯,只去获取沛总的信息 2022-07-19 11:29:16
  486. vWangInfo, err := admin.GetVWangInfo()
  487. if err != nil {
  488. return
  489. }
  490. //站内消息
  491. go systemMessageToAdmin(*vWangInfo, userId, ybCommunityQuestion)
  492. //微信模板消息
  493. go wxMessageToAdmin(*vWangInfo, ybCommunityQuestion)
  494. return
  495. }
  496. // systemMessageToAdmin 系统消息消息通知管理员
  497. func systemMessageToAdmin(adminInfo admin.Admin, userId int, ybCommunityQuestion *yb_community_question.YbCommunityQuestion) {
  498. var err error
  499. defer func() {
  500. if err != nil {
  501. go alarm_msg.SendAlarmMsg("新增社区问答完成后,站内评论信息发送给管理员失败"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+err.Error(), 3)
  502. }
  503. }()
  504. // 接收人的admin_id
  505. receiveUserId := int(adminInfo.AdminID)
  506. //获取评论人信息
  507. wxUser, err := wx_user.GetByUserId(userId)
  508. if err != nil {
  509. return
  510. }
  511. var msgType, sourceType, approvalStatus int8
  512. msgType = company_approval_message.CompanyApprovalMessageMessageTypeByApply
  513. sourceType = company_approval_message.CompanyApprovalMessageSourceTypeByQuestion
  514. approvalStatus = company_approval_message.CompanyApprovalMessageApprovalStatusByPending
  515. companyInfo, err := company.GetByCompanyId(wxUser.CompanyID)
  516. if err != nil {
  517. return
  518. }
  519. productId := 1
  520. companyProductInfo, err := company_product.GetByCompany2ProductId(wxUser.CompanyID, int64(productId))
  521. if err != nil {
  522. return
  523. }
  524. companyName := companyInfo.CompanyName
  525. remark := `您有新的问答待分配`
  526. content := `您有新的问答待分配`
  527. messageInfo := company_approval_message.MessageInfo{
  528. CompanyName: companyInfo.CompanyName,
  529. ProductId: productId,
  530. CompanyProductStatus: companyProductInfo.Status,
  531. Title: ybCommunityQuestion.QuestionContent,
  532. Content: ybCommunityQuestion.QuestionContent,
  533. UserId: wxUser.UserID,
  534. UserName: ybCommunityQuestion.RealName,
  535. CreateTime: ybCommunityQuestion.CreateTime,
  536. }
  537. //客户添加消息
  538. err = company_approval_message.AddCompanyApprovalMessage(utils.AdminId, receiveUserId, int(wxUser.CompanyID), ybCommunityQuestion.CommunityQuestionID, msgType, sourceType, approvalStatus, companyName, remark, content, messageInfo)
  539. return
  540. }
  541. // wxMessageToAdmin 微信模板消息通知管理员
  542. func wxMessageToAdmin(adminInfo admin.Admin, ybCommunityQuestion *yb_community_question.YbCommunityQuestion) {
  543. var err error
  544. defer func() {
  545. if err != nil {
  546. go alarm_msg.SendAlarmMsg("新增社区问答完成后,微信模板消息发送给管理员失败"+time.Now().Format("2006-01-02 15:04:05")+";Err:"+err.Error(), 3)
  547. }
  548. }()
  549. if global.CONFIG.Serve.RunMode == "debug" {
  550. adminInfo.Mobile = `18221983795`
  551. }
  552. wxUser, err := wx_user.GetByMobile(adminInfo.Mobile)
  553. if err != nil {
  554. return
  555. }
  556. err = wechat.SendQuestionToAdmin(ybCommunityQuestion.CommunityQuestionID, int(wxUser.UserID), ybCommunityQuestion.QuestionContent)
  557. return
  558. }