wechat.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_mini_bridge/models"
  5. "eta/eta_mini_bridge/services"
  6. "eta/eta_mini_bridge/services/alarm_msg"
  7. "eta/eta_mini_bridge/utils"
  8. "html"
  9. "strconv"
  10. )
  11. type WeChatController struct {
  12. BaseAuthController
  13. }
  14. // @Title 发送微信模板接口
  15. // @Description 发送微信模板接口
  16. // @Param ReportId query int true "报告id"
  17. // @Success 200 {object} models.WechatSign
  18. // @router /send_template_msg [get]
  19. func (this *WeChatController) SendTemplateMsg() {
  20. br := new(models.BaseResponse).Init()
  21. defer func() {
  22. if br.Ret != 200 {
  23. b, _ := json.Marshal(br)
  24. alarm_msg.SendAlarmMsg(string(b), 1)
  25. }
  26. this.Data["json"] = br
  27. this.ServeJSON()
  28. }()
  29. reportId, _ := this.GetInt("ReportId")
  30. if reportId <= 0 {
  31. br.Msg = "参数错误"
  32. br.ErrMsg = "参数错误,报告id小于等于0"
  33. return
  34. }
  35. report, err := models.GetReportById(reportId)
  36. if err != nil {
  37. br.Msg = "该报告已删除"
  38. br.ErrMsg = "获取报告详情失败,Err:" + err.Error()
  39. return
  40. }
  41. report.ContentSub = html.UnescapeString(report.ContentSub)
  42. report.Content = html.UnescapeString(report.Content)
  43. if report == nil {
  44. br.Msg = "报告不存在"
  45. return
  46. }
  47. reportChartPermissionIdStrs, err := models.GetChartPermissionIdsListByClassifyId(report.ClassifyIdSecond)
  48. if err != nil {
  49. br.Msg = "获取研报权限失败"
  50. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  51. return
  52. }
  53. if len(reportChartPermissionIdStrs) == 0 {
  54. br.Msg = "该研报所在分类未关联品种权限,不能推送"
  55. return
  56. }
  57. chartPermissionList, err := models.GetChartPermissionIdsByIds(reportChartPermissionIdStrs)
  58. if err != nil {
  59. br.Msg = "获取研报权限失败"
  60. br.ErrMsg = "获取研报权限失败,Err:" + err.Error()
  61. return
  62. }
  63. permissionMapping, err := models.GetUserChartPermissionMapping()
  64. if err != nil {
  65. br.Msg = "获取用户权限失败"
  66. br.ErrMsg = "获取用户权限失败,Err:" + err.Error()
  67. return
  68. }
  69. // 获取不同二级品种分类下的的小程序用户列表映射
  70. permissionMap := make(map[int][]int)
  71. for _, v := range permissionMapping {
  72. if _, ok := permissionMap[v.ChartPermissionId]; !ok {
  73. permissionMap[v.ChartPermissionId] = make([]int, 0)
  74. } else {
  75. permissionMap[v.ChartPermissionId] = append(permissionMap[v.ChartPermissionId], v.UserId)
  76. }
  77. }
  78. var IsPublic bool
  79. for _, v := range chartPermissionList {
  80. if v.IsPublic == 1 {
  81. IsPublic = true
  82. break
  83. }
  84. }
  85. var openIds []*services.OpenIdList
  86. if IsPublic {
  87. userList, err := models.GetUserBySubscribe()
  88. if err != nil {
  89. br.Msg = "获取用户列表失败"
  90. br.ErrMsg = "获取用户列表失败,Err:" + err.Error()
  91. return
  92. }
  93. userUnionMap := make(map[int]string)
  94. for _, v := range userList {
  95. userUnionMap[v.UserId] = v.UnionId
  96. }
  97. var unionIds []string
  98. for _, v := range userList {
  99. unionIds = append(unionIds, v.UnionId)
  100. }
  101. // 给所有人,发送模板消息
  102. records, err := models.GetUserRecordByUnionids(unionIds)
  103. if err != nil {
  104. br.Msg = "获取用户记录失败"
  105. br.ErrMsg = "获取用户记录失败,Err:" + err.Error()
  106. return
  107. }
  108. for _, v := range records {
  109. openIds = append(openIds, &services.OpenIdList{
  110. OpenId: v.OpenId,
  111. UserId: v.UserId,
  112. })
  113. }
  114. } else {
  115. // 给指定用户,发送模板消息
  116. // 报告所属的二级品种分类
  117. userList, err := models.GetUserBySubscribeAndFormatUser()
  118. if err != nil {
  119. br.Msg = "获取用户列表失败"
  120. br.ErrMsg = "获取用户列表失败,Err:" + err.Error()
  121. return
  122. }
  123. userUnionMap := make(map[int]string)
  124. for _, v := range userList {
  125. userUnionMap[v.UserId] = v.UnionId
  126. }
  127. var permissionIds []int
  128. for _, v := range reportChartPermissionIdStrs {
  129. vv, _ := strconv.Atoi(v)
  130. permissionIds = append(permissionIds, vv)
  131. }
  132. var sendUserIds []int
  133. // 获取报告所属的二级品种分类对应的用户列表
  134. for _, v := range permissionIds {
  135. if _, ok := permissionMap[v]; ok {
  136. sendUserIds = append(sendUserIds, permissionMap[v]...)
  137. }
  138. }
  139. sendUserIds = utils.Unique(sendUserIds)
  140. var unionIds []string
  141. for _, v := range sendUserIds {
  142. if id, ok := userUnionMap[v]; ok {
  143. unionIds = append(unionIds, id)
  144. }
  145. }
  146. records, err := models.GetUserRecordByUnionids(unionIds)
  147. if err != nil {
  148. br.Msg = "获取用户记录失败"
  149. br.ErrMsg = "获取用户记录失败,Err:" + err.Error()
  150. return
  151. }
  152. for _, v := range records {
  153. openIds = append(openIds, &services.OpenIdList{
  154. OpenId: v.OpenId,
  155. UserId: v.UserId,
  156. })
  157. }
  158. }
  159. sendData := make(map[string]interface{})
  160. sendData["keyword1"] = map[string]interface{}{"value": report.ClassifyNameSecond, "color": "#173177"}
  161. sendData["keyword2"] = map[string]interface{}{"value": report.Title, "color": "#173177"}
  162. sendData["keyword3"] = map[string]interface{}{"value": report.PublishTime, "color": "#173177"}
  163. sendData["keyword4"] = map[string]interface{}{"value": report.Abstract, "color": "#173177"}
  164. err = services.SendMultiTemplateMsg(sendData, openIds, 1, reportId)
  165. if err != nil {
  166. br.Msg = "发送失败"
  167. br.ErrMsg = "发送失败,Err:" + err.Error()
  168. return
  169. }
  170. br.Ret = 200
  171. br.Msg = "发送成功"
  172. br.Success = true
  173. }