wechat.go 5.5 KB

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