article.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. package cygx
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/PuerkitoBio/goquery"
  6. "hongze/hz_crm_api/models/company"
  7. "hongze/hz_crm_api/models/cygx"
  8. "hongze/hz_crm_api/services"
  9. "hongze/hz_crm_api/services/alarm_msg"
  10. "hongze/hz_crm_api/utils"
  11. "html"
  12. "strconv"
  13. "strings"
  14. )
  15. func ArticlePublishDate(publishDate string) (newPublishDate string) {
  16. newPublishDate = strings.Replace(publishDate, "00:00:00", "", -1)
  17. newPublishDate = strings.Replace(newPublishDate, " ", "", -1)
  18. return
  19. }
  20. func GetReportContentTextSubNew(content string) (contentSub string, err error) {
  21. content = html.UnescapeString(content)
  22. doc, errdoc := goquery.NewDocumentFromReader(strings.NewReader(content))
  23. if errdoc != nil {
  24. err = errdoc
  25. return
  26. }
  27. docText := doc.Text()
  28. bodyRune := []rune(docText)
  29. bodyRuneLen := len(bodyRune)
  30. body := string(bodyRune[:bodyRuneLen])
  31. contentSub = body
  32. contentSub = strings.Replace(contentSub, "Powered by Froala Editor", "", -1)
  33. contentSub = strings.Replace(contentSub, " ", "", -1)
  34. contentSub = strings.Replace(contentSub, "<p data-f-id=\"pbf\" style=\"text-align: center; font-size: 14px; margin-top: 30px; opacity: 0.65; font-family: sanered by <a href=\"https://www.froala.com/wysiwyg-editor?pb=1\" title=\"Froala Editor\">Froala Editor</a></p>", "", -1)
  35. return
  36. }
  37. func ArticleComPanyLabelToStr(companyLabel []string) (label string) {
  38. for _, v := range companyLabel {
  39. label += v + "{|}"
  40. }
  41. label = strings.TrimRight(label, "{|}")
  42. return
  43. }
  44. // GetArticleStockMap 获取个股标签所对应的文章ID
  45. func GetArticleStockMap() (mapResp map[string]int, err error) {
  46. defer func() {
  47. if err != nil {
  48. go alarm_msg.SendAlarmMsg("获取个股标签所对应的文章ID失败"+err.Error(), 2)
  49. }
  50. }()
  51. list, err := cygx.GetArticleStock()
  52. if err != nil && err.Error() != utils.ErrNoRow() {
  53. return
  54. }
  55. mapResp = make(map[string]int, 0)
  56. if len(list) > 0 {
  57. //一对一精准匹配
  58. for _, v := range list {
  59. sliceSubjects := strings.Split(v.Stock, "/")
  60. if len(sliceSubjects) > 0 {
  61. for _, vSubject := range sliceSubjects {
  62. sliceKuohao := strings.Split(vSubject, "(") //过滤括号
  63. sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
  64. subject := sliceXiahuaxian[0]
  65. mapResp[subject] = v.ArticleId
  66. }
  67. }
  68. }
  69. }
  70. return
  71. }
  72. // 处理文章来源类型
  73. func GetArticleSourcePlatform(SourcePlatform string) (sourcePlatformResp int) {
  74. //SourcePlatform string `description:"来源 'MOBILE:移动端小程序','PC:PC端小程序','CELUE:上海策略平台','WEB:查研观向网页版'"`
  75. if SourcePlatform == "MOBILE" || SourcePlatform == "PC" {
  76. sourcePlatformResp = 1
  77. } else if SourcePlatform == "WEB" {
  78. sourcePlatformResp = 2
  79. } else if SourcePlatform == "CELUE" {
  80. sourcePlatformResp = 3
  81. }
  82. return
  83. }
  84. //
  85. //func init() {
  86. // SendWxMsgWithroadshowEssence(1000546)
  87. //}
  88. // 路演精华的文章做模板消息推送
  89. func SendWxMsgWithroadshowEssence(articleId int) (err error) {
  90. defer func() {
  91. if err != nil {
  92. fmt.Println(err)
  93. go alarm_msg.SendAlarmMsg("路演精华的文章做模板消息推送送,发送模版消息失败,Err:"+err.Error(), 3)
  94. utils.FileLog.Info(fmt.Sprintf("路演精华的文章做模板消息推送失败,Err:%s,%s", err.Error()))
  95. }
  96. }()
  97. detail, e := cygx.GetArticleRoadshowEssenceDetail(articleId)
  98. if e != nil {
  99. err = errors.New("获取详情失败" + e.Error())
  100. return
  101. }
  102. if detail == nil {
  103. err = errors.New("获取详情失败")
  104. return
  105. }
  106. //fmt.Println(detail)
  107. permissionStr, e := company.GetPermissionIdById(strconv.Itoa(detail.ChartPermissionId))
  108. if e != nil {
  109. err = errors.New("获取主客观权限失败" + e.Error())
  110. return
  111. }
  112. // 获取所有有权的用户的 openid
  113. openidPowerList, e := cygx.GetCygxUserRecordPower(permissionStr)
  114. if e != nil {
  115. err = errors.New("获取所有有权的用户的 openid失败" + e.Error())
  116. return
  117. }
  118. //获取关注对应产业的用户信息
  119. industryFllowList, e := cygx.GetCygxUserFllowOpenid(articleId)
  120. if e != nil {
  121. err = errors.New("获取关注对应产业的用户信息失败 " + e.Error())
  122. return
  123. }
  124. mapOpenidFllow := make(map[int]string)
  125. for _, v := range industryFllowList {
  126. mapOpenidFllow[v.UserId] = v.OpenId
  127. }
  128. //获取拒绝接收推送的的用户的 openid
  129. mapOpenidRefuset := make(map[int]string)
  130. openidRefusetList, e := cygx.GetCygxUserRefusetOpenid()
  131. if e != nil && e.Error() != utils.ErrNoRow() {
  132. err = errors.New("获取拒绝接收推送的的用户的 openid 失败" + e.Error())
  133. return
  134. }
  135. for _, v := range openidRefusetList {
  136. mapOpenidRefuset[v.UserId] = v.OpenId
  137. }
  138. //获取提交过推送规则的用户的 openid
  139. mapUserIdChooseSend := make(map[int]int)
  140. chooseSendtList, err := cygx.GetCygxXzsChooseSend("")
  141. if err != nil && err.Error() != utils.ErrNoRow() {
  142. return err
  143. }
  144. for _, v := range chooseSendtList {
  145. mapUserIdChooseSend[v.UserId] = v.UserId
  146. }
  147. openIdArr := make([]string, len(openidPowerList))
  148. for i, v := range openidPowerList {
  149. if _, ok := mapOpenidRefuset[v.UserId]; ok {
  150. continue //如果用户选择了拒绝推送消息,那么就不做模板消息推送
  151. }
  152. if _, ok := mapUserIdChooseSend[v.UserId]; ok {
  153. if _, ok := mapOpenidFllow[v.UserId]; !ok {
  154. continue //如果用户提交过关注信息,而且这个产业他没有关注,那么不做推送
  155. }
  156. }
  157. openIdArr[i] = v.OpenId
  158. }
  159. fmt.Println(openIdArr)
  160. first := "【路演精华】已发布,欢迎查看"
  161. keyword1 := detail.Title
  162. keyword2 := "已发布"
  163. keyword3 := detail.PublishDate
  164. keyword4 := detail.Abstract
  165. remark := "点击查看详情"
  166. redirectUrl := utils.WX_MSG_PATH_ROAD_ESSENCE + strconv.Itoa(detail.ArticleId) + "&IsSendWx=1"
  167. sendInfo := new(services.SendWxTemplate)
  168. sendInfo.First = first
  169. sendInfo.Keyword1 = keyword1
  170. sendInfo.Keyword2 = keyword2
  171. sendInfo.Keyword3 = keyword3
  172. sendInfo.Keyword4 = keyword4
  173. sendInfo.Remark = remark
  174. sendInfo.TemplateId = utils.WxMsgTemplateIdActivityChangeApplyXzs
  175. sendInfo.RedirectUrl = redirectUrl
  176. sendInfo.RedirectTarget = 3
  177. sendInfo.Resource = strconv.Itoa(detail.ArticleId)
  178. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ROADSHOW_VIDEO
  179. sendInfo.OpenIdArr = openIdArr
  180. e = services.SendTemplateMsg(sendInfo)
  181. if e != nil {
  182. err = errors.New("推送模板消息失败" + e.Error())
  183. return
  184. }
  185. return
  186. }