wx_template_msg.go 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793
  1. package services
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "hongze/hongze_cygx/models"
  8. "hongze/hongze_cygx/utils"
  9. "io/ioutil"
  10. "net/http"
  11. "strconv"
  12. "time"
  13. )
  14. // 活动预开始模版消息通知
  15. func SendWxMsgWithFrequency(keyword2, activityName, reserveResults, activityTime, activityAddress, remark string, openIdList []*models.OpenIdList, activityId 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. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  21. }
  22. fmt.Println("line 21", err, msg)
  23. }()
  24. //utils.FileLog.Info("%s", "services SendMsg")
  25. //accessToken, err := models.GetWxAccessTokenByXzs()
  26. //if err != nil {
  27. // msg = "GetWxAccessToken Err:" + err.Error()
  28. // return
  29. //}
  30. //if accessToken == "" {
  31. // msg = "accessToken is empty"
  32. // return
  33. //}
  34. //
  35. //sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  36. //templateId := utils.WxMsgTemplateIdActivityApplyXzs
  37. //sendMap := make(map[string]interface{})
  38. //sendData := make(map[string]interface{})
  39. //sendMap["template_id"] = templateId
  40. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)}
  41. ////sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  42. //sendData["keyword1"] = map[string]interface{}{"value": activityName, "color": "#173177"}
  43. //sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  44. //sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  45. //sendMap["data"] = sendData
  46. //WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  47. redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
  48. sendInfo := new(SendWxTemplate)
  49. sendInfo.Keyword1 = activityName
  50. sendInfo.Keyword2 = keyword2
  51. openIdArr := make([]string, 0)
  52. for _, v := range openIdList {
  53. openIdArr = append(openIdArr, v.OpenId)
  54. }
  55. sendInfo.Remark = remark
  56. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  57. sendInfo.RedirectUrl = redirectUrl
  58. sendInfo.RedirectTarget = 3
  59. sendInfo.Resource = strconv.Itoa(activityId)
  60. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
  61. sendInfo.OpenIdArr = openIdArr
  62. err = PublicSendTemplateMsg(sendInfo)
  63. return
  64. }
  65. // 专项调研活动预开始消息通知
  66. func SendWxMsgWithFrequencySpecial(first, activityName, reserveResults, activityTime, activityAddress, remark string, openIdList []*models.OpenIdList, activityId int) (err error) {
  67. var msg string
  68. defer func() {
  69. if err != nil {
  70. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  71. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  72. }
  73. }()
  74. accessToken, err := models.GetWxAccessTokenByXzs()
  75. if err != nil {
  76. msg = "GetWxAccessToken Err:" + err.Error()
  77. return
  78. }
  79. if accessToken == "" {
  80. msg = "accessToken is empty"
  81. return
  82. }
  83. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  84. templateId := utils.WxMsgTemplateIdActivityApplyXzs
  85. sendMap := make(map[string]interface{})
  86. sendData := make(map[string]interface{})
  87. sendMap["template_id"] = templateId
  88. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": utils.WX_MSG_PATH_ACTIVITY_SPECIAL_DETAIL + strconv.Itoa(activityId)}
  89. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  90. sendData["keyword1"] = map[string]interface{}{"value": activityName, "color": "#173177"}
  91. sendData["keyword2"] = map[string]interface{}{"value": activityTime, "color": "#173177"}
  92. //sendData["activity_name"] = map[string]interface{}{"value": activityName, "color": "#173177"}
  93. //sendData["reserve_results"] = map[string]interface{}{"value": reserveResults, "color": "#173177"}
  94. //sendData["activity_time"] = map[string]interface{}{"value": activityTime, "color": "#173177"}
  95. //sendData["activity_address"] = map[string]interface{}{"value": activityAddress, "color": "#173177"}
  96. sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  97. sendMap["data"] = sendData
  98. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  99. return
  100. }
  101. // 发送报告提问消息提醒
  102. func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.OpenIdList, articleId int) (err error) {
  103. var msg string
  104. defer func() {
  105. if err != nil {
  106. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  107. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,用户名", name, "文章ID:", articleId), 2)
  108. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  109. }
  110. fmt.Println("line 21", err, msg)
  111. }()
  112. var first string
  113. var keyword1 string
  114. var keyword2 string
  115. var keyword3 string
  116. var keyword4 string
  117. var remark string
  118. first = "研选报告有新的提问,请及时处理"
  119. keyword1 = name
  120. keyword3 = askTime
  121. keyword2 = ""
  122. keyword4 = askMsg
  123. remark = title
  124. openIdArr := make([]string, 0)
  125. for _, v := range openIdList {
  126. openIdArr = append(openIdArr, v.OpenId)
  127. }
  128. redirectUrl := utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)
  129. sendInfo := new(SendWxTemplate)
  130. sendInfo.First = first
  131. sendInfo.Keyword1 = keyword1
  132. sendInfo.Keyword2 = keyword2
  133. sendInfo.Keyword3 = keyword3
  134. sendInfo.Keyword4 = keyword4
  135. sendInfo.Remark = remark
  136. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  137. sendInfo.RedirectUrl = redirectUrl
  138. sendInfo.RedirectTarget = 3
  139. sendInfo.Resource = strconv.Itoa(articleId)
  140. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  141. sendInfo.OpenIdArr = openIdArr
  142. err = PublicSendTemplateMsg(sendInfo)
  143. if err != nil {
  144. return
  145. }
  146. return
  147. }
  148. // 到期提醒模板消息
  149. func SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark string, openIdList []*models.OpenIdList) (err error) {
  150. var msg string
  151. defer func() {
  152. if err != nil {
  153. fmt.Println(err)
  154. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  155. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  156. }
  157. }()
  158. accessToken, err := models.GetWxAccessToken()
  159. if err != nil {
  160. msg = "GetWxAccessToken Err:" + err.Error()
  161. return
  162. }
  163. if accessToken == "" {
  164. msg = "accessToken is empty"
  165. return
  166. }
  167. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  168. sendMap := make(map[string]interface{})
  169. sendData := make(map[string]interface{})
  170. sendMap["template_id"] = utils.WxMsgTemplateIdActivityChange
  171. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  172. sendData["productname"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  173. sendData["date"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  174. sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  175. sendMap["data"] = sendData
  176. fmt.Println(accessToken)
  177. fmt.Println(sendUrl)
  178. //WxSendTemplateMsg(sendUrl, sendMap, openIdList)
  179. return
  180. }
  181. // 发送报告提问消息提醒
  182. func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList, articleId int) (err error) {
  183. var msg string
  184. defer func() {
  185. if err != nil {
  186. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  187. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
  188. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  189. }
  190. }()
  191. accessToken, err := models.GetWxAccessTokenByXzs()
  192. if err != nil {
  193. msg = "GetWxAccessToken Err:" + err.Error()
  194. return
  195. }
  196. if accessToken == "" {
  197. msg = "accessToken is empty"
  198. return
  199. }
  200. var first string
  201. first = keyWord1
  202. keyword1 := keyWord2
  203. keyword2 := keyWord3
  204. keyword3 := keyWord4
  205. keyword4 := ""
  206. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  207. templateId := utils.TemplateIdByProductXzs
  208. sendMap := make(map[string]interface{})
  209. sendData := make(map[string]interface{})
  210. sendMap["template_id"] = templateId
  211. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId)}
  212. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  213. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  214. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  215. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
  216. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
  217. sendMap["data"] = sendData
  218. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  219. return
  220. }
  221. // 发送用户阅读报告消息提醒
  222. func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, articleId int) (err error) {
  223. var msg string
  224. defer func() {
  225. if err != nil {
  226. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  227. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
  228. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  229. }
  230. }()
  231. accessToken, err := models.GetWxAccessTokenByXzs()
  232. if err != nil {
  233. msg = "GetWxAccessToken Err:" + err.Error()
  234. return
  235. }
  236. if accessToken == "" {
  237. msg = "accessToken is empty"
  238. return
  239. }
  240. var first string
  241. first = keyWord1
  242. keyword1 := keyWord2
  243. remark := "点击查看报告详情"
  244. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  245. templateId := utils.WxMsgTemplateIdArticleUserRemind
  246. sendMap := make(map[string]interface{})
  247. sendData := make(map[string]interface{})
  248. sendMap["template_id"] = templateId
  249. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)}
  250. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  251. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  252. sendData["keyword2"] = map[string]interface{}{"value": "--", "color": "#173177"}
  253. sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  254. sendMap["data"] = sendData
  255. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  256. return
  257. }
  258. // 发送用户操作活动消息提醒
  259. func SendWxMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  260. var msg string
  261. defer func() {
  262. if err != nil {
  263. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  264. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
  265. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  266. }
  267. }()
  268. accessToken, err := models.GetWxAccessTokenByXzs()
  269. if err != nil {
  270. msg = "GetWxAccessToken Err:" + err.Error()
  271. return
  272. }
  273. if accessToken == "" {
  274. msg = "accessToken is empty"
  275. return
  276. }
  277. var first string
  278. first = keyWord1
  279. keyword1 := keyWord2
  280. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  281. templateId := utils.WxMsgTemplateIdArticleUserRemind
  282. sendMap := make(map[string]interface{})
  283. sendData := make(map[string]interface{})
  284. sendMap["template_id"] = templateId
  285. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  286. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  287. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  288. sendMap["data"] = sendData
  289. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  290. return
  291. }
  292. // 发送用户操作专项调研活动消息提醒
  293. func SendWxMsgWithSpecialActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  294. var msg string
  295. defer func() {
  296. if err != nil {
  297. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  298. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
  299. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  300. }
  301. }()
  302. accessToken, err := models.GetWxAccessTokenByXzs()
  303. if err != nil {
  304. msg = "GetWxAccessToken Err:" + err.Error()
  305. return
  306. }
  307. if accessToken == "" {
  308. msg = "accessToken is empty"
  309. return
  310. }
  311. var first string
  312. first = keyWord1
  313. keyword1 := keyWord2
  314. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  315. templateId := utils.WxMsgTemplateIdArticleUserRemind
  316. sendMap := make(map[string]interface{})
  317. sendData := make(map[string]interface{})
  318. sendMap["template_id"] = templateId
  319. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/specialDetail/specialDetail?id=" + strconv.Itoa(activityId)}
  320. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  321. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  322. sendMap["data"] = sendData
  323. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  324. return
  325. }
  326. // 活动带问提醒
  327. func SendActivityAskApplyTemplateMsg(applyName, applyTime, askContent, activityName string, activityId int, itemOpenid *models.OpenIdList) (err error) {
  328. var msg string
  329. defer func() {
  330. if err != nil {
  331. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  332. go utils.SendAlarmMsg("活动带问提醒发送模版消息失败"+activityName, 2)
  333. }
  334. if msg != "" {
  335. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  336. }
  337. }()
  338. var accessToken string
  339. if utils.RunMode == "release" {
  340. accessToken, err = models.GetWxAccessTokenByXzs()
  341. if err != nil {
  342. msg = "GetWxAccessToken Err:" + err.Error()
  343. return
  344. }
  345. if accessToken == "" {
  346. msg = "accessToken is empty"
  347. return
  348. }
  349. } else {
  350. accessToken, err = models.GetWxAccessToken()
  351. if err != nil {
  352. msg = "GetWxAccessToken Err:" + err.Error()
  353. return
  354. }
  355. if accessToken == "" {
  356. msg = "accessToken is empty"
  357. return
  358. }
  359. }
  360. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  361. sendMap := make(map[string]interface{})
  362. sendData := make(map[string]interface{})
  363. first := "有新的客户提问"
  364. keyword1 := applyName
  365. keyword2 := "-"
  366. keyword3 := applyTime
  367. keyword4 := askContent
  368. remark := activityName
  369. fontColor := "#D9001B"
  370. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  371. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  372. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  373. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  374. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  375. sendData["remark"] = map[string]interface{}{"value": remark, "color": fontColor}
  376. if utils.RunMode == "release" {
  377. sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
  378. } else {
  379. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  380. }
  381. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  382. sendMap["data"] = sendData
  383. sendTemplateMsg(sendUrl, sendMap, itemOpenid, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  384. fmt.Println("send end")
  385. return
  386. }
  387. // 活动带问提醒
  388. func SendActivityAskApplyTemplateMsgV2(keyword1, keyword2, keyword3, keyword4, remark string, itemOpenid *models.OpenIdList, itemAct *models.ActivityDetail) (err error) {
  389. var msg string
  390. defer func() {
  391. if err != nil {
  392. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  393. go utils.SendAlarmMsg("活动带问提醒发送模版消息失败"+remark, 2)
  394. }
  395. if msg != "" {
  396. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  397. }
  398. }()
  399. activityId := itemAct.ArticleId
  400. var redirectUrl string
  401. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
  402. openIdArr := make([]string, 0)
  403. openIdArr = append(openIdArr, itemOpenid.OpenId)
  404. sendInfo := new(SendWxTemplate)
  405. sendInfo.Keyword1 = keyword1
  406. sendInfo.Keyword2 = keyword2
  407. sendInfo.Keyword3 = keyword3
  408. sendInfo.Keyword4 = keyword4
  409. sendInfo.Remark = remark
  410. sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
  411. sendInfo.RedirectUrl = redirectUrl
  412. sendInfo.RedirectTarget = 3
  413. sendInfo.Resource = strconv.Itoa(activityId)
  414. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
  415. sendInfo.OpenIdArr = openIdArr
  416. err = PublicSendTemplateMsg(sendInfo)
  417. return
  418. }
  419. // 专项产业调研模板消息推送
  420. func SendSpecialTemplateMsg(applyName, applyTime, mobile, activityName, resource string, itemOpenid *models.OpenIdList) (err error) {
  421. var msg string
  422. defer func() {
  423. if err != nil {
  424. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  425. go utils.SendAlarmMsg("专项产业调研模板消息推送消息失败"+activityName, 2)
  426. }
  427. if msg != "" {
  428. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  429. }
  430. }()
  431. var accessToken string
  432. if utils.RunMode == "release" {
  433. accessToken, err = models.GetWxAccessTokenByXzs()
  434. if err != nil {
  435. msg = "GetWxAccessToken Err:" + err.Error()
  436. return
  437. }
  438. if accessToken == "" {
  439. msg = "accessToken is empty"
  440. return
  441. }
  442. } else {
  443. accessToken, err = models.GetWxAccessToken()
  444. if err != nil {
  445. msg = "GetWxAccessToken Err:" + err.Error()
  446. return
  447. }
  448. if accessToken == "" {
  449. msg = "accessToken is empty"
  450. return
  451. }
  452. }
  453. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  454. sendMap := make(map[string]interface{})
  455. sendData := make(map[string]interface{})
  456. var first string
  457. if resource == "sale" {
  458. first = "有客户对专项调研感兴趣"
  459. } else {
  460. first = "有5家公司预报名专项调研"
  461. }
  462. keyword1 := applyName
  463. keyword2 := mobile
  464. keyword3 := applyTime
  465. keyword4 := activityName
  466. fontColor := "#D9001B"
  467. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  468. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  469. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  470. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  471. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  472. if utils.RunMode == "release" {
  473. sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
  474. } else {
  475. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  476. }
  477. sendMap["data"] = sendData
  478. sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  479. return
  480. }
  481. //弘则投资:
  482. //Y59n_AHg-RLCKaz293geW76KDHpGL1qOnE7eF_lxelY 活动预约通知
  483. //CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM 项目状态变更通知
  484. //
  485. //
  486. //弘则研究:
  487. //MwZ5wxfd0O1Yt0Pkf6OkfWP4USQzZbiEo5SkZ26735s 活动预约通知
  488. //dYg6iHooRq74PyCXmw_Ns7qdJZmbtLoKS2p2FKeaXl0 项目状态变更通知
  489. func WxSendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*models.OpenIdList, resource string, sendType int) (err error) {
  490. for _, v := range items {
  491. sendMap["touser"] = v.OpenId
  492. data, err := json.Marshal(sendMap)
  493. if err != nil {
  494. fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
  495. return err
  496. }
  497. utils.FileLog.Info("One SendData:%s", string(data))
  498. fmt.Println(string(data))
  499. err = SendTemplateMsg(sendUrl, data, resource, sendType, v)
  500. if err != nil {
  501. fmt.Println("send err:", err.Error())
  502. return err
  503. }
  504. }
  505. return
  506. }
  507. func SendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, dataItem *models.OpenIdList) (err error) {
  508. client := http.Client{}
  509. resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
  510. if err != nil {
  511. return
  512. }
  513. defer resp.Body.Close()
  514. body, _ := ioutil.ReadAll(resp.Body)
  515. utils.FileLog.Info("SendResult:%s", string(body))
  516. var templateResponse models.SendTemplateResponse
  517. err = json.Unmarshal(body, &templateResponse)
  518. fmt.Println(templateResponse.Errcode)
  519. fmt.Println(templateResponse.Errmsg)
  520. if err != nil {
  521. return err
  522. }
  523. //新增模板消息推送记录
  524. {
  525. tr := new(models.UserTemplateRecord)
  526. tr.UserId = dataItem.UserId
  527. tr.OpenId = dataItem.OpenId
  528. tr.Resource = resource
  529. tr.SendData = string(data)
  530. tr.Result = string(body)
  531. tr.CreateDate = time.Now().Format(utils.FormatDate)
  532. tr.CreateTime = time.Now().Format(utils.FormatDateTime)
  533. if templateResponse.Errcode == 0 {
  534. tr.SendStatus = 1
  535. } else {
  536. tr.SendStatus = 0
  537. }
  538. tr.SendType = sendType
  539. go func() {
  540. err = models.AddUserTemplateRecord(tr)
  541. if err != nil {
  542. utils.FileLog.Info(fmt.Sprintf("AddUserTemplateRecord Err:%s", err.Error()))
  543. }
  544. }()
  545. }
  546. return
  547. }
  548. // 发送报告更新的消息给预约的用户
  549. func SendWxMsgWithArticleUpdate(first, keyWord1, keyWord2, keyWord3, keyWord4 string, item *models.OpenIdList, articleId int) (err error) {
  550. var msg string
  551. defer func() {
  552. if err != nil {
  553. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  554. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
  555. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  556. }
  557. }()
  558. accessToken, err := models.GetWxAccessTokenByXzs()
  559. if err != nil {
  560. msg = "GetWxAccessToken Err:" + err.Error()
  561. return
  562. }
  563. if accessToken == "" {
  564. msg = "accessToken is empty"
  565. return
  566. }
  567. var openIdList []*models.OpenIdList
  568. openIdList = append(openIdList, item)
  569. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  570. templateId := utils.TemplateIdByProductXzs
  571. sendMap := make(map[string]interface{})
  572. sendData := make(map[string]interface{})
  573. sendMap["template_id"] = templateId
  574. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId) + "&IsSendWx=1"}
  575. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  576. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  577. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  578. sendData["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
  579. sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
  580. sendData["remark"] = map[string]interface{}{"value": "点击查看报告详情", "color": "#173177"}
  581. sendMap["data"] = sendData
  582. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  583. return
  584. }
  585. // 周日下午4点半,推送全部活动
  586. func SendActivityOnenIdWxTemplateMsg(first, keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList) (err error) {
  587. var msg string
  588. defer func() {
  589. if err != nil {
  590. go utils.SendEmail("周日下午4点半,推送全部活"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  591. go utils.SendAlarmMsg(fmt.Sprint("发送周日下午4点半,推送全部活模版消息失败,"), 2)
  592. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  593. }
  594. }()
  595. accessToken, err := models.GetWxAccessTokenByXzs()
  596. if err != nil {
  597. msg = "GetWxAccessToken Err:" + err.Error()
  598. return
  599. }
  600. if accessToken == "" {
  601. msg = "accessToken is empty"
  602. return
  603. }
  604. //var openIdList []*models.OpenIdList
  605. //openIdList = append(openIdList, item)
  606. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  607. templateId := utils.WxMsgTemplateIdArticleUserRemind
  608. sendMap := make(map[string]interface{})
  609. sendData := make(map[string]interface{})
  610. sendMap["template_id"] = templateId
  611. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pages/activity/activity"}
  612. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId}
  613. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  614. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  615. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  616. sendData["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
  617. sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
  618. sendData["remark"] = map[string]interface{}{"value": "点击查看下周活动列表", "color": "#173177"}
  619. sendMap["data"] = sendData
  620. WxSendTemplateMsg(sendUrl, sendMap, openIdList, "", utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  621. return
  622. }
  623. // 发送用户留言提醒
  624. // func SendCommentWxTemplateMsg(title, companyName, userName, sellerName, createTime, content string, openIdList []*models.OpenIdList, articleId int) (err error) {
  625. func SendCommentWxTemplateMsg(req models.AddCygxArticleCommentReq, user *models.WxUserItem, articleInfo *models.ArticleDetail) (err error) {
  626. var msg string
  627. defer func() {
  628. if err != nil {
  629. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  630. go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒失败,文章ID:", req.ArticleId), 2)
  631. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  632. }
  633. }()
  634. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  635. if e != nil {
  636. return
  637. }
  638. if companyItem == nil {
  639. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  640. }
  641. var first string
  642. var keyword1 string
  643. var keyword2 string
  644. var keyword3 string
  645. var keyword4 string
  646. var remark string
  647. var redirectUrl string
  648. var mobile string
  649. first = "【" + articleInfo.Title + "】有新的留言,请及时处理"
  650. keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
  651. keyword2 = "留言:" + articleInfo.Title
  652. keyword3 = time.Now().Format(utils.FormatDateTime)
  653. keyword4 = req.Content
  654. remark = "点击查看报告详情"
  655. if articleInfo.ArticleId >= utils.SummaryArticleId {
  656. //研选报告添加汪洋
  657. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic + "," + utils.ActSendMsgMobile
  658. } else {
  659. mobile = companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  660. }
  661. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  662. if e != nil {
  663. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  664. return
  665. }
  666. openIdArr := make([]string, 0)
  667. for _, v := range openIdList {
  668. openIdArr = append(openIdArr, v.OpenId)
  669. }
  670. redirectUrl = utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleInfo.ArticleId)
  671. sendInfo := new(SendWxTemplate)
  672. sendInfo.First = first
  673. sendInfo.Keyword1 = keyword1
  674. sendInfo.Keyword2 = keyword2
  675. sendInfo.Keyword3 = keyword3
  676. sendInfo.Keyword4 = keyword4
  677. sendInfo.Remark = remark
  678. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  679. sendInfo.RedirectUrl = redirectUrl
  680. sendInfo.RedirectTarget = 3
  681. sendInfo.Resource = strconv.Itoa(req.ArticleId)
  682. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
  683. sendInfo.OpenIdArr = openIdArr
  684. err = PublicSendTemplateMsg(sendInfo)
  685. if err != nil {
  686. return
  687. }
  688. return
  689. }
  690. // 微路演新增留言提问消息提醒
  691. func SendWxMsgWithMicroRoadshowAsk(req models.AddVideoCommnetReq, user *models.WxUserItem, resourceId int) (err error) {
  692. var msg string
  693. defer func() {
  694. if err != nil || msg != "" {
  695. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  696. go utils.SendAlarmMsg(fmt.Sprint("发送微路演新增留言提问消息提醒失败,用户名", req.Title, "ID:", req.Id), 2)
  697. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  698. }
  699. }()
  700. companyItem, e := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  701. if e != nil {
  702. return
  703. }
  704. if companyItem == nil {
  705. msg = "获取客户所属销售信息失败,UserID:" + strconv.Itoa(user.UserId)
  706. }
  707. var first string
  708. var keyword1 string
  709. var keyword2 string
  710. var keyword3 string
  711. var keyword4 string
  712. var remark string
  713. first = req.Title + "有新的留言,请及时处理"
  714. keyword1 = user.CompanyName + "——" + user.RealName + "(" + companyItem.SellerName + ")"
  715. keyword3 = time.Now().Format(utils.FormatDateTime)
  716. keyword2 = ""
  717. keyword4 = req.Content
  718. mobile := companyItem.Mobile + "," + utils.WxMsgTemplateIdAskMsgMobilePublic
  719. openIdList, e := models.GetWxOpenIdByMobileList(mobile)
  720. if e != nil {
  721. err = errors.New("GetWxOpenIdByMobileList, Err: " + e.Error())
  722. return
  723. }
  724. openIdArr := make([]string, 0)
  725. for _, v := range openIdList {
  726. openIdArr = append(openIdArr, v.OpenId)
  727. }
  728. //SourceType int `description:"视频来源: 1-音频; 2-活动视频; 3-微路演视频 (不传默认为1)"`
  729. redirectUrl := ""
  730. if req.SourceType == 3 {
  731. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_INDUSTRYR_EPORT + strconv.Itoa(resourceId)
  732. remark = "点击进入产业资源包详情页"
  733. } else {
  734. redirectUrl = utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(resourceId)
  735. remark = "点击查看活动详情"
  736. }
  737. sendInfo := new(SendWxTemplate)
  738. sendInfo.First = first
  739. sendInfo.Keyword1 = keyword1
  740. sendInfo.Keyword2 = keyword2
  741. sendInfo.Keyword3 = keyword3
  742. sendInfo.Keyword4 = keyword4
  743. sendInfo.Remark = remark
  744. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  745. sendInfo.RedirectUrl = redirectUrl
  746. sendInfo.RedirectTarget = 3
  747. sendInfo.Resource = strconv.Itoa(req.Id)
  748. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_COMMENT
  749. sendInfo.OpenIdArr = openIdArr
  750. err = PublicSendTemplateMsg(sendInfo)
  751. if err != nil {
  752. return
  753. }
  754. return
  755. }