wx_template_msg.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. package services
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "hongze/hongze_clpt/models"
  8. "hongze/hongze_clpt/utils"
  9. "io/ioutil"
  10. "net/http"
  11. "strconv"
  12. "time"
  13. )
  14. // 发送报告提问消息提醒
  15. func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.OpenIdList, articleId int) (err error) {
  16. var msg string
  17. defer func() {
  18. if err != nil {
  19. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  20. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,用户名", name, "文章ID:", articleId), 2)
  21. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  22. }
  23. fmt.Println("line 21", err, msg)
  24. }()
  25. utils.FileLog.Info("%s", "services SendMsg")
  26. //accessToken, err := models.GetWxAccessToken()
  27. accessToken, err := models.GetWxAccessTokenByXzs()
  28. if err != nil {
  29. msg = "GetWxAccessToken Err:" + err.Error()
  30. return
  31. }
  32. if accessToken == "" {
  33. msg = "accessToken is empty"
  34. return
  35. }
  36. var first string
  37. var keyword1 string
  38. var keyword3 string
  39. var keyword4 string
  40. var remark string
  41. first = "研选报告有新的提问,请及时处理"
  42. keyword1 = name
  43. keyword3 = askTime
  44. keyword4 = askMsg
  45. remark = title
  46. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  47. //templateId := utils.WxMsgTemplateIdAskMsg
  48. templateId := utils.WxMsgTemplateIdAskMsgXzs
  49. sendMap := make(map[string]interface{})
  50. sendData := make(map[string]interface{})
  51. sendMap["template_id"] = templateId
  52. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pages/reportDetail/reportDetail?id=" + strconv.Itoa(articleId)}
  53. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "path": "article/detail?ArticleId=1000001"}
  54. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  55. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  56. sendData["keyword2"] = map[string]interface{}{"value": "", "color": "#173177"}
  57. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
  58. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
  59. sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  60. sendMap["data"] = sendData
  61. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  62. return
  63. }
  64. func WxSendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*models.OpenIdList, resource string, sendType int) (err error) {
  65. for _, v := range items {
  66. sendMap["touser"] = v.OpenId
  67. data, err := json.Marshal(sendMap)
  68. if err != nil {
  69. fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
  70. return err
  71. }
  72. utils.FileLog.Info("One SendData:%s", string(data))
  73. fmt.Println(string(data))
  74. err = SendTemplateMsg(sendUrl, data, resource, sendType, v)
  75. if err != nil {
  76. fmt.Println("send err:", err.Error())
  77. return err
  78. }
  79. }
  80. return
  81. }
  82. func SendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, dataItem *models.OpenIdList) (err error) {
  83. client := http.Client{}
  84. resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
  85. if err != nil {
  86. return
  87. }
  88. defer resp.Body.Close()
  89. body, _ := ioutil.ReadAll(resp.Body)
  90. utils.FileLog.Info("SendResult:%s", string(body))
  91. var templateResponse SendTemplateResponse
  92. err = json.Unmarshal(body, &templateResponse)
  93. fmt.Println(templateResponse.Errcode)
  94. fmt.Println(templateResponse.Errmsg)
  95. if err != nil {
  96. return err
  97. }
  98. //新增模板消息推送记录
  99. {
  100. tr := new(models.UserTemplateRecord)
  101. tr.UserId = dataItem.UserId
  102. tr.OpenId = dataItem.OpenId
  103. tr.Resource = resource
  104. tr.SendData = string(data)
  105. tr.Result = string(body)
  106. tr.CreateDate = time.Now().Format(utils.FormatDate)
  107. tr.CreateTime = time.Now().Format(utils.FormatDateTime)
  108. if templateResponse.Errcode == 0 {
  109. tr.SendStatus = 1
  110. } else {
  111. tr.SendStatus = 0
  112. }
  113. tr.SendType = sendType
  114. go func() {
  115. err = models.AddUserTemplateRecord(tr)
  116. if err != nil {
  117. utils.FileLog.Info(fmt.Sprintf("AddUserTemplateRecord Err:%s", err.Error()))
  118. }
  119. }()
  120. }
  121. return
  122. }
  123. // 活动带问提醒
  124. func SendActivityAskApplyTemplateMsgV2(keyword1, keyword2, keyword3, keyword4, remark string, itemOpenid *models.OpenIdList, itemAct *models.ActivityDetail) (err error) {
  125. var msg string
  126. defer func() {
  127. if err != nil {
  128. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  129. go utils.SendAlarmMsg("活动带问提醒发送模版消息失败"+remark, 2)
  130. }
  131. if msg != "" {
  132. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  133. }
  134. }()
  135. var accessToken string
  136. accessToken, err = models.GetWxAccessTokenByXzs()
  137. if err != nil {
  138. msg = "GetWxAccessToken Err:" + err.Error()
  139. return
  140. }
  141. if accessToken == "" {
  142. msg = "accessToken is empty"
  143. return
  144. }
  145. activityId := itemAct.ArticleId
  146. //fmt.Println("itemAct.Host", itemAct.Host)
  147. if itemAct.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN && itemAct.Host != "" {
  148. keyword2 += ",会议主持人:" + itemAct.Host
  149. }
  150. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  151. sendMap := make(map[string]interface{})
  152. sendData := make(map[string]interface{})
  153. first := "有新的客户提问"
  154. //keyword1 := applyName
  155. //keyword2 := "-"
  156. //keyword3 := applyTime
  157. //keyword4 := askContent
  158. //remark := activityName
  159. fontColor := "#D9001B"
  160. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  161. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  162. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  163. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  164. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  165. sendData["remark"] = map[string]interface{}{"value": remark, "color": fontColor}
  166. if utils.RunMode == "release" {
  167. sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
  168. } else {
  169. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  170. }
  171. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  172. sendMap["data"] = sendData
  173. sendTemplateMsg(sendUrl, sendMap, itemOpenid, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  174. fmt.Println("send end")
  175. return
  176. }
  177. // 微路演新增留言提问消息提醒
  178. func SendWxMsgWithMicroRoadshowAsk(req models.AddVideoCommnetReq, user *models.WxUserItem, resourceId int) (err error) {
  179. var msg string
  180. defer func() {
  181. if err != nil || msg != "" {
  182. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  183. go utils.SendAlarmMsg(fmt.Sprint("发送微路演新增留言提问消息提醒失败,用户名", req.Title, "ID:", req.Id), 2)
  184. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  185. }
  186. }()
  187. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  188. if e != nil {
  189. return
  190. }
  191. if companyItem == nil {
  192. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  193. }
  194. var first string
  195. var keyword1 string
  196. var keyword2 string
  197. var keyword3 string
  198. var keyword4 string
  199. var remark string
  200. first = req.Title + "有新的留言,请及时处理"
  201. keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
  202. keyword3 = time.Now().Format(utils.FormatDateTime)
  203. keyword2 = ""
  204. keyword4 = req.Content
  205. mobile := companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  206. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  207. if e != nil {
  208. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  209. return
  210. }
  211. openIdArr := make([]string, 0)
  212. for _, v := range openIdList {
  213. openIdArr = append(openIdArr, v.OpenId)
  214. }
  215. //SourceType int `description:"视频来源: 1-音频; 2-活动视频; 3-微路演视频 (不传默认为1)"`
  216. redirectUrl := ""
  217. if req.SourceType == 3 {
  218. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_INDUSTRYR_EPORT + strconv.Itoa(resourceId)
  219. remark = "点击进入产业资源包详情页"
  220. } else {
  221. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(resourceId)
  222. remark = "点击查看活动详情"
  223. }
  224. sendInfo := new(SendWxTemplate)
  225. sendInfo.First = first
  226. sendInfo.Keyword1 = keyword1
  227. sendInfo.Keyword2 = keyword2
  228. sendInfo.Keyword3 = keyword3
  229. sendInfo.Keyword4 = keyword4
  230. sendInfo.Remark = remark
  231. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  232. sendInfo.RedirectUrl = redirectUrl
  233. sendInfo.RedirectTarget = 3
  234. sendInfo.Resource = strconv.Itoa(req.Id)
  235. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
  236. sendInfo.OpenIdArr = openIdArr
  237. err = PublicSendTemplateMsg(sendInfo)
  238. if err != nil {
  239. return
  240. }
  241. return
  242. }
  243. func SendCommentWxTemplateMsg(req models.AddCygxArticleCommentReq, user *models.WxUserItem, articleInfo *models.ArticleDetail) (err error) {
  244. var msg string
  245. defer func() {
  246. if err != nil {
  247. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  248. go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", req.ArticleId), 2)
  249. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  250. }
  251. }()
  252. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  253. if e != nil {
  254. return
  255. }
  256. if companyItem == nil {
  257. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  258. }
  259. var first string
  260. var keyword1 string
  261. var keyword2 string
  262. var keyword3 string
  263. var keyword4 string
  264. var remark string
  265. var redirectUrl string
  266. var mobile string
  267. first = "【" + articleInfo.Title + "】有新的留言,请及时处理"
  268. keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
  269. keyword2 = "-"
  270. keyword3 = time.Now().Format(utils.FormatDateTime)
  271. keyword4 = req.Content
  272. remark = "点击查看报告详情"
  273. if articleInfo.ArticleId >= utils.SummaryArticleId {
  274. //研选报告添加汪洋
  275. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  276. } else {
  277. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  278. }
  279. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  280. if e != nil {
  281. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  282. return
  283. }
  284. openIdArr := make([]string, 0)
  285. for _, v := range openIdList {
  286. openIdArr = append(openIdArr, v.OpenId)
  287. }
  288. redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleInfo.ArticleId)
  289. sendInfo := new(SendWxTemplate)
  290. sendInfo.First = first
  291. sendInfo.Keyword1 = keyword1
  292. sendInfo.Keyword2 = keyword2
  293. sendInfo.Keyword3 = keyword3
  294. sendInfo.Keyword4 = keyword4
  295. sendInfo.Remark = remark
  296. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  297. sendInfo.RedirectUrl = redirectUrl
  298. sendInfo.RedirectTarget = 3
  299. sendInfo.Resource = strconv.Itoa(req.ArticleId)
  300. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
  301. sendInfo.OpenIdArr = openIdArr
  302. err = PublicSendTemplateMsg(sendInfo)
  303. if err != nil {
  304. return
  305. }
  306. return
  307. }